подпроцесс python - PullRequest
       6

подпроцесс python

1 голос
/ 12 февраля 2011

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

Я хочу знать, можем ли мы узнать, какой подпроцесс завершил работу. На данный момент я храню все pid дочерних элементов в списке и использую цикл for для итерации.

for p in ps:
   p.wait()

Но это блокирует приложение до завершения 1-го процесса. Моя цель - дождаться завершения любого из подпроцессов. Пожалуйста, дайте мне знать любые идеи.

Ответы [ 3 ]

3 голосов
/ 12 февраля 2011

Извлеките идентификатор процесса из поля pid каждого объекта подпроцесса в вашем списке и создайте словарь, отображающий эти идентификаторы процесса обратно в объекты подпроцесса. Затем вызовите os.wait, который будет ожидать выхода любых подпроцессов, и используйте ваш словарь для сопоставления возвращенного PID с соответствующим подпроцессом. Для более точного управления используйте os.waitpid или os.wait3 или os.wait4 (документация Python на самом деле не объясняет, как они работают, но AFAIK они отображаются непосредственно на waitpid и wait4 системные вызовы, так что вы можете использовать документацию для них в качестве руководства).

2 голосов
/ 12 февраля 2011

Использование p.poll().Он сообщит вам, если процесс завершен.

1 голос
/ 28 июля 2011

В Python 3.2.x вы можете использовать параллельные фьючерсы. Очень простой интерфейс, который реализует обработчик, который вы описали с помощью процессов или потоков. (Конечно, потоки подвержены проблеме GIL, но в 3.2.x штраф GIL, по-видимому, намного меньше.) Все, что вы делаете, это предоставляете функцию, которая будет обращаться к интересующему ресурсу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...