Python:从另一个线程更改变量值

时间:2016-10-24 18:25:25

标签: python multithreading

为什么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)

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调用,则会得到预期的行为,无限期的执行顺序以及所有行为。