【发布时间】:2014-09-05 17:48:01
【问题描述】:
似乎来自logging 模块和multiprocessing 作业的处理程序不会混合:
import functools
import logging
import multiprocessing as mp
logger = logging.getLogger( 'myLogger' )
handler = logging.FileHandler( 'logFile' )
def worker( x, handler ) :
print x ** 2
pWorker = functools.partial( worker, handler=handler )
#
if __name__ == '__main__' :
pool = mp.Pool( processes=1 )
pool.map( pWorker, range(3) )
pool.close()
pool.join()
输出:
cPickle.PicklingError: Can't pickle <type 'thread.lock'>: attribute lookup thread.lock failed
如果我将pWorker替换为以下任一方法,则不会引发错误
# this works
def pWorker( x ) :
worker( x, handler )
# this works too
pWorker = functools.partial( worker, handler=open( 'logFile' ) )
我不太了解PicklingError。是因为logging.FileHandler 类的对象不可挑选吗? (我用谷歌搜索但没有找到任何东西)
【问题讨论】:
标签: python python-2.7 multiprocessing pickle