Как я могу изменить переменные в разных потоках в Python? - PullRequest
0 голосов
/ 02 февраля 2019

Я не могу изменить значения 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()

1 Ответ

0 голосов
/ 02 февраля 2019

Использование присваивания x = в calc_callback создает новую переменную x, независимую от x в приложении test().Только эта новая переменная модифицируется и затем выбрасывается (то же самое для y).

Попробуйте nonlocal объявление (необходим Python 3.x):

[...]

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