睡眠的非阻塞呼叫

时间:2011-09-13 09:09:11

标签: 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_NODELAY是否有意义,还是不应该合并?

3 个答案:

答案 0 :(得分:3)

如果您打算使用sleep(),为什么不使用阻塞套接字?

答案 1 :(得分:2)

你不应该自己这样做。如果您需要代码即使没有收到任何数据也经常唤醒,请使用select调用,超时。

BTW,TCP_NODELAY是发送方,不会影响您的read

答案 2 :(得分:1)

使用select。当插座上有可用数据时,它将基本暂停程序并将其唤醒。