python - CPU 在 python 中使用 select 达到 100% 使用率

标签 python select

我在 python 中有一个选择问题,我有一段代码允许客户端从服务器接收数据,并通过在标准输入上读取和在服务器套接字上写入来发送它:

readfds = [s, sys.stdin]
writefds = [s, sys.stdout]
my_level = get_my_level(s)
is_co = True
cmd = ""
while (is_co):
    read, write, exception = select.select(readfds, writefds, [], 1)
    if (not (read or write or exception)):
        print "Timeout"
    else:
        for sock in read:
            if (sock == s):
                cmd = readline(s)
                print cmd
            elif (sock == sys.stdin):
                cmd = sys.stdin.readline()
                s.sendall(cmd)
     if (cmd == "mort"):
        is_co = False

我认为这是因为 select 是非阻塞的,但是当我让它阻塞时,它是同一回事。你能解释一下我的代码有什么问题吗?

谢谢

最佳答案

大概你总是可以写入sys.stdout 所以select.select 应该立即返回让你知道你可以写入一些东西。这段代码然后处理可读列表,然后重新进入循环。但是 sys.stdout 没有任何变化,所以它仍然是可写的。

这将在一个紧密的循环中执行并消耗 CPU。

关于python - CPU 在 python 中使用 select 达到 100% 使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17431690/

相关文章:

javascript - 使用 Scrapy 从 <script> 标签中提取多行 javascript 内容

python - Python 3.5 中的 “git.exc.GitCommandNotFound: [WinError 2] The system cannot find the file specified” 错误

php - 如何在mysql语句中使用LIKE和通配符

javascript - 同时选择changin

java - 根据多个按键更改 jtable 行选择

cakephp - 为什么选择菜单中的第一项总是空的?

python - 使用 bool(TheClassItself) 返回 False 的类

python - 防止在迭代时修改自定义类

python - 在 Dask 中预先分散数据对象是否有优势?

sql - 如何使用 SQL 从列中获取列表的 >= 25%、50%、75% 的值