2010-05-10 4 views
1

Я пытаюсь найти хороший и простой способ сигнализировать дочерние процессы (созданный через SocketServer с ForkingMixIn) из родительского процесса .Как «сигнализировать» заинтересованные дочерние процессы (без сигналов)?

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

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

ответ

3

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

Если вы используете python 2.6, вы можете использовать класс условий multiprocessing module.

2

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

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

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

Edit:

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

Смежные вопросы