クラス内でマルチプロセッシングをよりよく理解しようとしていますが、見つけることができる例では、apply_async ではなくマップを使用しています。以下でマップが機能していますが、apply_async には何も表示されません。どこが間違っていますか?
from multiprocessing import Pool
def unwrap_self_f(arg, **kwarg):
return C.f(*arg,**kwarg)
def unwrap_self_finisher(arg, **kwarg):
return C.finisher(*arg,**kwarg)
class C:
def f(self, name):
print 'hello %s' % name
return name
def finisher(self,result):
print "done"
def runMap(self):
print "running Map..."
pool = Pool(processes=2)
names = ('frank', 'justin', 'osi', 'thomas')
pool.map(unwrap_self_f, zip([self]*len(names), names))
def runAsync(self):
print "running Async..."
pool = Pool(processes=2)
names = ('frank', 'justin', 'osi', 'thomas')
for name in names:
pool.apply_async(unwrap_self_f,args=(name),callback=unwrap_self_finisher)
pool.close()
pool.join()
if __name__ == '__main__':
c = C()
c.runMap()
c.runAsync()