python 多进程 AttributeError: Cant pickle local object

python闭包不支持pickle(序列化)。多进程需要函数能pickle。
有几种方式解决:
0.将函数体中的函数挪出。
这是最简单的方法。但是有时因为函数接口已经给定,需要使用函数来定义函数。考虑以下两种方法。
1.更换pickle,考虑以下代码:

 from pathos.multiprocessing import ProcessingPool as Pool

网址
https://github.com/uqfoundation/pathos

2.避免使用闭包
错误代码(报错)

from multiprocessing import Pool


def test1(args):
    def test2(t):
        return args + t
    return test2

if __name__ == "__main__":
    p = Pool(4)
    result = p.map(test1(10), [i for i in range(10)])
    p.close()
    p.join()

    print(result)

改进

from multiprocessing import Pool


class test1:
    def __init__(self, args):
        self.args = args

    def __call__(self, t):
        return self.args + t


if __name__ == "__main__":
    p = Pool(4)
    result = p.map(test1(10), [i for i in range(10)])
    p.close()
    p.join()

    print(result)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值