безопасно выйти из скрипта python3 с потоком потока и 2 процесса Popen - PullRequest
0 голосов
/ 09 декабря 2018

Мой скрипт выполняет следующие действия:

  1. открывает последовательный порт и считывает из него информацию
  2. передает вышеуказанную информацию в другой двоичный файл для предоставления информации в формате json

Я использую класс ReaderThread, который наследует threading.Thread взятия в потоке, чтобы обеспечить неблокирующую реализацию

разбивка кода

Я создал два процессадля выполнения actisense -r /dev/ttyUSB0 | analyzer -json

actisense_process = Popen(['actisense-serial', '-r', '/dev/ttyUSB0'],stdout=PIPE)

analyzer_process = Popen(['analyzer', '-json'],stdin=actisense_process.stdout, stdout=PIPE, stderr=PIPE)

я создал ReaderThread следующим образом:

 class ReaderThread(threading.Thread):

     def __init__(self, stream):
         threading.Thread.__init__(self)
         self.stream = stream

     def run(self):
         while True:
             line = self.stream.readline().decode('utf-8')
             if len(line) == 0:
                 break
             try:
                 n2k_dict = json.loads(line)
                 print(n2k_dict)
             except Exception as e:
                 raise(e)

создал main функцию:

def main():
    reader = ReaderThread(analyzer_process.stdout)
    try:
        reader.start()

        analyzer_process.wait()
        reader.join()
    except Exception as e:
        # usually if user presses `CTRL+C` it should safely be exited
        reader.close()
        os.kill(os.getpid(analyzer_process.pid), signal.SIGTERM)
        os.kill(os.getpid(actisense_process.pid), signal.SIGTERM)

в настоящее время скрипт закрывается при нажатии CTRL C , но я хочу сделать его более безопасным для выхода, поскольку этот скрипт должен работать на встроенном одноплатном компьютере.

Iхотите знать, есть ли определенный порядок, которому необходимо следовать здесь.Например, сначала закройте actisense_process и позже analyzer_process или наоборот, а затем сначала поток или поток, а затем два процесса.

...