Windows和Spyder中的python多重处理问题

时间:2018-10-11 15:25:25

标签: python spyder python-multiprocessing

我有一个关于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中是否有针对此问题的解决方法?

1 个答案:

答案 0 :(得分:0)

经过一些研究,我了解到交互式解释器和多流程处理存在问题。

https://docs.python.org/2.7/library/multiprocessing.html#introduction中指出: 注意:... ...某些示例(例如Pool示例)在交互式解释器中不起作用。

spyder维护者回答了一个较旧的文章,它解决了类似的问题,即在Windows的Spyder的IPython控制台中确实不能很好地进行多处理。 (No multiprocessing print outputs (Spyder)

到目前为止,我发现的唯一解决方法是使用Windows cmd运行代码