2016-08-05 84 views
1

程序具有可能返回None值的函数,以最大限度地减少此函数在并行工作中调用的花费时间。 在下面的代码中,此函数的结果具有“无”值,如何排除这是来自“ret”的值?Python:不要映射空处理多处理结果.Pool()

#!/usr/bin/python 
import sys,multiprocessing,time 
maxNumber = sys.maxint+2 

def numGen(): 
    cnt=0 
    while cnt < maxNumber: 
     cnt +=1 
     yield cnt 

def oddCheck(num): 
    global maxNumber 
    # time.sleep(1) 
    if not bool(num%1000000): 
     print "[%s%%] %s" % (int((num/maxNumber)*100),num) 
    if num%2: 
     return num 

pool = multiprocessing.Pool() 
if sys.maxint < maxNumber: 
    print "We have problem on %s"%sys.maxint 
    # quit() 
ret = pool.imap(oddCheck, numGen()) 
pool.close() 
pool.join() 

for x in ret: 
    print x 

回答

2

oddCheck回报Nonenum不是偶数(你没有return语句在这种情况下,这样None将返回)。

如果你想避免None结果,只用一个列表解析来过滤他们:

ret = [x for x in pool.imap(oddCheck, numGen()) if x is not None] 

它应该做的伎俩;-)