0

(这是使用 Python 2.7)

我发现了类似的链接,但与我遇到的问题并不完全相同。该程序挂在 map_async 上,并且永远不会完成,我可以看到 Python 进程正在创建,但它永远不会完成:

import multiprocessing


def main():
    PROCESSES = 4
    print 'Creating pool with %d processes\n' % PROCESSES
    pool = multiprocessing.Pool(PROCESSES)
    r = pool.map_async(pow3, range(10))
    r.wait()


def pow3(x):
    try:
        return x**3
    except:
        print('%s: %s' % (x, traceback.format_exc()))

if __name__ == '__main__':
    main()
4

1 回答 1

2

它工作正常。
您是否在交互式解释器中运行它?请参阅文档中的
此注释:

注意此包中的功能要求 子模块可以导入主模块。这在编程指南中有介绍,但值得在这里指出。这意味着某些示例,例如 multiprocessing.Pool 示例将无法在交互式解释器中工作。例如:

>>> from multiprocessing import Pool   
>>> p = Pool(5)   

>>> def f(x):   
...     return x*x  

>>> p.map(f, [1,2,3])  

进程 PoolWorker-1:
进程 PoolWorker-2:
进程 PoolWorker-3:

回溯(最近一次通话最后):

AttributeError:'module'对象没有属性'f'
AttributeError:'module'对象没有属性'f'
AttributeError:'module'对象没有属性'f'

(如果你尝试这个,它实际上会输出三个以半随机方式交错的完整回溯,然后你可能不得不以某种方式停止主进程。)

于 2013-06-10T09:42:55.007 回答