线程池+队列(ThreadPoolExecutor+queue)的这段程序怎样终止?

在学习并发时写了如下测试程序,功能是向队列1中装入数据,处理后装入队列2中。

import time

from 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()

clipboard.png
计算程序能输出预期结果,但程序没有终止运行。请问是什么原因,以及怎样解决?

回答:

因为两个线程里一直在while True,可以增加一个结束信号,例如给队列里发送一个-1,线程接受到的话退出while循环,要注意两个队列都要发送结束信号。

以上是 线程池+队列(ThreadPoolExecutor+queue)的这段程序怎样终止? 的全部内容, 来源链接: utcz.com/a/165611.html

回到顶部