Python的多处理map_async在Windows上生成错误

时间:2012-09-17 18:40:21

标签: python multiprocessing pool

下面的代码在Unix上完美运行,但在Windows 7上生成多处理.TimeoutError(两个操作系统都使用python 2.7)。

知道为什么吗?感谢。

from multiprocessing import Pool

def increment(x):
    return x + 1

def decrement(x):
    return x - 1

pool = Pool(processes=2)
res1 = pool.map_async(increment, range(10))
res2 = pool.map_async(decrement, range(10))

print res1.get(timeout=1)
print res2.get(timeout=1)

1 个答案:

答案 0 :(得分:1)

您需要将实际的程序逻辑放在if __name__ == '__main__':块的旁边。

在Unixy系统上,Python分叉,生成多个进程。 Windows没有fork。 Python必须启动一个新的解释器并重新导入所有模块。这意味着每个子进程都将重新导入主模块。对于您编写的代码,重新导入模块将导致每个新启动的进程启动自己的进程。

请参阅:http://docs.python.org/library/multiprocessing.html#windows

编辑这对我有用:

from multiprocessing import Pool

def increment(x):
    return x + 1

def decrement(x):
    return x - 1

if __name__ == '__main__':
    pool = Pool(processes=2)
    res1 = pool.map_async(increment, range(10))
    res2 = pool.map_async(decrement, range(10))

    print res1.get(timeout=1)
    print res2.get(timeout=1)