在多处理中使用pool.map时出现酸洗错误

时间:2016-10-31 03:06:42

标签: python multiprocessing pickle

我有一个如下功能:

def func1(date1,date2):
 #calculations

if __name__=='__main__':
    pool = Pool(processes=4)
    dates = [[dt.datetime(2016,6,17),dt.datetime(2016,6,23)],[dt.datetime(2016,6,24),dt.datetime(2016,6,30)],[dt.datetime(2016,7,1),dt.datetime(2016,7,7)],[dt.datetime(2016,7,8),dt.datetime(2016,7,14)]]
    result=pool.map(lambda x: func1(x),dates)

我看到以下错误:

    File "Location_Factors_C.py", line 204, in <module>
    result=pool.map(lambda x: func1(x),dates)
  File "/usr/lib/python2.7/multiprocessing/pool.py", line 251, in map
    return self.map_async(func, iterable, chunksize).get()
  File "/usr/lib/python2.7/multiprocessing/pool.py", line 558, in get
    raise self._value
cPickle.PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed

2 个答案:

答案 0 :(得分:1)

看起来你需要一个星号

result=pool.map(lambda x: func1(x),dates)

应该是:

result=pool.map(lambda x: func1(*x),dates)

你有func1()需要2个参数,而你只传递一个列表。

答案 1 :(得分:0)

将我的功能更改为接受日期列表:

def func1(datelist):
   date1 = datelist[0]
   date2 = datelist[1]


if __name__=='__main__':
    pool = Pool(processes=4)
    dates = [[dt.datetime(2016,6,17),dt.datetime(2016,6,23)],[dt.datetime(2016,6,24),dt.datetime(2016,6,30)],[dt.datetime(2016,7,1),dt.datetime(2016,7,7)],[dt.datetime(2016,7,8),dt.datetime(2016,7,14)]]
    result=pool.map(func1,dates)