我跟着从鼠兔Asynchronous publisher example,并试图在一个单独的线程中运行其self._connection.ioloop.start()
。到目前为止,我设法使用队列主线程加入的消息发布。但只有这样我能得到出版商线程得到消息从队列中不尽如人意。我用类似
try:
message = self._queue.get(True, 1)
self._channel.basic_publish(body=message, exchange=self._exchange, routing_key='example.text')
except queue.Empty:
pass
finally:
self._connection.add_timeout(0.0001, self.publish_message)
必须有一个更好的方式来做到这一点,对不对?要注意通过pika.SelectConnection
似乎是非常有限的,我使用这与Python 3.6.4在Windows和选择的IO循环是很重要的......
编辑:我刚刚发现了如何改用adapters.AsyncioConnection
的SelectConnection
。所以,现在我可以self._connection.add_timeout(0.0001, self.publish_message)
取代self._connection.loop.call_soon(self.publish_message)
。这给了非常怪异的结果:消息似乎被缓冲,并每隔秒发送。我是新来的Python,所以我会在很多感激的一些见解!
正确回答这个问题,如果它仍然在搜索结果中出现,是升级到至少鼠兔v0.12,并采取可用于各种连接适配器方法add_callback_threadsafe的优势。 Here就是一个例子。