python - Python多进程Pool的map方法
问题描述
def pool_process(f, data, pool_size):
tp1 = time.time()
pool = Pool(processes=pool_size)
result = pool.map(f, data)
pool.close()
pool.join()
print("Results", result)
print("Overall Time:", round((time.time()-tp1),2))
return round((time.time()-tp1),2)
def check_prime(num):
print(multiprocessing.current_process(), multiprocessing.current_process().pid)
t1 = time.time()
res = False
if num > 0:
for i in range(2,num):
if (num % i) == 0:
print(num,"is not a prime number")
print(i,"times",num//i,"is",num)
print("Time:", int(time.time()-t1))
break
else:
print(num,"is a prime number")
print("Time:", time.time()-t1)
res = True
return res
dataRange = range(10000)
pool_process(check_prime, dataRange, 6)
我正在尝试在 Jupiter notebook 中的 python 中测试这种多处理,该程序实际上以正常输出开始,并在几秒钟后冻结在那里。我认为代码不知何故卡在某个地方,所以我使用了 ps -elf | grep PID 在执行开始后检查其中一个进程的状态,我几乎一直得到 S,有时是 U,我不知道它是什么意思。然后,如果我使用 ps -elf | grep PID 稍后查看进程状态,没有任何痕迹,笔记本中的程序也没有结束。我用谷歌搜索了一些关于这个地图方法的东西,但仍然不知道发生了什么。如果有人可以帮助解决这个问题,我们将不胜感激。
解决方案
基本上,该Pool.map
方法将一个函数(例如,f
)和一个可迭代对象(例如, list [x, y, z]
)作为输入,并将该函数应用于可迭代对象中的每个项目,并返回一个新的可迭代对象(在本例中为
[f(x), f(y), f(z)]
)。
该Pool.map
方法与使用并行性的 vanillamap
函数不同Pool.map
,这就是为什么它是 Pool 对象的方法。(可选地,你也可以指定一个“chunksize”参数来告诉 Python 你想Pool.map
如何分割工作,可以这么说。)
希望这可以帮助!
相关 Python 文档:https ://docs.python.org/3.8/library/multiprocessing.html#multiprocessing.pool.Pool.map
推荐阅读
- python - 如何使用 selenium 和 python 通过 id 定位谷歌搜索栏
- ruby - 使用试除法在 Ruby 中进行素数分解
- python - 无法使用表单操作方法重定向到视图
- r - 为什么 vegan 的 adonis() 每次都返回不同的 p 值?
- regex - 使用 Perl 正则表达式匹配字符串的一部分
- git - 通过没有 SSL 的 HTTP 使用带有私有存储库的 Go 模块
- javascript - 未捕获的 typeError: .fullCalendar() 不是 fullCalendar v4 的函数
- sql - 带有“Exists”子句的子查询,其中需要从两个表中收集信息
- javascript - 使用 JavaScript 制作跨度播放音乐(mp3)
- c# - 带有 index++ 的三元运算符给出“只有赋值、调用、递增、递减、等待和新对象表达式可以用作语句”