Python “多处理”;池;挂起正在运行的程序

Python “多处理”;池;挂起正在运行的程序,python,python-multiprocessing,Python,Python Multiprocessing,我已经编写了一个程序来使用多处理python包中的“池”,但它一直挂起内核。(顺便说一下,我正在使用Jupyter和Anaconda) 我试着使用一个导入包中的函数,比如“math”,它工作得很好,但是,当我使用在同一个python文件中创建的函数时,它就不起作用了 将多处理导入为mp def f(x): 对于x中的i: 返回i+1 ar=[1,2,3,4,5] def main(): pool=mp.pool(进程=4) 池图(f,ar) 如果uuuu name uuuuuu='\uuuuuu

我已经编写了一个程序来使用多处理python包中的“池”,但它一直挂起内核。(顺便说一下,我正在使用Jupyter和Anaconda)

我试着使用一个导入包中的函数,比如“math”,它工作得很好,但是,当我使用在同一个python文件中创建的函数时,它就不起作用了

将多处理导入为mp
def f(x):
对于x中的i:
返回i+1
ar=[1,2,3,4,5]
def main():
pool=mp.pool(进程=4)
池图(f,ar)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()

它显示内核正在工作,但cpu使用率为0%。

问题是
ar
不在主函数的本地范围内,它在主函数之上。把它放进去,它应该会工作

来自多处理导入池的

def f(x):
返回x+1
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
ar=[1,2,3,4,5]
将池(4)作为p:
打印(p.map(f,ar))

也考虑<代码> map 正在接受您的迭代并将其分配给进程,本质上是为循环做<代码>。因此,您可以直接访问x

最后,将
一起用作上下文管理器可确保池在完成时关闭

编辑:我编辑并测试了上述代码,我的代码发送正确的值并正确关闭

该代码在Spyder 3.2.6和标准终端中也适用。两个代码段都正确地结束了,并且没有挂在我的机器上

将多处理导入为mp
def f(x):
返回x+1
def main():
ar=[1,2,3,4,5]
pool=mp.pool(进程=4)
打印(池图(f、ar))
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()

问题是什么?您的代码引发了
TypeError:“int”对象不可编辑
不,仍然是一样的问题。仍然是一样的问题。
ar
的位置是一个模糊的问题。此代码基本上与用于
多处理的python文档相同。故障的位置必须在运行python的环境中。我得到两个报告的症状:工作和不工作取决于我使用的IDE。我还没有弄清楚这是为什么。从terminal
python test.py运行上面的代码没有问题。许多IDE在运行多处理代码时都会遇到问题,因此这肯定是其中的一部分。我在spyder IDE和Jupyter上测试过它,但它不起作用,但在空闲时也能起作用。我不知道为什么。你使用的IDE是什么?