2016-08-05 11 views
1

プログラムは、この値を最小限に抑えるために、値を返さない関数を持っています。 以下のコードでは、この関数の結果に「なし」の値があります。これを除外する方法は「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] 

それはトリック;-)

を行う必要があります
関連する問題