Доступ к переменной из второго модуля, работающего в цикле - PullRequest
0 голосов
/ 10 февраля 2020

Сценарий y.py выполняется постоянно и обновляет переменную z. Мне нужно получить доступ к переменной z через x.py, и она не работает. Я пытаюсь использовать две разные темы.

y.py

import threading

# Run every 3 seconds to update the z variable
if __name__ == "__main__": # Should avoid the importation to modify the z variable content

    delay = 3
    z = 0

    def foo():
        global z
        z = z + 1
        print("inner",z)
        # This thread run continuously and should not 
        # block the other threads
        threading.Timer(delay,foo).start()  

    foo()
    print("outer",z + 10)

x.py

import y

foo = y.z
print(foo)

1 Ответ

0 голосов
/ 10 февраля 2020

Вам нужно изменить способ работы в y.py:

import threading

# Run every 3 seconds to update the z variable
delay = 3
z = 0

def foo():
    global z
    z = z + 1
    print("inner",z)
    # This thread run continuously and should not
    # block the other threads
    threading.Timer(delay,foo).start()

foo()
print("outer",z + 10)

if __name__ == "__main__": # Should avoid the importation to modify the z variable content
    foo()

if __name__ == "__main__": - это код драйвера Более подробную информацию смотрите здесь

you следует использовать это для вызова функции, а не для вложения функции внутри нее.

изменить x.py на:

import y

foo = y
print(foo.z)

вывод из x.py:

inner 1
outer 11
1
inner 2
inner 3
...

Я немного изменил ваш код, чтобы ускорить его, отвечая на него, так что он может не дать желаемого результата, поэтому вам может потребоваться изменить его, но ваша проблема должна быть исправлена.

...