我有一个代码,应该检查给定数字范围内的素数。我希望它并行执行。但是,我无法让它运行。根据我将数字传递给它的方式,它要么工作并正确检查素数,但没有并行运行,要么它不检查素数,但启动许多 python 进程并且显然并行化什么都不做。两者显然都不是我所希望的。
我的函数is_prime()应该检查一个数字是否是素数。在独立模式下,它正是这样做的。
import time
import multiprocessing
def is_prime(n):
if (n <= 1) :
return 'not a prime number'
if (n <= 3) :
return 'prime number'
if (n % 2 == 0 or n % 3 == 0) :
return 'not a prime number'
i = 5
while(i * i <= n):
if (n % i == 0 or n % (i + 2) == 0) :
return 'not a prime number'
i = i + 6
return 'prime number'
该multiprocessing_func(x)函数应该打印它得到的每个数字,如果该数字是质数,如is_prime(). 如果我定期调用该函数,这也会起作用。
def multiprocessing_func(x):
time.sleep(2)
print('{} is {}'.format(x, is_prime(x)))
现在,如果我想与多处理模块并行运行上述函数,我尝试将参数传递给上面的函数,就像target=multiprocessing_func, args=(i,)下面的代码一样。这会导致启动许多 python 进程,但不会检查素数。如果我改为运行它target=multiprocessing_func(i), args=(i,),它会检查素数,但不会并行检查。
if __name__ == '__main__':
starttime = time.time()
processes = []
for i in range(1,200):
p = multiprocessing.Process(target=multiprocessing_func, args=(i,))
processes.append(p)
p.start()
for process in processes:
process.join()
print('Time taken = {} seconds'.format(time.time() - starttime))
有人知道我在这里做错了什么吗?我真的不明白。非常感谢你的帮助!
哈士奇WWW
qq_花开花谢_0
相关分类