Python中类实例方法传入multiprocessing进程的问题咨询
解决多进程中调用类实例方法的问题
你提供的实例方法无法运行,核心问题有两个:
- 实例方法的定义不符合Python规范,缺少第一个必传的
self参数,导致调用时参数不匹配报错。 - 多进程启动时的参数传递需要和方法定义对应。
修正方案1:使用实例初始化参数
如果sleep的时长已经在实例初始化时确定,可直接复用实例属性:
import multiprocessing import time class SleepingClass: def __init__(self, sec): self.sec = sec # 实例方法必须携带第一个参数self def sleeper(self): time.sleep(self.sec) if __name__ == "__main__": sleepingClass = SleepingClass(1) # 方法已使用实例的self.sec,无需额外传参 process = multiprocessing.Process(target=sleepingClass.sleeper) process.start() process.join() # 可选,用于等待子进程执行完成
修正方案2:动态传递参数
如果需要在调用时动态指定sleep时长,可调整方法定义并正确传递参数:
import multiprocessing import time class SleepingClass: def __init__(self): pass # 实例方法第一个参数为self,后续为自定义参数 def sleeper(self, sec): time.sleep(sec) if __name__ == "__main__": sleepingClass = SleepingClass() sec = 1 # args传递的是self之后的参数,多进程会自动处理实例的序列化传递 process = multiprocessing.Process(target=sleepingClass.sleeper, args=[sec]) process.start() process.join()
额外说明
在Windows系统下,多进程依赖pickle序列化传递实例,因此你的类需要是可序列化的——普通无特殊属性(如打开的文件句柄、网络连接)的类都能满足要求。若遇到pickle相关报错,需检查类中是否包含无法序列化的对象。
内容的提问来源于stack exchange,提问作者ProgrammerSk
相关产品推荐
相关产品推荐

