使用multiprocessing.pool.map生成入门,输出冗余信息

时间:2014-02-24 07:55:05

标签: python

我想在[0,M)中找到所有引物,并使用multiprocessing.pool.map方法编写它,但它输出了很多我不想要的。我的代码是这样的:

from multiprocessing import Pool

M = 100
vi = [0] * M

def do_sieve(p):
    global vi
    if p <= 1:
        vi[p] = -1
        return 
    for i in range(2*p, M, p):
        vi[i] = 1
    if vi[p] == 0:
        return p

if __name__ == '__main__':
    pool_size = 4
    pool = Pool(processes = pool_size)
    result = pool.map(do_sieve, range(0, M), 50)
    print result

输出如下:

[无,无,2,3,无,5,无,7,无,无,......]

我知道这是因为如果p不是引物, do_sieve 将直接返回,所以我希望结果只包含所有引物。任何人都可以帮我改进吗?

1 个答案:

答案 0 :(得分:1)

最后再添加一行来过滤掉None s:

result = [i for i in result if i is not None]