首页 > 解决方案 > 如何在 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()

标签: pythonmultithreadingshared-memory

解决方案


使用x =赋值 incalc_callback创建一个x独立于xin 封闭的新变量test()。只有这个新变量被修改然后被丢弃(对于 相同y)。

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

[...]

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

推荐阅读