编程语言
首页 > 编程语言> > Python多处理脚本似乎无错误地冻结

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