我在我的项目中使用“startinpy”库(https://startinpy.readthedocs.io/en/0.10.2/)。它通常工作得很好,但是当我想在第二个过程中使用它时,会出现 pickle 错误:
TypeError: cannot pickle 'builtins.DT' object
MRE:
import startinpy
from multiprocessing import Process
class WorkCl:
def __init__(self):
self.dtm = DTM() # PROCESS
self.dtm.start()
time.sleep(1)
class DTM(Process):
def __init__(self):
Process.__init__(self)
self.dt = startinpy.DT()
if __name__ == '__main__':
wcl = WorkCl()
有谁知道如何进行这项工作?我需要使用“dt”对象作为类对象,因为我在各种类方法中使用它。另外,我使用多处理事件对象来停止进程,并使用 SharedMemory 和 ShareableList 在进程之间共享信息。
我找到了名为“pathos”的库(https://pathos.readthedocs.io/en/latest/pathos.html),但我不明白如何准确地用它替换标准多处理模块。有人可以帮忙吗?
不确定我完全理解您的用例,但恕我直言,不需要使用 DTM 类,有效的方法可以是使用 WorkCl 类中的静态方法来实例化您的 DT 对象:
import startinpy
from multiprocessing import Process
class WorkCl:
def __init__(self):
self.dtm_process = Process(target=self.run_dtm)
# processes are spawned by creating a Process object and then calling its start() method
self.dtm_process.start()
@staticmethod
def create_dt():
# create DT object
return startinpy.DT()
def run_dtm(self):
# Initialize the startinpy.DT object within the process
self.dt = self.create_dt()
print("DTM process started")
print("DTM process ending")
def stop(self):
# Properly terminate the process
self.dtm_process.terminate()
self.dtm_process.join()
if __name__ == '__main__':
wcl = WorkCl()