4

下面的代码在 Unix 上完美运行,但在 Windows 7 上生成 multiprocessing.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)
4

1 回答 1

1

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

在 Unixy 系统上,Python 分叉,产生多个工作进程。Windows 没有分叉。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)
于 2012-09-17T18:47:09.460 回答