python - 當(dāng)裝飾器遇到multiprocessing, 出了點(diǎn)bug.
問題描述
from multiprocessing import Pooldef with_app_context(need_new=False): def magic(func):app_store = {}def wrapper(*args, **kwargs): print ’inside’, args, kwargs result = func(*args, **kwargs) return resultreturn wrapper return magic@with_app_context(need_new=True)def func(k1, k2): print k1, k2 return ’ret’pool = Pool(processes=1)pool.apply_async(func, args=(’hi’, ’yo’))pool.close()pool.join()
什么結(jié)果都不輸出, 請問哪有bug?
問題解答
回答1:似乎是這個(gè)原因,函數(shù)裝飾器不可pickle 可以看看這個(gè):裝飾器與多進(jìn)程以及Pickle
擴(kuò)展: Python MultiProcessing 使用心得
回答2:我已經(jīng)找到原因了:
Traceback (most recent call last): File 'wrapper.py', line 30, in <module> print ret.get() File '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/pool.py', line 567, in get raise self._valuecPickle.PicklingError: Can’t pickle <type ’function’>: attribute lookup __builtin__.function failed
子進(jìn)程異常.
回答3:http://stackoverflow.com/ques...
