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下:
程序正常运行