Python 非阻塞呼叫的睡眠
我正在寻找从非阻塞套接字接收数据的最佳睡眠值。例如:Python 非阻塞呼叫的睡眠,python,sockets,nonblocking,thread-sleep,Python,Sockets,Nonblocking,Thread Sleep,我正在寻找从非阻塞套接字接收数据的最佳睡眠值。例如: while True: data=s.recv(1024) if not data: time.sleep(10) #10ms else: pass #... 没有睡眠会导致100%的CPU使用率,所以你知道如何获得最佳的CPU使用率和带宽吗?睡眠需要多长时间,这样CPU才能进行线程切换 顺便说一句,通过SO_SNDBUF/SO_RECVBUF设置套接字的缓冲区和设置TCP_节点延迟有
while True:
data=s.recv(1024)
if not data:
time.sleep(10) #10ms
else:
pass #...
没有睡眠会导致100%的CPU使用率,所以你知道如何获得最佳的CPU使用率和带宽吗?睡眠需要多长时间,这样CPU才能进行线程切换
顺便说一句,通过SO_SNDBUF/SO_RECVBUF设置套接字的缓冲区和设置TCP_节点延迟有意义吗?还是应该将它们结合使用。它基本上会暂停程序,并在套接字上有可用数据时将其唤醒。使用。它基本上会暂停程序,并在套接字上有可用数据时将其唤醒。如果您计划使用
sleep()
,为什么不直接使用阻塞套接字?如果您计划使用sleep()
,为什么不直接使用阻塞套接字?您不应该自己这样做。如果您需要代码每隔一段时间唤醒一次,即使没有收到任何数据,也可以使用该调用并超时
顺便说一句,TCP_节点延迟是发送端的,不会影响你的
阅读。你不应该自己这样做。如果您需要代码每隔一段时间唤醒一次,即使没有收到任何数据,也可以使用该调用并超时
顺便说一句,TCP_节点延迟是发送端的,不会影响您的读取s.取消模式学习。现在!忘记函数sleep()
曾经存在过。对于sleep()
的每次使用,还有另一种更合适的方法。请取消学习模式。现在!忘记函数sleep()
曾经存在过。对于sleep()
的每次使用,还有另一种更合适的方法。在我的例子中,套接字切换读/写调用。recv/send/send/send/recv/recv/…在我的例子中,套接字切换读/写调用。recv/send/send/send/recv/recv/…我想当我使用select(…)时,当我返回并尝试接收数据时,数据可以在非阻塞套接字中消失。@No先生。你从哪里得到这个主意的?除非您犯了编程错误,否则您不能通过TCP/IP的任何API丢失数据。我想当我使用select(…)时,当我返回并尝试接收数据时,数据可能会被放入非阻塞套接字中。@No先生。您是从哪里得到这个想法的?除非您犯下编程错误,否则您不能通过TCP/IP的任何API丢失数据。