Обработка сердцебиений RabbitMQ, когда процессор загружен на 100% в течение длительного времени

#python-3.x #rabbitmq #pika #graph-tool

Вопрос:

Я использую pika 1.1 и graph-tool 3.4 в своем приложении на python. Он использует задачи из RabbitMQ, которые затем используются для построения графиков с помощью инструмента graph-tool, а затем выполняет некоторые вычисления.

Некоторые вычисления, такие как промежуточность, требуют большой мощности процессора, из-за чего загрузка процессора в течение длительного времени достигает 100%. Иногда соединение rabbitmq отключается, что приводит к тому, что задача запускается с самого начала.

Несмотря на то, что вычисления выполняются в отдельном процессе, я предполагаю, что в то время, когда процессор загружен на 100%, он не может найти никакой возможности отправить сердцебиение в rabbitmq, что приводит к разрыву соединения. Это происходит не всегда, что случайно указывает на то, что время от времени он может посылать сердцебиения. Это только мое предположение, я не уверен, что еще может вызвать это.

Я попытался снизить приоритет процесса расчета с помощью nice(19) , что не сработало. Я предполагаю, что это не влияет на процессы, порожденные graph-инструментом, который сам по себе распараллеливает работу.

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

  1. Может ли мое предположение о том, что сердцебиения не отправляются, потому что процессор очень занят, быть правильным?
  2. Если да, то как я могу справиться с этим сценарием?