2016-08-05 85 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] 

它應該做的伎倆;-)