Как «сигнализировать» заинтересованным дочерним процессам (без сигналов)?

1

Я пытаюсь найти хороший и простой метод для сигнальных процессов (созданный через SocketServer с помощью ForkingMixIn) из родительского процесс.

В то время как сигналы Unix могут использоваться, я хочу избежать их, поскольку только дети, которые заинтересованы, должны получить сигнал, и это будет чрезмерное и сложное требование какой-либо регистрации механизм для идентификации заинтересованного родительского процесса.

(Пожалуйста, не предлагайте темы, так как эта конкретная программа не будет работать с потоками и, следовательно, должен использовать вилки.)

Теги:
signals
subprocess
fork

2 ответа

3
Лучший ответ

Поскольку вы находитесь в системе unix, семафоры должны быть легким ответом. К сожалению, python, похоже, не предлагает способ вызова системного вызова semop.

Если вы используете python 2.6, вы можете использовать модуль многопроцессорности Класс условий.

2

Я придумал использовать дескриптор файла pipe, который родитель мог написать, а затем читать/скрывать в сочетании с select, но это не очень квалифицируется как очень элегантный дизайн.

Более подробно: родитель создавал бы канал, подпроцессы наследовали бы его, родительский процесс записывал бы в трубу, тем самым пробуждая любой подпроцесс select(): ing на дескрипторе файла, но потом родитель немедленно прочитайте с прочитанного конца трубы и опорожните его - единственным эффектом является то, что те дочерние процессы, которые были select(): на трубе, проснулись.

Как я уже сказал, это кажется странным и уродливым, но я еще ничего не нашел.

Edit:

Оказывается, это не работает - некоторые дочерние процессы разбужены, а некоторые нет. Я прибегал к использованию Condition из модуля multiprocessing.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню