2016-08-05 19 views
1

Programm haben Funktion, die keinen Wert zurückgeben kann, um Zeit zu minimieren diese Funktion parallel Arbeiter aufrufen. Im folgenden Code haben die Ergebnisse dieser Funktion die "None" -Werte. Wie kann dies ausgeschlossen werden, wenn Werte von "ret" stammen?Python: Kein leeres Ergebnis von multiprocessing.Pool() zuordnen

#!/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 

Antwort

2

oddCheck kehrt None wenn num keine gerade Zahl ist (Sie in diesem Fall keine return-Anweisung haben, so None zurückgegeben werden).

Wenn Sie None Ergebnisse zu vermeiden, verwenden Sie nur eine Liste Verständnis, sie zu filtern:

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

Es sollte den Trick tun ;-)