Python中模块变量的生存期
你能给我解释一下这些基本知识吗。Python中模块变量的生存期,python,Python,你能给我解释一下这些基本知识吗。 server\u init()->start\u db()->它使变量state=5->服务器在2秒内启动start\u client()->客户端调用get\u state()并获取值=5 客户看到5是对的吗?模块变量的有效期是多久? 谢谢 server.py: def t3(): time.sleep(2) start_client() def server_init(): start_db() thread = threa
server\u init()->start\u db()->它使变量state=5->服务器在2秒内启动start\u client()->客户端调用get\u state()并获取值=5
客户看到5是对的吗?模块变量的有效期是多久?
谢谢
server.py:
def t3():
time.sleep(2)
start_client()
def server_init():
start_db()
thread = threading.Thread(target=t3)
thread.start()
server_init()
db.py
state = 0
q = queue.Queue()
def t2():
global state
while state < 5:
state += 1
global q
q.put(state)
def start_db():
thread = threading.Thread(target=t2)
thread.start()
def get_state():
print('q.get(): %s' % q.get())
print('state: %s' % state)
def t1():
get_state() # prints 5
def start_client():
print('start_client')
thread = threading.Thread(target=t1)
thread.start()
模块存储在全局映射
sys.Modules
中。只要模块对象有任何可用的引用,它就会保持活动状态。通常,在Python解释器关闭之前,不会从sys.modules中删除模块。您预期会发生什么?您是否感到惊讶,状态仍然是5
?没有任何操作会将该值重置回0。如果服务器具有“导入开始\u客户端”和“导入获取\u客户端”状态,我是否可以说我一直都有一个从服务器到数据库的引用?@Igor:第一次导入模块时,所有顶级代码(包括状态=0
)执行,结果名称存储在模块对象上。因此,任何导入db
模块的代码都将产生全局名称状态
。