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

How can I modify variables across different threads in Python?

我似乎无法更改下面代码中的 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()

calc_callback 中使用 x = 赋值创建一个新变量 x,独立于包含 test()x。只有这个新变量被修改然后被丢弃(与 y 相同)。

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

[...]

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