python 2.7 类中使用多进程(multiprocessing)执行类函数时报错
PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup __builtin__.instancemethod failed
首先这是python2.7的一个bug,所以最简单的办法就是升级到python3
相关大神的文章的链接如下:
https://stackoverflow.com/questions/1816958/cant-pickle-type-instancemethod-when-using-multiprocessing-pool-map
http://bbs.chinaunix.net/thread-4111379-1-1.html
如果不升级python的话,就来改代码吧,我得改法如下:
import time
from multiprocessing import Pool
Class testClass():
def upMethod(self):
print '我是UP'
time.sleep(1)
def downMethod(self):
print '我是DOWN'
time.sleep(1)
def multiProcess(self):
p = Pool(2)
aObj=p.apply_async(self, args=('up',))#这里是重点
aObj=p.apply_async(self, args=('down',))#这里是重点
p.close()
p.join()
def __call__(self,sign):#这里是重点
if sign=='up':
return self.upMethod()
elif sign=='down':
return self.downMethod()
if __name__=='__main__':
testObj=testClass()
testObj.multiProcess()
关于__call__的说明 http://www.cnblogs.com/superxuezhazha/p/5793536.html
关于为什么这样改,大家看文章吧,我就不多BB了,有问题可以问我,大家一起探讨