我在編寫python線程代碼時遇到了一個問題,那就是我寫了一些線程類的工作人員,他們都導入了像sharevar.py這樣的全局文件,我需要一個像regdevid一樣的變量來保持 跟蹤註冊設備id,那麼當一個線程改變它的值時,其他線程可以得到它新鮮的結果是:當一個線程改變它的值時,其他線程仍然獲得我在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
爲什麼呢?
有可能沒有什麼不妥*你*,但也許你應該表現出你的代碼。 – 2011-01-20 07:21:35
請正確格式化您的代碼... – fossilet 2013-02-18 09:40:57