Как я могу остановить выполнение части программы на Python, но остальные должны выполняться регулярно? - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь завершить функцию преждевременно, но остальная часть моей программы работает нормально.Мне не разрешено изменять поведение функции.

Я попытался поместить функцию в процесс (используя многопроцессорную библиотеку 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'

1 Ответ

2 голосов
/ 27 июня 2019

Я считаю, что проблема в том, что вы назвали свой файл signal.py, попробуйте переименовать его, и ваш код должен работать.Сигнал также является модулем Python, который находится в конфликте.

...