Пика Предупреждение при запуске из-за сердцебиения - PullRequest
0 голосов
/ 15 октября 2019

Я подключаюсь к RabbitMQ, используя pika 1.1.0 и Python 2.7. Я использую BlockingConnection и запускаю прослушиватель / приемник, который будет постоянно прослушивать сообщения из очереди. Я также создаю отдельный поток, используя модуль потоков, который будет отправлять кадр сердцебиения каждые 60 секунд, чтобы поддерживать работающий прослушиватель подключенным. Код отправки пульса:

blocking_connection._impl._send_frame(pika.frame.Heartbeat())
time.sleep(60)

Pika регистрирует предупреждение почти каждый раз, когда слушатель запускается, говоря: «WRITE указан на fd = 10, но обратный вызов писателя равен None;»Это предупреждение выводится из файла pika.adapters.utils.selector_ioloop_adapter. Но когда я запрещаю посылать первое сердцебиение сразу, то есть ставлю 60-секундную спящую линию перед строкой отправки кадра, предупреждение не появляется.

Я пытаюсь понять, что на самом деле происходит,почему запуск потребителя / слушателя, а затем потока пульса сразу после этого вызывает это предупреждение? Каково значение и влияние предупреждения?

Заранее благодарим за любые идеи, которые вы можете предложить.

1 Ответ

0 голосов
/ 15 октября 2019

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

Нет необходимости делать это. Pika будет отправлять вам пульс, если ваш код не блокирует цикл ввода / вывода Pika. Кроме того, Pika не является поточно-ориентированным, поэтому вызов _send_frame из другого потока может привести к ошибкам, подобным тем, которые вы видите.

Если хотите, поделитесь кодом на rabbitmq-users или pika-python список рассылки, и я рассмотрю его. Я поддерживаю библиотеку Pika.


ПРИМЕЧАНИЕ: команда RabbitMQ отслеживает список рассылки rabbitmq-users и только иногда отвечает на вопросы о StackOverflow.

...