Потоки бесконечных циклов и проблема syn c - PullRequest
0 голосов
/ 09 февраля 2020

У меня болит голова, я пытаюсь понять, как бороться с 2 потоками в Python.

Моя идея состояла в том, чтобы создать один поток для мигающих светодиодов, которые имеют бесконечное время l oop, а когда глобальная переменная меняется на True, она начинает мигать et c, но она всегда бесконечно l oop.

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

Проблема, с которой я сталкиваюсь, когда запускаю поток светодиодов из основного потока, так как поток светодиодов имеет бесконечное значение l oop, он останавливает работу основного потока дальше, чем flashThread.start()

if __name__ == "__main__":
    print('starting main...')
    flashThread = threading.Thread(name='SFlashing', daemon = True, target=Flash)
    flashThread.start()
    while(True):
        print('running main...')
        time.sleep(2)

оно никогда не достигает running main...

Flash() просто бесконечно, в то время как l oop и в зависимости от глобальных переменных делает вещи ...

1 Ответ

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

Вот пример печати основного потока running main... + параллельного потока, увеличивающего переменную count, на основе ваших объяснений. Ваш код должен работать, может, не могли бы вы дать нам больше информации о Flash l oop, чтобы мы могли вам помочь?

import threading
import time

def Flash():
    count = 0
    while True:
        print("count", count)
        count += 1
        time.sleep(1)

print('starting main...')
flashThread = threading.Thread(name='SFlashing', daemon = True, target=Flash)
flashThread.start()
while(True):
    print('running main...')
    time.sleep(2)

Вывод:

starting main...
count 0
running main...
count 1
running main...
count 2
count 3
running main...

** EDIT ** Здесь больше нет time.sleep() во Fla sh, пока глобальная переменная toto не изменится в главной l oop.

import threading
import time

global toto
toto = 0

def Flash():
    global toto
    count = 0
    while True:
        print("count", count)
        count += 1
        if toto == 2:
            print("YEEHA")
            time.sleep(2)

print('starting main...')
flashThread = threading.Thread(name='SFlashing', daemon = True, target=Flash)
flashThread.start()
while(True):
    print('running main...')
    time.sleep(1)
    toto = 2
...