gpt4 book ai didi

python - 如何在套接字中获得最新的recv通知(python)

转载 作者:行者123 更新时间:2023-11-28 19:12:16 25 4
gpt4 key购买 nike

sock.setblocking(0)
ready = select.select([sock], [], [], timeout)
try:
if ready[0]:
status = sock.recv(1024)
return status
else:
print "Time out Occured, Disconnecting..."

我有套接字接收功能,只要客户端的某些状态发生变化,它就会接收。同时,我将处理其他事件。

因为我在其他一些事件之间收到了 socks 接收,所以我错过了接收并且无法处理接收。

那么我怎样才能随时随地获得最新的接收呢!

请注意我是 python 的新手。

最佳答案

如果您需要后台 IO,生成一个新线程来处理 IO 可能是最简单的方法:

import socket
import threading
import queue

class ClientReceiver(threading.Thread):
RECV_BUF_SIZE = 1024
QUEUE_SIZE = 2

def __init__(self, sock, recv_buf_size=None, queue_size=None, *args, **kwargs):
super(ClientReceiver, self).__init__(*args, **kwargs)
# set thread as daemon thread, we don't want to
# wait for this thread on interpreter exit.
self.setDaemon(True)
self.sock = sock
self.recv_buf_size = recv_buf_size or self.RECV_BUF_SIZE
self.queue_size = queue_size or self.QUEUE_SIZE

def run(self):
sock = self.sock
try:
while True:
data = sock.recv(self.recv_buf_size)
self.queue.put(data)
except Exception as ex:
# handle errors
raise

# Usage example:
sock = ...
receiver = ClientReceiver(sock)
receiver.start()
data = receiver.queue.get(block=False)

一旦数据可用,线程就会从网络中检索数据并将其放入队列中。如果队列已满,线程将阻塞,您可能需要也可能不需要其他策略。

随时使用receiver.queue 从队列中检索数据.

这里缺少正确关闭客户端套接字的代码,但您可能已经了解了基本概念。

关于python - 如何在套接字中获得最新的recv通知(python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38583806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com