我有一个关于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段。在https://docs.python.org/2/library/multiprocessing.html#windows的Windows。
我也避免了如我所述的儿童过程打印:Simple Python Multiprocessing function doesn't output results而是使用return。
我的代码可以工作,如果我从一个unix终端运行它,但我主要使用Windows为我的python项目。在Windows中是否有针对此问题的解决方法?
经过一些研究后,我了解交互式解释器和多路进行存在问题。
在:https://docs.python.org/2.7/library/multiprocessing.html#introduction中声明:注意:......一些示例,例如Pool示例在交互式解释器中不起作用。
一个较老的帖子解决了类似的问题,一个spyder维护者回答说,确实多处理在Spyder的IPython控制台上的Windows上运行不正常。 (No multiprocessing print outputs (Spyder))
到目前为止我发现的唯一解决方法是使用windows cmd来运行代码