Соответствующее закрытие асинхронного процесса, не оставляя его в состоянии зомба ie - PullRequest
0 голосов
/ 05 марта 2020

В моей программе я запускаю несколько процессов asyncio.Process (используя метод create_subprocess_exec), и я хочу, чтобы они не могли оставаться в состоянии zomb ie после завершения. Я пытался использовать метод child_watcher.add_child_handler (asyncio.event_loop_policy.child_watcher), чтобы применить к процессу обратный вызов завершения, но проблема в том, что обратный вызов не может быть сопрограммой, и внутри обратного вызова мне нужно ждать proc.wait(), чтобы убедиться, что процесс не осталось в состоянии зомби ie. Не могли бы вы дать мне знать, если в моем мышлении есть изъян или есть какой-то другой способ добиться этого? Спасибо!

1 Ответ

0 голосов
/ 05 марта 2020

... proc.wait(), чтобы убедиться, что процесс не оставлен в состоянии zomb ie. Не могли бы вы сообщить мне, если в моем мышлении есть изъян или есть какой-то другой способ добиться этого?

Вам не нужно использовать для этого наблюдателей за детьми. Да, вам нужно выполнить proc.wait(), чтобы процесс не оставался зомби ie, но вам не нужно ждать , вы можете оставить его в фоновом режиме, используя create_task(). Например:

proc = asyncio.create_subprocess_exec(...)
# run proc.wait() "in the background", ensuring the process is reaped
# as soon as it's done
asyncio.create_task(proc.wait())
... continue using proc ...
...