我有一个关于python多重处理的大学项目,对于python项目,我在Windows中使用spyder。因此,我试图在spyder中运行非常琐碎的多处理代码,但每次运行spyder控制台时,它都会冻结并且永远无法完成。这是我的代码:
from multiprocessing import Pool, freeze_support
import multiprocessing
def f(i):
return i+1
def main():
pool = multiprocessing.Pool(4)
result = pool.map(f, range(4))
pool.close()
pool.join()
print result
if __name__ == '__main__':
freeze_support() #you need this in windows
main()
我已经注意到这是多进程和Windows中缺少fork的常见问题,因此我考虑了16.6.3.2段。 Windows https://docs.python.org/2/library/multiprocessing.html#windows中。
我还避免了在子流程中进行打印,如下所述:Simple Python Multiprocessing function doesn't output results,而是使用return。
如果我从unix终端运行它,我的代码就可以工作,但是我主要是将Windows用于我的python项目。 Windows中是否有针对此问题的解决方法?
答案 0 :(得分:0)
经过一些研究,我了解到交互式解释器和多流程处理存在问题。
在https://docs.python.org/2.7/library/multiprocessing.html#introduction中指出: 注意:... ...某些示例(例如Pool示例)在交互式解释器中不起作用。
spyder维护者回答了一个较旧的文章,它解决了类似的问题,即在Windows的Spyder的IPython控制台中确实不能很好地进行多处理。 (No multiprocessing print outputs (Spyder))
到目前为止,我发现的唯一解决方法是使用Windows cmd运行代码