0.前言
此文诞生源于python多进程的一个诡异表现,如果你使用pytho多进程过程中,发现子进程被挂起(一直处于Sleeping),请参考本文档。
本文先简单介绍python多进程常规用法,然后主要说说这个bug的根源,以及如何解决。
1.python多进程使用
python多进程库是multiprocessing,一般我们常用它的Pool,怎么用直接看示例代码。
ps : 这里只是简单来一个示例,因为默认大家了解python基本的多进程使用,想了解其他的请自行google
# multiprocessing.Pool 示例
def subprocesses(argv):
"""do Subprocesses job"""
print(f"argv ={argv}")
sleep(1)
return argv
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=4)
results = []
for i in xrange(10):
msg = "hello%d" %(i)
sub_res = pool.apply_async(func, (msg, ))
results.append(sub_res)
pool.close() # 关闭进程池,表示不能再往进程池中添加进程,需要在join之前调用
pool.join() # 等待进程池中的所有进程执行完毕