在多重处理过程中使用Timer

问题描述

我正在尝试创建一个TemporaryProcess,它将在给定的time_alive下运行。为此,我编写了以下课程:

class TemporaryProcess(Process):
"""
It's a normal process which is automatically killed after x seconds
"""

def __init__(self,log_level,time_alive: int):
    super().__init__(log_level)
    self._time_alive = time_alive
    self._timer = Timer(self.time_alive,self.terminate)

def start(self):
    super().start()
    # Start the timer
    log.info(f'A timer is set to kill {self} after {self.time_alive} seconds.')
    self._timer.start()

def terminate(self):
    super().terminate()
    self._timer.cancel()

问题是我无法在构造函数上设置self._timer。如果这样做,则会出现以下异常:

    ForkingPickler(file,protocol).dump(obj)
    TypeError: can't pickle _thread.lock objects
    Traceback (most recent call last):
    File "<string>",line 1,in <module>
    File "D:\Program Files\Miniconda3\envs\Teste\lib\multiprocessing\spawn.py",line 105,in spawn_main
    exitcode = _main(fd)
    File "D:\Program Files\Miniconda3\envs\Teste\lib\multiprocessing\spawn.py",line 115,in _main
    self = reduction.pickle.load(from_parent)
    EOFError: Ran out of input

有人知道吗? 最好的问候

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)