python全局变量未保存全局

问题描述:

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函数,列表是空的。哪里不对?python全局变量未保存全局

我简化了一下代码。所有的变量都被设置好了,所有其他的全局变量都能正常工作。

编辑 我发现了错误,没有错代码,但另一个函数从NexusConnectedClients阵列中删除元素

+0

如果你已经解决了这个问题,请回答并接受你自己的答案,这样可以标记为已解决 – 2012-02-13 19:23:11

解决了这个问题。未从先前的测试中移除一行代码。该行重置阵列

你并不需要声明NexusConnectedClients全球,因为它在run方法可见。当您想要(重新)绑定全局范围中的名称时,变量必须声明为全局变量。当一个变量是可修改的,列表是,只需修改它。

取而代之的是你需要做的是规范对NexusConnectedClients的访问。您正在修改线程内的共享变量,可能不止一个。使用锁。说,我认为在这样一个小片段中没有更多可以说的了。

+0

试过了,没有解决问题。这很奇怪。有时它确实保存了元素。有时候不是。很奇怪。但其中一个客户端应用程序总是按照它应该的那样工作,而另一些则不是。 – alpjef 2012-02-12 18:24:02

+0

@alpjef:代码太短而无法调查问题。变量“IncomingCommand”,“Args”等来自哪里?他们是由某个线程管理的吗?对于我所看到的,SendResponse可以做这样的事情:'NexusConnectedClients [:] = []'。看看http://sscce.org/,最重要的是,它应该是独立的。 – 2012-02-13 09:52:24