2012-02-09 24 views
0
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) 

私はクライアントを追加してもOKです。変数NexusConnectedClientsを読むと、リストに追加されます。 しかし、私がLISTCLIENTS関数を実行すると、リストは空です。なにが問題ですか?pythonグローバル変数が保存されていませんグローバル

Iコードを少し簡略化しました。すべての変数が設定され、他のすべてのグローバル変数は必要に応じて動作します。

EDIT 私はこのコードで何も間違って、間違いを発見したが、他の機能は、それがrun方法で表示されているので、あなたはグローバルとしてNexusConnectedClients宣言する必要はありませんNexusConnectedClients配列

+0

問題を解決した場合は、それに答えて自分自身の答えを受け入れて解決したとマークすることができます。 –

答えて

0

問題を解決しました。以前のテストから一連のコードを削除しませんでした。その行はアレイをリセットしました

0

から要素を削除。グローバルスコープで名前を(再)バインドする場合は、変数をグローバルに宣言する必要があります。変数が変更可能で、リストがある場合は、変更してください。

代わりに、NexusConnectedClientsへのアクセスを規制する必要があります。スレッド内の共有変数を修正しています。おそらく複数のスレッドを共有しています。ロックを使用してください。そのような小さいスニペットでは何も言えないと私は思う。

+0

試しましたが、問題は解決しませんでした。それは非常に奇妙です。時には要素を保存することもあります。時々そうではない。非常に奇妙な。クライアントアプリケーションのうちの1つは、必要なときに常に動作しますが、他のアプリケーションでは動作しません。 – alpjef

+0

@alpjef:コードが短すぎて問題を調査しようとしていません。変数、IncomingCommand'、 'Args'などはどこから来ますか?彼らはいくつかのスレッドで管理されていますか?私が見ることができるように、 'SendResponse'は' NexusConnectedClients [:] = [] 'のようなことをすることができます。 http://sscce.org/を見てください。最も重要なのは、自己完結型である必要があります。 –

関連する問題