做公司网站的公司有哪些,重庆建设厂,门户网站搭建软件,温州做网站优化原因#xff1a;继承了进程类的类在初始化时#xff0c;pickle模块要对内部的成员变量进行序列化#xff0c;但不支持对自定义对象加锁#xff0c;所以会抛出类型异常的错误
比如#xff1a;使用多进程的参数传递中使用了自定义类
import multiprocessing as mp
from fu…原因继承了进程类的类在初始化时pickle模块要对内部的成员变量进行序列化但不支持对自定义对象加锁所以会抛出类型异常的错误
比如使用多进程的参数传递中使用了自定义类
import multiprocessing as mp
from functools import partialclass Model:def __init__(self):self.a 1def process_job(x, y):print(subProcess-a:,y.a) return x if __name__ __main__:m Model()partial_work partial(process_job, ym) # 将自定义Model类的对象作为参数res pool.map(partial_work, range(5)) # 这里将会报错pool.close()pool.join()print(res)
解决方法把类设置为全局变量进行访问就不用传入到子进程了
import multiprocessing as mpclass Model:def __init__(self):self.a 1ANone # 将需要在子进程中使用的自定义类对象申明为全局变量
def process_job(x):print(subProcess-a:,A.a) # 在子进程中访问 Model类对象return xif __name__ __main__:m Model()global AA m # 对全局变量进行赋值pool mp.Pool(5)res pool.map(process_job, range(5)) # 开启子进程pool.close()pool.join()print(res)