Я пытаюсь завершить функцию преждевременно, но остальная часть моей программы работает нормально.Мне не разрешено изменять поведение функции.
Я попытался поместить функцию в процесс (используя многопроцессорную библиотеку 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
run ()
Ниже приводится сообщение об ошибке, которое я получаю.В идеале вывод будет просто "привет".
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'