Рекурсивный способ, которым вы определили функцию printit
, создаст бесконечный цикл, однако это определение усложняет управление выполнением потока. Возможно, вы захотите написать собственный класс Thread
, который принимает функцию, которую вы хотите запустить с заданным интервалом, и интервал, который вы хотите ждать (аналогично тому, что вы передаете Timer
).
import threading
import time
class RepeatThread(threading.Thread):
def __init__(self, interval, f):
self.interval = interval
self.f = f
def start(self):
while True:
self.f()
time.sleep(self.interval)
Тогда вы можете использовать класс следующим образом,
import serial
ser = serial.Serial('/dev/ttyUSB0', 57600, timeout=3)
def send_bytes():
ser.write(b'1\n')
t = RepeatThread(180.0, send_bytes)
t.start()
while True:
pass
Кроме того, ответ на этот вопрос предлагает много полезной информации о том, как создавать бесконечные циклы в Python. Возможно, вы также захотите следовать их инструкциям по блокировке при доступе к последовательному устройству (если несколько потоков могут потенциально использовать его одновременно).