我正在使用 paho-mqtt 在 python 中实现一个 MQTT 工作者。
是否所有的 on_message() 都在不同的线程中进行多线程处理,这样如果其中一项任务很耗时,其他消息仍然可以处理?
如果没有,如何实现这种行为?
python 客户端实际上并没有启动任何线程,这就是为什么你必须调用循环函数来处理网络事件。
在 Java 中,您将使用 onMessage 回调将传入消息放入一个单独的线程池将处理的本地队列。
Python 不支持本机线程,但支持生成进程以像线程一样工作。可以在此处找到多处理的详细信息:
https://docs.python.org/2.7/library/multiprocessing.html
编辑:在仔细观察 paho python 代码时,它似乎实际上可以启动一个新线程(使用 loop_start() 函数)来处理以前需要循环函数的事物的网络端。这不会改变对 on_message 回调的所有调用都将在此线程上发生的事实。如果你需要在这个回调中做大量的工作,你绝对应该考虑启动一个新线程池来完成这项工作。
http://www.tutorialspoint.com/python/python_multithreading.htm