Python 多处理脚本看似无误地卡住

标签 python python-2.7 multiprocessing ubuntu-12.04

我正在尝试使用 multiprocessing 包并行调用一个函数(我们称之为 myfunc ),特别是使用 pool.mappool.map(myfunc, myarglist) 。当我在不使用 myarglist 的情况下简单地循环 multiprocessing 时,没有错误,应该是这种情况,因为 myfunc 中的所有操作都在 try block 中调用。但是,当我使用 pool.map 调用函数时,脚本总是停止运行,即它停止打印“myfunc done!”。我的函数中的语句和进程停止使用 CPU,但它永远不会返回 resultlist 。我从 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 多处理脚本看似无误地卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24537379/

相关文章:

python - AttributeError : partially initialized module 'turtle' has no attribute 'Turtle' (most likely due to a circular import)

python - 以 Pythonic 方式将项目添加到列表

python - 使用 pygame 时如何删除 "Hello from the pygame community"控制台警报?

python - addText() 更改 QGraphicsView 中的文本颜色

python - 多重处理似乎不起作用

python - 多处理的queue.get()什么时候返回DONE?

python - Sqlite3与python插入同一行

python - SSL验证python服务器/python

python - python多处理的生产者/消费者问题

python - python3.5中无法导入Kicad的Pcbnew