Micro python - переменная общего доступа в потоках для функций, определенных в различных .py (файлах) - PullRequest
1 голос
/ 25 февраля 2020

У меня ESP32 с микропрограммой Micro python, и у меня есть два процесса в потоке:

  1. Wi-Fi-соединение с взаимодействием веб-страниц
  2. Neopixel led strip stuff

Что я хочу сделать, так это взаимодействовать через веб-страницу (1), чтобы изменить светодиодные элементы Neopixel (2). Оба процесса находятся в потоках. Проблема в том, как изменить переменную из процесса (1) в (2)? Я попытался использовать глобальные переменные, и это сработало, если и процесс потока, и его функции находятся в одном файле (.py), но если я делаю то же самое, но помещаю функцию в другой файл .py, он не работает !!

Это ниже работает:

import _thread
from time import sleep

var_global = 0

def thread_Teste1():
  global var_global
  while True:
    sleep(1.5)
    var_global += 1
    print("Teste1: ", var_global)

def thread_Teste2():
  global var_global
  while True:
    sleep(1)
    var_global += 1
    print("Teste2: ", var_global)

# Thread
try:
  _thread.start_new_thread(thread_Teste1, ())
  _thread.start_new_thread(thread_Teste2, ())
except Exception:
  import traceback
  print(traceback.format_exc())

while True:
    sleep(1000)

Но если я сделаю то же самое, поместив код "while True" в функцию в отдельном файле .py, он не будет работать, я имею в виду, он не увидит глобальная переменная (я пробовал много способов кодирования, но не работал)

Любое предложение о том, как я могу изменить значение переменной в разных потоках с помощью кода в другом файле .py? Я нашел про очередь, но она не работает на Micro python ...

Спасибо!

1 Ответ

1 голос
/ 07 апреля 2020

Я решил это, объявив глобальную переменную в отдельном файле .py, а затем импортирую этот файл туда, где я хочу его использовать. Кроме того, там, где я его импортирую, я «повторно» объявляю переменную внутри с тем же именем (думаю, чтобы сделать его видимым).

...