последовательный поток чтения Python бесконечный цикл - PullRequest
0 голосов
/ 15 сентября 2018

Я делаю предварительный скрипт для чтения последовательного порта, когда я посылаю «1» через последовательный порт на бесконечное время каждые 3 минуты.Мне нужен скрипт потока, потому что это должно быть интегрировано с другими функциями вместе последовательный.Последовательный порт подключен к Arduino с датчиком, но я не уверен, что программа формально исправлена.Кто-нибудь может мне помочь, пожалуйста?Спасибо

#!/usr/bin/python
import time
import serial
import threading
import time
import io

ser=serial.Serial('/dev/ttyUSB0', 57600, timeout=3)
def printit():
threading.Timer(180.0, printit).start()
ser.write(b'1\n')
lettura=ser.readline()
print lettura

try:
   printit()
except:
   print "Error: unable to start thread"
while 1:
   pass

1 Ответ

0 голосов
/ 15 сентября 2018

Рекурсивный способ, которым вы определили функцию 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. Возможно, вы также захотите следовать их инструкциям по блокировке при доступе к последовательному устройству (если несколько потоков могут потенциально использовать его одновременно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...