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