2014-12-19 3 views
0

Я выполняю работу MQTT в python с paho-mqtt. Все многопоточные потоки on_message() в разных потоках, так что если одна из задач занимает много времени, другие сообщения все равно могут быть обработаны? Если нет, как я могу добиться такого поведения?paho-mqtt: callback thread

Благодарим за помощь!

ответ

2

Клиент python фактически не запускает нити, поэтому вам нужно вызвать функцию цикла для обработки сетевых событий.

В Java вы должны использовать обратный вызов onMessage для включения входящего сообщения в локальную очередь, с которой будет работать отдельный пул потоков.

Python не имеет встроенной поддержки потоковой передачи, но имеет поддержку процессов нереста, которые действуют как потоки. Подробная информация о многопроцессорной можно найти здесь:

https://docs.python.org/2.7/library/multiprocessing.html

EDIT: На приглядевшись в коде ПОЗ питона немного ближе кажется, что на самом деле может начать новую нить (с помощью функции loop_start()) для обработки сетевой стороны вещей, ранее требующих функции цикла. Это не изменяет тот факт, что все вызовы обратного вызова on_message будут выполняться в этом потоке. Если вам нужно делать большие объемы работы в этом обратном вызове, вам обязательно нужно посмотреть пул новых потоков для выполнения этой работы.

http://www.tutorialspoint.com/python/python_multithreading.htm

+0

вы рекомендуете мне резьб или асинхронные (как витые), если мне нужно сделать тяжелую обработку сообщения? – user3684457

+0

Если обработка сообщения может занять меньше, чем разрыв между сообщениями, вы должны смотреть на несколько потоков. Но помните, что это может произойти только в очередях, иначе вы просто получите сообщения, ожидающие в локальной очереди или все большее число потоков. – hardillb

+0

Есть ли способ улучшить работу python с потоками? Есть ли предел, который я должен рассмотреть (не более того x потоков одновременно?)? – user3684457

 Смежные вопросы

  • Нет связанных вопросов^_^