Я сталкиваюсь с проблемой при использовании 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)