Python多处理脚本似乎无错误地冻结
作者:互联网
我正在尝试使用多处理程序包并行调用一个函数(我们称其为myfunc),特别是使用pool.map即pool.map(myfunc,myarglist).当我简单地循环使用myarglist而不使用多重处理时,就没有错误,应该是这种情况,因为myfunc中的所有操作都在try块内调用.但是,当我使用pool.map调用该函数时,脚本总是停止运行,即它停止打印“ myfunc done!”.函数中的语句,进程停止使用CPU,但从不返回结果列表.我正在从Ubuntu 12.04的终端运行python 2.7.是什么原因导致这种情况发生,我该如何解决/解决问题?
cpu_count = int(multiprocessing.cpu_count())
pool = Pool(processes = cpu_count)
resultlist = pool.map(myfunc, myarglist)
pool.close()
更新
使用多处理时,一个问题可能是对象的大小,如果您认为可能是个问题,请参见answer.如答案所示:“如果此[解决方案]不起作用,则可能是您从函数中返回的内容不能腌制,因此无法正确通过队列.”多重处理通过腌制在进程之间传递对象.事实证明,我的一两个对象饮用的是BeautifulSoup that would not pickle的汤.
解决方法:
检查是否所有进程都已启动,这将帮助您调试它,并在代码末尾添加Pool.join().
这是一个示例代码
def start_process():
print 'Starting', multiprocessing.current_process().name
if __name__ == '__main__':
pool_size =2
pool = multiprocessing.Pool(processes=pool_size,
initializer=start_process,
)
pool_outputs = pool.map(function_name,argument_list)
pool.close() # no more tasks
pool.join() # wrap up current tasks
标签:python,python-2-7,multiprocessing,ubuntu-12-04 来源: https://codeday.me/bug/20191011/1893636.html