sharevar.pyのようなグローバルファイルをインポートする、いくつかのワーカークラスを作成するPythonスレッディングコードを書くときに問題が発生しました.regdevidのような変数が必要です。 レジスタデバイスをトラッキングしていますidを変更すると、あるスレッドがその値を変更すると、他のスレッドは が新鮮になりますが、その結果は次のようになります:1つのスレッドが値を変更すると、他のスレッドはsharevar.pyファイルで定義されたデフォルト値を取得します。 何か私に間違っていますか?グローバル変数を使ったPythonスレッディング
# 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'
これは、スレッドaがRegDevIDを変更したときに、スレッドbがそれでもデフォルト値を取得することです。 ありがとうございました。
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()
ShareVar.py:
RegDevID = 100
結果:
100
なぜですか?
あり*あなた*に何か問題はおそらくありませんが、多分あなたはあなたのコードを表示する必要があります:あなたはグローバル変数を再バインドしたい場合は
global
文を使用します。 –コードを正しくフォーマットしてください... – fossilet