主线程: 相当于生产者,只管向线程池提交任务。并不关心线程池是如何执行任务的。因此,并不关心是哪一个线程执行的这个任务。
线程池: 相当于消费者,负责接收任务,并将任务分配到一个空闲的线程中去执行。
python内置进程池
>>>执行结果
# 必须要有一个 main 测试
>>> if __name__ == "__main__":
# Pool 的实例化必须在 main 测试之下
>>>pool = Pool(2)
池的其他操作
操作一: close - 关闭提交通道,不允许再提交任务。
操作二: terminate - 中止进程池,中止所有任务。
Pool可以提供指定数量的进程供用户调用,当有新的请求提交到pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;
但如果池中的进程数已经达到规定最大值,那么该请求就会等待,直到池中有进程结束,才会创建新的进程来它。
>>>执行结果
# 会阻塞,知道结果产生了
>>> result = a_result.get()
使用线程池来实现并发服务器
>>>客户端
>>>执行结果