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笔记本的python中测试这种多处理,该程序实际上是从正常输出开始的,几秒钟后就冻结了。我认为代码不知怎么被卡住了,所以在执行开始后,我使用ps-elf|grep PID来检查其中一个进程的状态,我几乎一直得到S,有时还得到一个U,我不知道这意味着什么。然后,如果我稍后使用ps-elf|grepPID来检查进程的状态,就没有它的踪迹,笔记本中的程序也没有结束。我在谷歌上搜索了一些关于这种地图方法的东西,但仍然不知道发生了什么。如果有人能帮忙,我将不胜感激。
基本上,Pool.map
方法将一个函数(比如f
(和一个可迭代项(比如列表[x, y, z]
(作为输入,并将该函数应用于可迭代项中的每个项,返回一个新的可迭代项,[f(x), f(y), f(z)]
(。
Pool.map
方法与普通的map
函数的不同之处在于,Pool.map
使用并行性,这就是为什么它是Pool对象的方法。(也可以选择,您还可以指定一个"chunksize"参数来告诉Python您希望Pool.map
如何分割工作。(
希望这能有所帮助!
相关Python文档:https://docs.python.org/3.8/library/multiprocessing.html#multiprocessing.pool.Pool.map