python threading mit globalen Variablen

stieß ich auf ein problem beim schreiben von python-threading-code, dass ich schrieb, einige Arbeiter threading-Klassen, Sie alle importieren eine Globale Datei-wie sharevar.py brauche ich eine variable wie regdevid zu halten
die Verfolgung der register Geräte-id, dann, wenn ein thread ändern, es Wert ist, dann können andere threads
Holen Sie es frisch, aber das Ergebnis ist, dass: wenn ein thread ändern, es ist Wert, die anderen bekommen immer noch den Standard-Wert, den ich definiert sharevar.py Datei, warum?
etwas falsch mit mir?

# thread a
from UserShare import RegDevID
import threading
class AddPosClass(threading.Thread):
global commands
# We need a pubic sock, list to store the request
def __init__(self, queue):
    threading.Thread.__init__(self)
    self.queue = queue

def run(self):
    while True:
        data = self.queue.get()
        #print data
        RegDevID = data
        #print data
        send_queue.put(data)
        self.queue.task_done()
# thread b
import threading
from ShareVar import send_queue, RegDevID 
"""
AddPos -- add pos info on the tail of the reply
"""
class GetPosClass(threading.Thread):
    global commands
    # We need a pubic sock, list to store the request
    def __init__(self, queue):
        threading.Thread.__init__(self)
        self.queue = queue

    def run(self):
        while True:
            data = self.queue.get()
            #print data
            data = RegDevID
            #print data
            send_queue.put(data)
            self.queue.task_done()
# ShareVar.py
RegDevID = '100'

Das ist es, wenn ein thread verändert die RegDevID, thread b noch erhalten, es ist default-Wert.
Dank advanced.

    from ShareVar import RegDevID

class Test():
    def __init__(self):
        pass
    def SetVar(self):
        RegDevID = 999
    def GetVar(self):
        print RegDevID

if __name__ == '__main__':
    test = Test();
    test.SetVar()
    test.GetVar()

Den ShareVar.py:

RegDevID = 100

Das Ergebnis:

100

warum?

  • Wahrscheinlich gibt es nichts falsch mit Ihnen, aber vielleicht sollten Sie zeigen Sie Ihren code.
  • Bitte formatieren Sie den code korrekt...
InformationsquelleAutor liunx | 2011-01-20
Schreibe einen Kommentar