我已经编写了一个程序来使用多处理 python 包中的“池”,但它一直挂着内核。(顺便说一下,我正在使用 Jupyter 和 Anaconda)
我尝试使用导入包中的函数,如“数学”,它运行良好,但是,当我使用在同一个 python 文件中创建的函数时,它不起作用。
import multiprocessing as mp
def f(x):
for i in x:
return i+1
ar=[1,2,3,4,5]
def main():
pool=mp.Pool(processes=4)
pool.map(f,ar)
if __name__== '__main__':
main()
它表明内核正在运行,但 cpu 使用率为 0%。
问题ar
不在您的主要功能的本地范围内,而是在它之上。把它放在里面,它应该可以工作。
from multiprocessing import Pool
def f(x):
return x+1
if __name__ == '__main__':
ar=[1,2,3,4,5]
with Pool(4) as p:
print(p.map(f, ar))
还要考虑map
将您的迭代器分配给整个流程,本质上它是在for
为您执行循环。因此,您可以直接访问 x。
最后,with
用作上下文管理器可确保您的池在完成时关闭。[文档]
编辑:我编辑并测试了上面的代码,我的发送了正确的值并正确关闭。
此代码在 Spyder 3.2.6 和标准终端中也适用于我。两个片段都正确关闭并且不会挂在我的机器上。
import multiprocessing as mp
def f(x):
return x+1
def main():
ar = [1,2,3,4,5]
pool = mp.Pool(processes=4)
print(pool.map(f, ar))
if __name__ == '__main__':
main()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句