python - 如何在 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()
解决方案
使用x =
赋值 incalc_callback
创建一个x
独立于x
in 封闭的新变量test()
。只有这个新变量被修改然后被丢弃(对于 相同y
)。
尝试nonlocal
声明(需要 Python 3.x):
[...]
def calc_callback(ev):
nonlocal x, y
x = np.linspace(-5, 5, 100)
[...]
推荐阅读
- google-cloud-platform - bq 数据集中有更多表会减慢进程吗?
- python - 但是当我运行这个程序时,我得到一个这样的错误:“PermissionError: [Errno 13] Permission denied: 'test1.txt'”
- python - 使用python从收集的站点数据中查找特定字符串并打印
- go - 我们如何将 gcc-go 安装到 AIX 机器 power-pc-7 bigendian 64 位?
- xampp - xampp 无法在 localhost(127.0.0.1) 上运行,但可以在 (192.168.XX) 上运行
- javascript - 如何从多步列表中选择值
- python - Python3 中的 java TreeMap 类比
- c++ - 如何从构造函数的参数推断模板参数“Func”?
- ios - 无法在 XIB 中设置约束 - Xcode 11.3.1
- angular - 使用 where 条件从 Firestore 实时获取数据