Python2 PicklingError: Can‘t pickle <type ‘instancemethod‘>: attribute lookup __builtin__.instanceme

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()

猜你喜欢

转载自blog.csdn.net/qq_38900565/article/details/109156729
今日推荐