如何在Python中跨不同线程修改变量?

时间:2019-02-01 23:20:46

标签: python multithreading shared-memory

我似乎无法在下面的代码中更改x或y值。我以为第二个线程会等到计算完成?

我根本不知道我在这里做错什么了吗?

from threading import Event, Thread
import numpy as np

def test():
    x = [0, 1]
    y = [1, 3]

    def calc_callback(ev):
        x = np.linspace(-5, 5, 100)
        y = np.sin(x)/x
        ev.set()


    def display_callback(ev):
        ev.wait()
        print(x)
        print(y)

    completion_event = Event()
    Thread(target=calc_callback, args=[completion_event]).start()
    Thread(target=display_callback, args=[completion_event]).start()


if __name__ == '__main__':
    test()

1 个答案:

答案 0 :(得分:2)

x =中使用calc_callback赋值会创建一个新变量x,该变量独立于x并包含test()。只有这个新变量被修改,然后扔掉(同样为y)。

尝试nonlocal声明(需要Python 3.x):

[...]

    def calc_callback(ev):
        nonlocal x, y
        x = np.linspace(-5, 5, 100)
        [...]