python中计算排队等待时间_正确实施排队。排队在Python中进行多线程处理时

你实际上并没有阻止主线程的进程:

“正确的”(*)方法是通过连接所有线程来确保完成所有线程:def main() :

# keep reference to threads

threads = [threading.Thread(target=run) for _ in range(20)]

# start all threads

for t in threads:

t.start()

#20 jobs are put in the queue

for x in range(1,21) :

q.put(x)

#waits until queue is empty and then continues

q.join()

# join all threads

for t in threads:

t.join()

*但是,由于线程处于无限循环中,即使任务已完成,也无法正常工作。在

因此,另一种方法是确保您在报告任务之前等待:

^{pr2}$

不过,线程仍然被阻塞。你所要做的就是给线程一个消息,告诉他们退出。比如:def run() :

while True :

task = q.get()

if task == 'stop':

break

# simulate processing time *before* actual reporting

time.sleep(2)

print('Just finished task number',task)

q.task_done()

现在只需告诉主线程为所有线程放置足够的停止消息,以最终退出其无限循环:def main() :

# keep reference to threads

threads = [threading.Thread(target=run) for _ in range(20)]

# start all threads

for t in threads:

t.start()

#20 jobs are put in the queue

for x in range(1,21):

q.put(x)

for x in range(20):

# stop all threads after tasks are done

q.put('stop')

# waits until queue is empty and then continues

q.join()

# join all threads

for t in threads:

t.join()

提示:您不应该使用“幻数”,例如20。在模块级别有一个名为THREADS_COUNT的全局变量,因此当您想测试不同的配置时,只需更改一个位置。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值