如何停止python程序的一部分运行,但让其余部分定期执行?

如何停止python程序的一部分运行,但让其余部分定期执行?,python,multiprocess,Python,Multiprocess,我试图提前终止一个函数,但让程序的其余部分正常运行。我不允许更改函数的行为 我尝试将函数放入一个进程(使用多处理python库)并终止该进程。但是,我从信号库中得到一个错误。我认为这是因为terminate()函数不会终止父进程的子进程,但我不确定 我将非常感谢任何关于如何修复此问题或新方法的帮助 def train(self): import reaver as rvr env = rvr.envs.SC2Env(map_name='MoveToBeacon') age

我试图提前终止一个函数,但让程序的其余部分正常运行。我不允许更改函数的行为

我尝试将函数放入一个进程(使用多处理python库)并终止该进程。但是,我从信号库中得到一个错误。我认为这是因为terminate()函数不会终止父进程的子进程,但我不确定

我将非常感谢任何关于如何修复此问题或新方法的帮助

def train(self):
    import reaver as rvr
    env = rvr.envs.SC2Env(map_name='MoveToBeacon')
    agent = rvr.agents.A2C(env.obs_spec(), env.act_spec(), rvr.models.build_fully_conv, rvr.models.SC2MultiPolicy, n_envs=4)
    agent.run(env)


def run(self):
    import multiprocessing
    p = multiprocessing.Process(target=self.train, args=())
    p.start()

    import time
    time.sleep(120)
    p.terminate()
    p.join()
    print("hello) # agent.run(env) shouldn't be running here
运行()

以下是我收到的错误消息。理想情况下,输出应该是“hello”

回溯(最近一次呼叫最后一次):
文件“signal.py”,第42行,在
trainingHelper.run()
文件“signal.py”,第34行,运行中
p、 终止()
文件“/home/user/miniconda3/lib/python3.6/multiprocessing/process.py”,第116行,终止
self.\u popen.terminate()
文件“/home/user/miniconda3/lib/python3.6/multiprocessing/popen_fork.py”,第56行,终止
os.kill(self.pid,signal.SIGTERM)
AttributeError:模块“信号”没有属性“SIGTERM”

我认为问题在于您调用了文件signal.py,尝试重命名它,您的代码应该可以工作。信号也是一个有冲突的python模块。

我认为问题在于您调用了文件signal.py,尝试重命名它,代码应该可以工作。该信号也是一个有冲突的python模块。

我使用的是3.6.8版,我使用的是3.6.8版
Traceback (most recent call last):
  File "signal.py", line 42, in <module>
    trainingHelper.run()
  File "signal.py", line 34, in run
    p.terminate()
  File "/home/user/miniconda3/lib/python3.6/multiprocessing/process.py", line 116, in terminate
    self._popen.terminate()
  File "/home/user/miniconda3/lib/python3.6/multiprocessing/popen_fork.py", line 56, in terminate
    os.kill(self.pid, signal.SIGTERM)
AttributeError: module 'signal' has no attribute 'SIGTERM'