python全局变量不是全局保存的
当我添加一个客户端时,它是ok的。当我读取python全局变量不是全局保存的,python,global-variables,Python,Global Variables,当我添加一个客户端时,它是ok的。当我读取NexusConnectedClients变量时,它被添加到列表中。 但是当我运行LISTCLIENTS函数时,列表是空的。怎么了 我把代码简化了一点。所有变量都已设置,所有其他全局变量都会正常工作 编辑 我发现了错误,这段代码没有问题,但是另一个函数从NexusConnectedClients数组中删除了元素您不需要将NexusConnectedClients声明为全局,因为它在run方法中可见。如果要(重新)绑定全局作用域中的名称,则必须将变量声明为
NexusConnectedClients
变量时,它被添加到列表中。
但是当我运行LISTCLIENTS函数时,列表是空的。怎么了
我把代码简化了一点。所有变量都已设置,所有其他全局变量都会正常工作
编辑
我发现了错误,这段代码没有问题,但是另一个函数从
NexusConnectedClients
数组中删除了元素您不需要将NexusConnectedClients
声明为全局,因为它在run
方法中可见。如果要(重新)绑定全局作用域中的名称,则必须将变量声明为全局变量。当一个变量是可修改的,而列表是可修改的时,只需修改它即可
相反,您需要做的是管理对
下一个已连接客户端的访问。您正在修改线程内的共享变量,可能不止一个。使用锁。说了这句话,我想在这么小的片段里再也说不出什么了。解决了这个问题。没有从以前的测试中删除一行代码。该行重置了阵列尝试过,但没有解决问题。这很奇怪。有时它确实保存了元素。有时候不是。很奇怪。但是有一个客户端应用程序总是按照它应该的方式工作,其他的则不然。@alpjef:代码太短,无法尝试调查问题。变量、IncomingCommand
、Args
等从何而来?它们是否由某个线程管理?就我所见,SendResponse
可以执行如下操作:NexusConnectedClients[:]=[]
。看一看,最重要的是,它应该是独立的。如果你已经解决了问题,请回答它并接受你自己的答案,这样它就可以被标记为已解决
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)