глобальная переменная python не сохраняется глобально - PullRequest
0 голосов
/ 09 февраля 2012
NexusConnectedClients = []

class Thread1(NexusCore.Thread):
    def Run():
        global NexusConnectedClients
        if(IncomingCommand == "ADDCLIENT"):
            NewClientOBJ = [
                LastCID,
                ClientType,
                ClientADDR,
                ClientObject,
                Args[1],
                Args[2],
                '{"events":[]}'
            ]
            NexusConnectedClients.append(NewClientOBJ)
        elif(IncomingCommand == "LISTCLIENTS"):
            SendResponse(NexusConnectedClients)

Когда я добавляю клиента, это нормально. Когда я читаю переменную NexusConnectedClients, она добавляется в список. Но когда я запускаю функцию LISTCLIENTS, список становится пустым. Что не так?

Я немного упростил код. все переменные установлены, а все остальные глобальные переменные работают так, как должны.

EDIT Я обнаружил ошибку, ничего плохого в этом коде, но другая функция удалила элемент из NexusConnectedClients массива

Ответы [ 2 ]

0 голосов
/ 21 февраля 2012

Решил проблему.Не удалить строку кода из предыдущего тестирования.Эта строка сбрасывает массив

0 голосов
/ 10 февраля 2012

Вам не нужно объявлять NexusConnectedClients глобальным, так как это видно в методе run.Переменная должна быть объявлена ​​глобальной, если вы хотите (повторно) связать имя в глобальной области видимости.Если переменная модифицируема, а списки таковы, просто измените ее.

Вместо этого вам нужно настроить доступ к NexusConnectedClients.Вы изменяете переменную общего доступа внутри потока, возможно, более одного.Используйте замок.Сказал, что, думаю, больше ничего нельзя сказать в таком маленьком фрагменте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...