【发布时间】:2011-01-20 07:17:10
【问题描述】:
我在编写python线程代码时遇到了一个问题,我写了一些worker线程类,它们都导入了一个像sharevar.py这样的全局文件,我需要一个像regdevid这样的变量来保存 跟踪注册设备ID,当一个线程改变它的值时,其他线程可以 获取新鲜,但结果是:当一个线程更改它的值时,其他线程仍然获得我在 sharevar.py 文件中定义的默认值,为什么? 我有什么问题吗?
# 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
为什么?
【问题讨论】:
-
你可能没有什么问题,但也许你应该展示你的代码。
-
请正确格式化您的代码...
标签: python multithreading variables global