2017-02-16 13 views
0

Я пишу клиент mqtt, который навсегда зацикливается при сборе данных.Python избегает глобальной переменной во время опроса данных

Массив в настоящее время глобальный, но поскольку это считается плохой практикой, я хочу этого избежать. Однако я не уверен, как вызвать on_message с другим параметром.

Как я могу избежать использования массива в качестве глобальной переменной?

def on_message(client, userdata, msg): 
     global array 
     array.append(msg.payload) 

    array = [] 
    client = mqtt.Client() 
    client.on_connect = on_connect 
    client.on_message = on_message 
    client.connect("JOHN", 1883, 60) 
    client.loop_forever() 

EDIT: Я последовал совету CarloLobranos и я использую UserData в настоящее время в качестве входных данных (как API поддерживает это). Спасибо за все ответы!

+2

Я не эксперт MQTT, но кратко глядя на документацию, выглядит, что ответ в том, что 'userdata' переменной –

+0

@CarloLobrano Спасибо, это работает как шарм! userdata может быть задано как структура перед вызовом этих функций – kassio

ответ

0

Вы можете обернуть все в функции:

def mqtt_wrapper(): 
    array = [] 
    def on_message(client, userdata, msg): 
     array.append(msg.payload) 
    client = mqtt.Client() 
    client.on_connect = on_connect 
    client.on_message = on_message 
    client.connect("JOHN", 1883, 60) 
    client.loop_forever() 

mqtt_wrapper() 
-1

Вы можете создать класс, который включает в себя все материалы.

0

В любом случае нет смысла использовать глобальное ключевое слово, поскольку вы мутируете существующий список.