下面的代码在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)
答案 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)