В python как я могу проверить, правильно ли завершился дочерний процесс или произошла ошибка? - PullRequest
0 голосов
/ 05 марта 2020

У меня есть такой код

import multiprocessing as mp

processes = []
for i in range(10):
  p = mp.Process(target=my_func, args=args)
  processes.append(p)
  p.start()

for p in processes:
  p.join()

Если в my_func есть ошибка, из-за которой все потоки обрабатывают sh, тогда я хочу, чтобы мой родительский процесс обнаружил это и также выдал исключение. Как я могу определить, правильно ли завершился процесс, когда я присоединяюсь к процессам?

Ответы [ 2 ]

1 голос
/ 05 марта 2020

Вы можете проверить код выхода после вызова join().

Например:

for p in processes:
  p.join()
  if p.exitcode is not 0:
    exit(1)

Ссылка:

1 голос
/ 05 марта 2020

прочитать значение процесса 'exitcode:

  • None, если процесс еще не завершен.
  • 0, если процесс завершился успешно.
  • N, если в процессе произошла ошибка, и он завершился с кодом N.
  • -N, если процесс был прерван с сигналом N. (например, -15, если убит SIGTERM)

Например, в вашем основном процессе:

for p in processes:
    p.join()
    if p.exitcode > 0:
        raise ValueError(f'a process exited with code {p.exitcode}')

И в вашем работоспособном:

try:
    do_something()
except KnownError as _:
    exit(my_known_error_code)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...