непредвиденное поведение при входе в консоль с использованием Queue & Listener - PullRequest
0 голосов
/ 05 ноября 2018

В моем проекте я встречал некоторых вуду-логистов.

После прочтения следующего: QueueHandler QueueListener

Я разработал протоколирование в моей программе следующим образом: в основном процессе - корневой регистратор, назначенный с помощью QueueHandler. Эта очередь прослушивается QueueListener, целью которого является обычный StreamHandler. Моя программа в какой-то момент выполнения отправляет задачу анализа в пул процессов. Каждому процессу пула назначается очередь, созданная в QueueHandler основного процесса, поэтому он также может отправлять записи журнала на консоль.

Замечание о моей программе - это программа на python 2, которую я вручную перенес в код Pyue 3 из QueueHandler и QueueListener.

При выполнении моей программы возникает противоречивая проблема (но в основном в ее тестах): Программа зависает, сообщения не выводятся на консоль. Если StreamHandler поменялся местами с FileHandler - тесты пройдут последовательно.

Вот env, который я использовал для тестирования:

интерпретатор: PyPy 5.6.0 с GCC 4.8.4

pytest версия: '3.2.3'

версия журнала: '0.5.1.2'

uname -a: Linux ip-172-31-36-72 3.13.0-74-generic # 118-Ubuntu SMP чт 17 декабря 22:52:10 UTC 2015 x86_64 x86_64 x86_64 GNU / Linux

Я считаю, что распространять репозиторий github не часто - но я извлек свою программу в очень маленький проект, который воспроизводит проблема (иногда). Не стесняйтесь проверить это: log_voodoo

Почему это происходит? Есть какие-то решения, чтобы преодолеть это?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Не вдаваясь в код, вы можете попробовать PyPY 6.0, между этими двумя версиями были исправлены некоторые проблемы.

0 голосов
/ 05 ноября 2018

Вы могли бы использовать проект logutils , который переносит QueueHandler и QueueListener в Python 2.x.

Вы должны настроить с помощью:

  • Основной процесс - настроить только QueueListener и StreamHandler
  • Рабочие - только QueueHandler

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

...