将python的多处理模块与素数函数相结合

时间:2017-11-15 23:12:23

标签: python python-multiprocessing

我正在使用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

1 个答案:

答案 0 :(得分:0)

第三个代码段中的

data需要是一个列表。

变量data作为第二个参数输入pool_process

data = [15488801]
pool_process(check_prime, data, 1)

在那里,它被赋予Pool.map作为迭代的参数。

def pool_process(f,data,pool_size):
    # ...
    result = pool.map(f, data)

在将整数放入列表(并更正import语句)后,代码在我的机器上运行正常。

相关问题