如何在 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)
[...]
我似乎无法更改下面代码中的 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)
[...]