Прежде чем вы go по этому маршруту, вы должны оценить, если это даже необходимо. Одним из важных ограничений является полоса пропускания rabbitmq .
. Создайте однопоточное приложение и начните получать синтетические сообщения c rabbitmq. Увеличивайте частоту мсг / с до тех пор, пока она не сможет больше поддерживать скорость.
Если эта скорость намного выше, чем вероятно на практике, то все готово. : -)
Если нет, тогда вы запускаете профилирование вашего приложения, чтобы найти, какие его части занимают больше всего времени. Это ваши узкие места. Только когда вы знаете, что такое узкие места, вы можете посмотреть на соответствующий код и подумать, как их улучшить.
Обратите внимание, что multiprocessing
и threading
делают разные вещи и имеют разные приложения. Если ваше приложение ограничено количеством вычислений, которые оно может выполнить, multiprocessing
может помочь, распространив вычисления по нескольким ядрам ЦП. Обратите внимание, что это работает только в том случае, если расчеты независимы друг от друга. Если ваше приложение тратит много времени на ожидание ввода-вывода, threading
может помочь вам выполнить вычисления в одном потоке, в то время как другой ожидает ввода-вывода.
Но ни один из них не является бесплатным с точки зрения сложности , Например, с threading
вы должны защитить чтение и запись ваших фреймов данных с помощью блокировок, чтобы только один поток одновременно мог читать или модифицировать указанный фрейм данных. С multiprocessing
вы должны отправлять данные из рабочих процессов обратно в родительский процесс.
В этом случае я думаю, что multiprocessing
будет наиболее полезным. Вы можете настроить ряд процессов, каждый из которых отвечает за часть коек / пациентов. Если у rabbitmq может быть несколько слушателей, каждый рабочий процесс может обрабатывать только сообщения от пациентов, за которых он отвечает. В противном случае вы должны распространять сообщения для соответствующего процесса. Каждый рабочий процесс теперь обрабатывает сообщения (и сохраняет кадры данных) для нескольких пациентов. Когда предупреждение запускается на основании вычислений, выполненных на данных, рабочий должен только отправить сообщение с подробным описанием идентификатора пациента и характера предупреждения родительскому процессу.