如何停止 运行 中的 python 程序的一部分,但让其余部分定期执行?
How can I stop part of a python program from running, but have the rest execute regularly?
我试图过早地终止一个函数,但我的程序的其余部分 运行 正常。我不允许更改函数的行为。
我试过将函数放入一个进程(使用多处理 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".
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'
我认为问题在于您调用了您的文件 signal.py,尝试重命名它,您的代码应该可以工作。该信号也是一个 python 模块,它有冲突。
我试图过早地终止一个函数,但我的程序的其余部分 运行 正常。我不允许更改函数的行为。
我试过将函数放入一个进程(使用多处理 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".
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'
我认为问题在于您调用了您的文件 signal.py,尝试重命名它,您的代码应该可以工作。该信号也是一个 python 模块,它有冲突。