PicklingError: Can’t pickle <type ‘instancemethod’>: attribute lookup builtin.instancemethod failed
语言版本: Python2
**库:**multiprocessing.pool
问题描述:使用类的方法给pool.apply_async进行传参出现报错
解决方法:不能使用类的方法直接复制,通过中间函数进行调用类的方法,再使用中间函数对apply_async进行传参。
完整代码:
#coding=utf-8
import time
from multiprocessing import Pool
class Attack:
def __init__(self):
pass
def run(self, data):
print '[+] ' + data + "attack exploit."
time.sleep(3)
return {
'data': data}
# + ---------------------------------下面是一起的--------------------------------------
attacker = Attack()
def conumers_wrapper(data):
return attacker.run(data)
class Test:
def __init__(self):
pass
def _save_result(self, data):
try:
print '[-] _save_result -> ', data
except Exception as e:
print e
def main(self):
name = 'aquaman'
pool = Pool(processes=20)
for _ in range(10):
# func[, args=()[, kwds={}[, callback=None]]]
pool.apply_async(conumers_wrapper, (name,), callback=self._save_result)
pool.close()
pool.join()
print "[*] finished."
if __name__ == '__main__':
Test().main()