Python的多进程多线程整理

Python的多进程多线程整理

最近利用python跑多线程的任务,遇到了很多问题,在这里整理一下。


第一个问题是在用from multiprocessing.dummy import Pool的线程池时发现的,有这样一个程序:

from multiprocessing.dummy import Pool
import thread

class A():
    def __init__(self,i):
        # super(A, self).__init__()
        self.tid = i

    def runa(self):
        print('done!')
        # thread.exit()
        sys.exit()

def process():
    pool = Pool(processes=4)
    queries = [[0 for j in range(0,10)] for i in range(0,10)]
    for i in range(0,10):
        y = A(i)
        pool.apply_async(y.runa, args=())
    pool.close()
    pool.join()
    print("exit")

if __name__=='__main__':
    process()

Linux, python2下:
程序不用exit方法时不会出问题,用了其中一个退出后都会卡死。
后来发现是因为Pool结束线程必须等待线程正常退出后,发送一个None消息来通信[^1]导致的,具体资料请看下方的参考资料。

windows, python3下:
程序正常运行

参考资料

[1] multiprocessing库之pool浅析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值