我正在尝试创建一个应用程序,该应用程序创建一个套接字并打印出现在套接字上的传入数据。select 是使用套接字的首选方法,所以我写了这个:
#!/usr/bin/python3
from select import select
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 2345))
s.setblocking(False) # True did not change anything
#s.settimeout(2) # same behavior if uncommented
s.send(("give me data\n").encode("latin1"))
while True:
readers, writers, err = select([s], [s], [])
if s in readers:
data = s.recv(1024)
print(data)
# some kind of sleep here?
然而,这是代码示例消耗 100% 的一个 CPU 内核。
在具有非阻塞套接字的情况下等待来自套接字的数据而没有这种无限循环的正确方法是什么?我需要它来检查连接是否仍然有效。有一个类似的问题CPU 在 python 中使用 select 达到 100% 使用率,但它没有清楚地解释为什么某种睡眠是必要的。
阿晨1998
缥缈止盈
相关分类