记录一下python的多线程如何不阻塞

本文介绍了Python中多进程使用时需要注意的细节,包括参数传递方式和结果获取的正确做法。强调了不能在`pool.apply_async`后立即使用`get`方法,因为这会导致阻塞。正确的做法是先收集所有进程的返回值,待进程池执行完毕后再逐一获取结果。同时,文章提到了`if __name__ == '__main__'`的重要性,避免不必要的全局变量在多进程中重复创建。
摘要由CSDN通过智能技术生成

python多进程反而慢_python 3.6 多进程的坑_weixin_39625337的博客-CSDN博客

一定要注意多线程的输入参数的方式

如何获取结果呢,一定不能直接在pool.apply_async后面加get,这样相当于,你开一进程就要结果,就会直接阻塞,等返回了get才会开下一个。

所以先用一个容器把所有pool的返回装起来,然后等pool跑完了,在去pool取结果

from multiprocessing import Pool
    res=[]
    pool = Pool(4)
    print('开始多进程')
    a=time.time()
    res=[]
    for i in st_lst:
        res.append(pool.apply_async(func=get_trees, args=(,))
    pool.close()
    pool.join()
    #再去取结果
    for i in res:
        trees.append(i.get())
res.append(pool.apply_async(func=get_trees, args=(,).get())

这个get就不行了,会阻塞的

两点,pool里面怎么放参数,get不能直接放poolapply后面

这里再说一下多进程怎么运行,首先要知道if __name__是干什么的,

if下面是不会被运行的。

我们对一个函数开了多进程,系统会把这个整个py文件除了if以及上面的非def 内容都运行一遍,但后再运行pool里面的那个函数,所以一切不必要的变量,都要写在if里面,一面多进程都运行出来了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值