And*_*kov 3 python multithreading dictionary
程序具有可能返回 None 值的函数,以最大限度地减少在并行工作人员中调用该函数的时间。在下面的代码中,该函数的结果具有“None”值,如何从“ret”中排除该值?
#!/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
Run Code Online (Sandbox Code Playgroud)
oddCheckNone当不是偶数时返回num(在这种情况下没有 return 语句,因此None将被返回)。
如果您想避免None结果,只需使用列表理解来过滤它们:
ret = [x for x in pool.imap(oddCheck, numGen()) if x is not None]
Run Code Online (Sandbox Code Playgroud)
它应该可以解决问题;-)