为什么my_string的值不会改变?
我从两个不同的模块运行两个线程,模块2访问" set_string"模块1的更改,以便更改" my_string"的值,但是当模块1打印字符串时,它是空的。
第一个模块:
from threading import Thread
import Module2 as M2
import time
my_string = ""
def set_string(string):
global my_string
my_string = string
def mainloop1():
global my_string
while True:
print("Module 1: ", my_string)
time.sleep(1)
if __name__ == '__main__':
thread = Thread(target=M2.mainloop2)
thread.start()
mainloop1()
第二个模块:
import Module1 as M1
import time
import random
def mainloop2():
while True:
string = str(random.randint(0, 100))
print("Module 2: ", string)
M1.set_string(string)
time.sleep(1)
答案 0 :(得分:0)
这是因为这些方法是在不同的模块中实现的there are no truly global variables in python; Module2中引用的set_string更新了其globals()[' M1']名称中的my_string变量,其中,因为Module1正在更新直接存储在globals()中的my_string变量[' my_string' ]
请注意,如果将mainloop2的定义移动到Module1中,更新导入,然后调用Thread调用,则会得到预期的行为,无限期的执行顺序以及所有行为。