【发布时间】:2017-11-15 23:12:23
【问题描述】:
我正在使用 python 多处理/池模块来比较检查数字是否为素数的函数的程序运行时间。我可以让主要功能自行工作,但似乎无法将两者合并,以便它们一起工作。池函数如下:
import math import time
import multiprocessing from multiprocessing import Pool
def pool_process(f,data,pool_size):
tp1 = time.time()
pool = Pool(processes = pool_size)
result = pool.map(f, data)
pool.close()
pool.join()
#enter code here
print("Results", result)
print("Overall Time:", (time.time()-tp1))
我用来检查一个数是否为素数的函数如下:
def check_prime(num):
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:", (time.time()-t1))
break
else:
print(num,"is a prime number")
print("Time:", time.time()-t1)
res = True
return res
然后我调用 pool_process 函数
data = 15488801
pool_process(check_prime, data, 1)
我收到以下错误:
'int' object is not iterable
【问题讨论】:
-
什么是
def pool_process(f,data,pool_size),为什么它会出现在您的代码中?f是什么,那个在哪里? -
我不完全确定,因为这是我得到的代码,我必须让它与主要功能一起使用。我见过一个类似的例子,如果有帮助的话,result=p.map(sqrt,[1,2,3])
-
那么
f呢? -
什么是主要功能?你是如何调用上面的代码的?我们不知道你没有向我们展示什么,如果你不能让某些东西工作,请提供minimal reproducible example 以及描述它是如何不起作用的。
-
我的笔记中有以下评论:# f 是一个接受单个参数的函数 我最好的猜测是 f(x) 是素数函数(检查数字是否为素数)并且通过在 pool_process 函数中调用 f 我正在调用 f(x)。
标签: python python-multiprocessing