Правильный способ создания одного потока из метода класса, который может быть преждевременно остановлен в Python - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь создать неблокирующий поток, который общается с использованием запросов / сокетов для сбора данных с внешнего регистратора данных. Мне известны потоки, асинхронная и многопроцессорная обработка как основные способы асинхронной обработки данных в Python, но я не уверен, что больше всего подходит для этой работы. Мне нужна только одна запись для одновременного запуска, чтобы иметь возможность предоставить параметры (ie максимальная длина записи) при инициализации потока и другую функцию (остановка (само)), чтобы иметь возможность остановить запись и восстановить данные в любое время Я создал скелетный код того, как класс будет выглядеть:

class recorder():
    def __init__(self):
        self.ip = "127.0.0.1"
        self.port = 1567
        self.host = "http://"+self.ip
        self.session = requests.session()
        self.session.post(self.host, "/rest/init")

    def record(self, length):
        response = self.session.post(self.host, "/rest/startrecording")
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
            s.connect()
            while True: # Need some way of breaking out of this loop...
                data = s.recv(28)
                # ... more data receiving/formatting code ...
        response = self.session.put(self.host, "/rest/stoprecording")
        return data

    def stop(self):
        # some way of communicating to the record method the stop to recording

Итак, мой вопрос: каков наиболее подходящий способ адаптации этого класса для асинхронной записи данных?

...