Многопроцессорная очередь Python при родительском выходе - PullRequest
3 голосов
/ 31 января 2012

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

У меня есть демон, который работает в фоновом режиме, который ставит в очередь задания для дочерних процессов:

class manager(Daemon):
    def run(self):
        someQueue = MP.Queue()

        someChild = MP.Process(target=someCode, args=(someArgs))
        someChild.start()
        ...

Если менеджер убит (при условии, что он не пытался использовать someQueue и поэтому повредил его, как указано в документации), есть ли способ восстановить данные в очереди?

Два теоретических решения, которые я вижу, это очистить someQueue в someChild перед выходом из этого дочернего процесса. Также дамп очередей, чтобы я мог восстановить состояние очередей при выходе из менеджера, также решил бы мою проблему. Однако, прежде чем приступить к реализации, было бы неплохо подтолкнуть его в правильном направлении.

Спасибо

1 Ответ

1 голос
/ 31 января 2012

Звучит так, как будто вы хотите постоянную / надежную очередь.Я полагаю, что класс multiprocessing.Queue реализован с помощью конвейеров (так же, как вы могли бы получить с помощью вызова popen ()), поэтому данные являются относительно временными, и вам, вероятно, придется сделать некоторую хитрость на уровне ОС, чтобы получить содержимое.Возможно, вы захотите написать свой собственный класс постоянных очередей, который использует файл файловой системы (при условии, что ваша ОС и блокировка файловой системы поддерживают) для хранения содержимого очереди.Затем вы можете предоставить все инструменты анализа, которые вы хотите проверить в очереди и восстановить необработанные данные.

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