Я занимаюсь разработкой робота для отслеживания.Я успешно создал модуль, содержащий класс отслеживания, который я могу импортировать в скрипт и заставить его правильно работать.Я использую часы реального времени для записи количества секунд, в течение которых отслеживание прошло успешно.Как только я запускаю свой скрипт, я нажимаю кнопку.Этот вход должен выполнять код отслеживания и одновременно выполнять функцию часов;функция часов будет работать в фоновом режиме.Во-первых, я хочу подтвердить;лучше всего подходит многопоточность функции часов?Если нет, что будет лучшим способом?В настоящее время происходит следующее: поток запускается, и функция непрерывно печатает секунды, прежде чем перейти к части «while True».Я понимаю, почему это происходит;Я начинаю это раньше, чем «пока верно».Я начинаю поток преждевременно, потому что я не могу запустить поток в цикле while (что я не понимаю, почему).Как мне запустить поток и выполнить код отслеживания вместе?
def Timer():
i2c= io.I2C(board.SCL,board.SDA)
rtc = adafruit_ds3231.DS3231(i2c)
if True:
t = time.struct_time((2019,0,0,0,0,0,0,0,-1))
rtc.datetime = t
print()
while True:
t = rtc.datetime
seconds = t.tm_sec
minutes = t.tm_min
hours = t.tm_hour
print("{}:{}:{}".format(hours, minutes, seconds))
#time.sleep(1)
time_thread = threading.Thread(target = Timer, name = 'thread 1', args = [])
time_thread.start()
tracking = False
oscillating = False
count = 0
while True:
if mem.input(29) == 0 and count == 0:
I.Initiate()
mem.output(36,mem.HIGH)
count = count + 1
tracking = True
elif mem.input(29) == 0 and count == 1:
time.sleep(0.1)
mem.output(32, mem.HIGH)
mem.output(36, mem.LOW)
count = count + 1
tracking = False
oscillating = True
elif mem.input(29) == 0 and count == 2:
time.sleep(0.1)
mem.output(32, mem.LOW)
count = 0
oscillating = False
time.sleep(0.05)
В идеале, первый оператор if после 'while True' будет инициировать отслеживание и запускать часы одновременно.