我可以将参数传递给python中的paho回调函数吗?

时间:2019-07-04 17:08:09

标签: python mqtt paho

因此,我正在制作一个python程序来跟踪主题上的mqtt连接,以便可以使用连接仪表板。我有一个变量想要传递给on_message函数,以便可以修改它并打印出来。

我已经知道只要声明为变量global就可以使它global,但是根据我的经验,要不惜一切代价避免声明为def process_message(client, userdata, message): global connected_list # mess around with it and exit the callback if __name__ == "__main__": connected_list = [] # set up the mosquitto client and then client.on_message = process_message # tell it to subscribe and connect and then client.loop_forever() ,所以我想知道如果还有另一种方法。

(出于可读性考虑,对代码进行了删节)

global

基本上,我知道可以使用* def random = function(max){ return Math.floor(Math.random() * max) + 1 } * def index = random(5) + '' * print index 完成此操作,但我想尽可能避免这样做。有人有什么想法吗?

谢谢!

编辑

感谢帮助人员,我混合了两种建议,现在有了一个既包含列表又包含锁定的类,因此在操作列表时,我可以轻松地锁定和解锁列表。

1 个答案:

答案 0 :(得分:2)

您可以尝试将所有回调作为方法放在类中。然后,状态可以是在__init__中初始化的变量,而不是全局变量。这大大提高了代码的可重用性。

class Handler:

    def __init__(self):
        self.connected_list = []

    def process_message(self, client, userdata, message):
        connected_list = self.connected_list

        # mess around with it and exit the callback


if __name__ == "__main__":
    handler = Handler()

    client.on_message = handler.process_message

    # tell it to subscribe and connect and then

    client.loop_forever()