在一个线程异步鼠兔发行

问题描述 投票:2回答:1

我跟着从鼠兔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.AsyncioConnectionSelectConnection。所以,现在我可以self._connection.add_timeout(0.0001, self.publish_message)取代self._connection.loop.call_soon(self.publish_message)。这给了非常怪异的结果:消息似乎被缓冲,并每隔秒发送。我是新来的Python,所以我会在很多感激的一些见解!

python-3.x pika
1个回答
1
投票

正确回答这个问题,如果它仍然在搜索结果中出现,是升级到至少鼠兔v0.12,并采取可用于各种连接适配器方法add_callback_threadsafe的优势。 Here就是一个例子。

© www.soinside.com 2019 - 2024. All rights reserved.