python 的 sys.stdin.read() 会阻塞吗?

2023-11-20

我正在适应这个 Django 管理命令为了我自己的目的。该脚本是一个简单的 while 循环守护进程,它从 sys.stdin 读取(第 152 行,在command.handle()) 根据协议并将结果写入 sys.stdout。

我希望sys.stdin.read()阻塞直到它收到一些东西,但我发现当我运行这个脚本时,它会在发送或接收任何数据之前占用 100% 的 CPU。

  1. Does sys.stdin.read(n) block?
  2. 如果没有,我怎样才能让这个守护进程更有礼貌呢?
  3. Is time.sleep(s)使用安全,或者我会错过输入或响应缓慢吗?

默认情况下,sys.stdin.read() and sys.stdin.read(n)正在阻止呼叫。我假设 100% CPU 的消耗实际上是由于将数据流式传输到脚本中或此处未引用的其他一些行为造成的。

查看帮助文档后sys.stdin.read,我注意到了这一点:

读(...)

read([size]) -> 最多读取 size 字节,以字符串形式返回。

如果大小参数为负数或被省略,则读取直到达到 EOF。请注意,当处于非阻塞模式时,数据少于请求的数据 即使没有给出尺寸参数,也可能会被返回。

(强调我的。)

这意味着阻塞模式是默认行为,这与我的经验一致。这也让我在 SO 上找到了类似的问题。瞧:python 中 subprocess.PIPE 的非阻塞读取

祝你适应顺利!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 的 sys.stdin.read() 会阻塞吗? 的相关文章

随机推荐

  • 在应用程序中将 Youtube 视频保存到 iPhone

    在应用程序中播放 Youtube 视频非常简单 并且有详细的文档记录 这样做有两个问题 关闭 Youtube 播放器后 如果用户想再次播放 则必须再次等待在线流媒体 无法离线播放 在家加载视频以便在路上观看 有没有人有代码 下载 Youtu
  • 为什么使用 -lpthread 隐式声明 pthread_yield 而使用 -pthread 则一切正常?

    我在 CentOS7 中使用 gcc 编译此代码 main c include
  • 403 禁止回复 – 我应该寻找什么?

    我有一个脚本给我错误403 Forbidden error 它只是另一个脚本的副本 但不同之处在于两者都使用另一个 mysql 类来访问数据库 我的整个项目已完成 这是最后一个文件 因此我不想为单个文件再次完成整个工作 服务器日志显示客户端
  • 检查字符串是否由唯一字母组成的最简单方法?

    我需要在 Java 中检查一个单词是否由唯一字母组成 不区分大小写 由于直接解决方案很无聊 我想出了 对于字符串中的每个字符检查是否indexOf char lastIndexOf char 将所有字符添加到HashSet并检查设置大小是否
  • 使用 Qt 4.8 在全屏模式下隐藏光标?

    我在带有 OpenBox 的 ArchLinux 中 我想在 Qt 4 8 应用程序中隐藏全屏光标 我知道有关它的其他一些问题 但没有人每次都能工作 有时光标隐藏 有时不隐藏 我没能准确地理解问题发生的时间 但我认为这可能与屏幕保护程序有关
  • 如何在 Android 中重新启动 Activity? [复制]

    这个问题在这里已经有答案了 在我正在编写的应用程序中 有一部分可以让您更改窗帘设置 问题是 在重新创建活动之前 此设置不会生效 有没有办法告诉应用程序使用 onResume 方法重新启动 希望允许它保存 onSaveInstanceStat
  • 我们如何使用 POI API 读取受保护的密码 excel 文件 (.xls)

    我刚刚学习了 POI 发现 HSSF 的读取和创建 excel 文件 xls 非常简单 但是 当我想读取受密码保护的Excel时 我发现了一些问题 我花了一个小时在互联网上找到这个解决方案 请你帮我解决这个问题 如果您能给我一个代码片段 我
  • 异步网络操作永远不会完成

    我有几个异步网络操作 它们返回可能永远不会完成的任务 UdpClient ReceiveAsync不接受CancellationToken TcpClient GetStream返回一个NetworkStream这不尊重Cancellati
  • Android 中的 java.lang.ExceptionInInitializerError

    我正在尝试创建一个可以验证人脸的 Android 应用程序 但是当我尝试在模拟器上运行我的应用程序 使用 Eclipse 时 我的 logcat 中出现以下结果 06 16 14 51 24 326 E AndroidRuntime 430
  • Spring boot JPA - 没有具有 OneToMany 关系的嵌套对象的 JSON

    我有一个项目处理对象的一些 ORM 映射 有一些 OneToMany关系等 我使用 REST 接口来处理这些对象 并使用 Spring JPA 在 API 中管理它们 这是我的 POJO 之一的示例 Entity public class
  • Django - 管理中的 UserProfile m2m 字段 - 错误

    我的模型 class UserProfile models Model TYPES CHOICES 0 u teacher 1 u student user models ForeignKey User unique True type m
  • 对于长度变化很大的输入,最佳 StringBuffer 初始容量是多少?

    大家下午好 我正在使用java lang StringBuilder来存储一些字符 我不知道要提前存储多少个字符 除了 60 的情况下 它只有 恰好 7 个字符 39 的情况下 它 大约 为 3500 个字符 1 的情况下 大约是 20k
  • Flask AttributeError:模块“app”没有属性“run”

    我的 Flask 项目的结构如下 my project app init py api static templates config py run py 应用程序 init py from flask import Flask app F
  • 获取每个 tr 的 td 值 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我有以下风格的代码 tr td value Feb 23 2008 td td value Feb 25 2008 td td td tr
  • “导入错误:无法导入名称多数组”

    新程序员来了 我正在尝试在 Windows 命令提示符中运行脚本 但在导入 numpy 包时遇到问题 并且我不知道出了什么问题 如何修复它 当我在 iPython 中运行该脚本时 它运行得很好 但是 当我在命令提示符中运行它时 我得到以下信
  • 在 iPhone 中根据触摸拖动旋转图像

    我想根据用户触摸拖动的速度顺时针或逆时针方向旋转图像 我认为这可以通过一些数学和逻辑来完成 这个的代码示例是什么样的 如果您的目标是 iOS 3 2 或更高版本 则可以使用UIRotationGestureRecognizer 代码看起来像
  • 替换 DataGridView 中的 DateTime.MinValue

    我正在开发一个姓名记录应用程序 该信息存储在 SQLite 数据库中 数据库中的所有列都是 TEXT 类型 出生日期列除外 它是 DATETIME 我转移到 SQLite 数据库的原始 Access 数据库允许出生日期为空 因此当我复制它时
  • .user.ini 文件适用于子目录吗?

    是否 user ini控制文件夹特定 PHP 设置的文件也下降到子文件夹中吗 我正在阅读一些网站 他们建议这样做 尽管没有很多关于它的信息 但是我发现如果我从子文件夹运行脚本 它不会使用来自 user ini file 我是否遗漏了某些内容
  • nodejs如何从stdin读取击键

    是否可以在运行的 Nodejs 脚本中侦听传入的击键 如果我使用process openStdin 并聆听其 data 事件 然后输入被缓冲 直到下一个换行符 如下所示 stdin test js var stdin process ope
  • python 的 sys.stdin.read() 会阻塞吗?

    我正在适应这个 Django 管理命令为了我自己的目的 该脚本是一个简单的 while 循环守护进程 它从 sys stdin 读取 第 152 行 在command handle 根据协议并将结果写入 sys stdout 我希望sys