线程池+队列(ThreadPoolExecutor+queue)的这段程序怎样终止?
在学习并发时写了如下测试程序,功能是向队列1中装入数据,处理后装入队列2中。
import timefrom queue import Queue
from concurrent.futures import ThreadPoolExecutor
#两个队列
q1 = Queue()
q2 = Queue()
# 函数1:取出队列1中的值,处理后装入队列2中
def worker1():
while True:
item = q1.get()
print('get item from q1...', 'item = %s' % item)
time.sleep(0.1)
q2.put(item ** 2)
q1.task_done()
# 函数2:取出队列2中的值
def worker2():
while True:
item = q2.get()
print('get item from q2...', 'item = %s' % item)
time.sleep(0.1)
q2.task_done()
# 创建线程池
pool = ThreadPoolExecutor(10)
p1 = pool.submit(worker1)
p2 = pool.submit(worker2)
# 队列1中装入值
for item in range(6):
q1.put(item)
q1.join()
q2.join()
p1.result()
p2.result()
计算程序能输出预期结果,但程序没有终止运行。请问是什么原因,以及怎样解决?
回答:
因为两个线程里一直在while True
,可以增加一个结束信号,例如给队列里发送一个-1
,线程接受到的话退出while
循环,要注意两个队列都要发送结束信号。
以上是 线程池+队列(ThreadPoolExecutor+queue)的这段程序怎样终止? 的全部内容, 来源链接: utcz.com/a/165611.html