Python розетка заморозка - PullRequest
0 голосов
/ 21 января 2020

Я сталкиваюсь с проблемой при использовании python для подключения к удаленному сокету, где иногда кажется, что сокет завис или зависает. Если я вызываю прерывание клавиатуры, оно «просыпается» из-за отсутствия лучшего термина и продолжает функционировать, как ожидалось, до тех пор, пока оно снова не остановится. Это на компьютере windows, все функции sleep / hibernate / hdd suspend отключены.

Это довольно простое соединение и имеет 5-секундный опрос, чтобы поддерживать соединение. Фрагмент кода подключения ниже. Любопытно, если кто-то еще сталкивался с подобными проблемами при сохранении соединений сокетов или какие-либо мысли о том, как решить

    def connect(self):
        self._buf = b''
        self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self._sock.connect((self._host, self._port))

    def next_content(self):
        while True:
            msg = self.next_msg()
            if (msg is not None) and (msg.status == STATUS_STREAM):
                return msg

    def content_items(self):
        while True:
            yield self.next_content().data

    def recv(self):
        while True:
            # Do we have a full message in our buffer already?
            if BZ_EOT in self._buf:
                # Return the first full message buffered.
                line, self._buf = self._buf.split(BZ_EOT, 1)
                return Message.from_bytes(line + BZ_EOT)

            # Buffer more data if not.
            buf = self._sock.recv(4096)

            if not buf:
                return None

            self._buf += buf

if __name__ == "__main__":


    client = Client(xxx)

    for content in client.content_items():
        process_event(content)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...