【问题标题】:Pika SelectConnection adapter 'Unresolved attribute reference'Pika SelectConnection 适配器“未解析的属性引用”
【发布时间】:2020-10-21 20:26:02
【问题描述】:

我在使用 pika.SelectConnection 适配器连接到 RabbitMQ 时遇到问题。我正在使用 Pika 1.1.0 和 Python 3.7.9,使用 PyCharm 社区进行开发。 下面是我的代码快照,显示了我是如何创建连接的。

import pika

def on_done():
    connect.channel()
    print("Open Callback")

if __name__ == '__main__':
    account = "user"
    password = "password"
    server = "172.17.0.5"
    credentials = pika.PlainCredentials(account, password)
    parameters = pika.ConnectionParameters(host=server, port=15672, credentials=credentials,                      socket_timeout=10)
    connect = pika.SelectConnection(parameters, on_open_callback=on_done)
   
    connect.ioloop.start()

RabbitMQ 正在运行,我已经使用 pika.BlockingConnection 适配器检查了连接和消息传递。

我的 IDE (PyCharm) 将 start() 函数突出显示为 “类 'object' 的未解析属性引用 'start'”。当我运行此代码时,没有错误。在管理网页上,我没有看到该连接已打开。

有人遇到过类似的问题吗?我的 IDE 有问题吗?

谢谢你的回答。

【问题讨论】:

    标签: rabbitmq pika


    【解决方案1】:

    刚刚收到同样的警告,但在AsyncPublisher-Example 中,我也想摆脱它。

    问题在于,IOLoop 不是 pika 专门定义的,尽管它应该定义。

    如果您使用 pika,您正在寻找的 IOLoop 类型是:

    pika.adapters.select_connection.IOLoop
    

    在您的情况下,最简单的方法是投射您的 IOLoop,然后使用这个开始。

    io_loop = cast(pika.adapters.select_connection.IOLoop, connect.ioloop)
    
    io_loop.start()
    

    对于更复杂的AsyncPublisher,我做了几乎相同的事情:

    def __init__(self, amqp_url: str, queues: List[str], interval: float):
    
        self._ioloop: Optional[pika.adapters.select_connection.IOLoop] = None
    

    以及建立连接后:

    def run(self):
        """Run the example code by connecting and then starting the IOLoop.
        """
        while not self._stopping:
            self._connection = None
            self._deliveries = []
            self._ack = 0
            self._not_ack = 0
            self._message_number = 0
    
            try:
                self._connection = self.connect()
                self._ioloop = cast(pika.adapters.select_connection.IOLoop, self._connection.ioloop)
                self._ioloop.start()
    

    【讨论】:

    • 谢谢弗洛里安的回答。
    • 我会改变你的建议是cast
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 2021-04-06
    相关资源
    最近更新 更多