python:multiprocessing.Pipe 和重定向标准输出

2023-12-15

我在用multiprocessing包生成第二个进程,我想将 stdout 和 stderr 重定向到第一个进程。我在用multiprocessing.Pipe object:

dup2(output_pipe.fileno(), 1)

Where output_pipe是一个实例multiprocessing.Pipe。然而,当我尝试在另一端阅读时,它就挂起了。我尝试使用阅读Pipe.recv_bytes有一个限制,但这提出了OSError。这是否可能,或者我应该切换到一些较低级别的管道功能?


在 Python 2.7 中进行实验后,我得到了这个工作示例。和os.dup2管道的文件描述符被复制到标准输出文件描述符,并且每个print函数最终写入管道。

import os
import multiprocessing


def tester_method(w):
    os.dup2(w.fileno(), 1)

    for i in range(3):
        print 'This is a message!'


if __name__ == '__main__':
    r, w = multiprocessing.Pipe()

    reader = os.fdopen(r.fileno(), 'r')

    process = multiprocessing.Process(None, tester_method, 'TESTER', (w,))
    process.start()

    for i in range(3):
        print 'From pipe: %s' % reader.readline()

    reader.close()
    process.join()

Output:

From pipe: This is a message!

From pipe: This is a message!

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

python:multiprocessing.Pipe 和重定向标准输出 的相关文章

随机推荐

  • 在数据库中记录 Hangfire RecurringJob 的执行情况?

    我已经设置了hangfire我的 ASP NET 项目成功 即在我的数据库中创建了 11 个 Hangfire 表 我在里面尝试了以下命令Application Start 我的项目的Global asax namespace myAPI
  • SQLite DATETIME 列与实体框架

    我有一个现有的 SQLite 数据库 我想在实体框架中使用它 然而 SQLite 奇怪的类型系统意味着你甚至可以 create table temp temp datetime insert into temp values whateve
  • 使用 PHP 身份验证进行 HTTP 身份验证

    我正在为我的网站创建一个会员区域 并且它已经在运行 我使用 mysql 和 php 对成员进行身份验证 效果非常好 但现在出现问题 我想为会员提供将文件上传到系统的可能性 并且这些文件应该仅对登录的会员可用 我知道我可以将这些文件存储到数据
  • SyntaxError: 当尝试将对象参数传递给 onclick 函数时,元素列表后缺少 ]

    我正在尝试迭代对象列表 并使用按钮为每个对象创建一个列表项 当我添加onclick对他们起作用 我收到这个错误 语法错误 元素列表后缺少 这是我的代码 box resources forEach function box box resou
  • 遗传算法中的轮盘选择

    谁能提供一些轮盘赌选择函数的伪代码 我将如何实现这个 我真的不明白如何阅读这个数学符号 我从来没有做过任何概率或统计数据 我自己这样做已经有几年了 但是在谷歌上很容易找到以下伪代码 for all members of population
  • Bash 参数扩展

    我有一个使用以下逻辑的脚本 if z 1 then if any parameter is supplied ACTION clear ACTION else ACTION echo otherwise set it to echo fi
  • 合并两个不同长度的python pandas数据帧+求和公共值

    我有以下问题 我有两个不同长度的 pandas 数据帧 其中包含一些具有共同值的行和一些不同的行 如下所示 df1 s1 s2 s3 s4 sp1 1 0 1 1 sp2 1 1 0 1 sp3 1 1 1 0 sp4 1 1 1 1 df
  • 模拟“如果不存在则创建用户”的语法错误

    MySQL 不允许您指定if not exists中的条款create user声明 尽管事实上create table and create procedure支持这一点 2005 年曾有一个对此的功能请求 但 MySQL 开发人员已经对
  • 使用 MySQLi 的 real_escape_string 作为静态函数

    我想知道是否可以转义字符串 使用 real escape string 而无需先创建对象实例来应用该函数 即 我们可以这样做 database new mysqli DB HOST DB USER DB PASS DB NAME datab
  • 限制在 PDF 页面边界内移动/拖动 pdf 注释

    我正在使用 PDF 套件库在 PDF 视图上加载一份 PDF 我在 pdf 视图上添加了一个自定义视图 与 PDF 注释相同 并且允许用户使用 UIPanGestureRecognizer 在 pdf 视图上 在 pdf 视图 容器视图内
  • 如何在MSVC中有效地将两个__m128d转换为一个__m128i?

    转换然后移位然后按位或是从两个转换的唯一方法 m128d到一个单一的 m128i 这对于 x64 构建中的 Xcode 来说是完全可以接受的 m128d v2dHi m128d v2dLo m128i v4i mm set epi64 mm
  • 如何杀死 C# 线程?

    我有一个线程在我们的 旧 SQL 服务器上查找数据 当数据进入时 我将信息发布到模式对话框中 在所有这些处理正在进行时 用户不能也不应该做任何其他事情 模式对话框只是让他们看到我正在做某事并防止他们同时运行另一个查询 有时 很少 当代码调用
  • 如何在 vi 搜索和替换中包含正斜杠

    我有一个包含字符串的文件usrbin 我想寻找usrbin并将其替换为 usr bin I tried s usrbin usr bin g 但它显示错误E488 Trailing characters 如何在搜索和替换中包含正斜杠 这里有
  • Enterprise Library 6 验证配置文件

    我正在尝试学习 EnterpriseLibraryValidatoin 当我配置 TypeValidation 通过配置文件验证类时 它不会拾取 但是当我添加数据注释时它会正确验证 我不知道我是否遗漏了一些东西 请提供任何帮助 验证配置文件
  • JS:仅过滤非空和字符串值类型的数组

    我正在尝试过滤这样的数组 array filter e gt return e 有了这个我想过滤所有空字符串 包括undefined and null 不幸的是 我的数组有一些不应该存在的数组 因此 我还需要仅检查字符串值并删除所有其他值
  • 通俗地说,Ruby 自我?

    Ruby self 什么时候引用 Object 什么时候 self 引用 Ruby 类 带有示例的解释会很棒 我不明白这个问题 类本身就是对象 假设我有一堂课Person 这实际上是一个实例Class 所以你可以让 self 引用 Arti
  • 在 Javascript 中将数字连接为字符串

    myCoolObject a 0 b 12 c 24 我想串联a b and c使它们看起来像一个唯一的字符串 a b c 或示例中的 0 12 24 a b and c总是代表数字 将它们中的每一个从 int 转换为 string 需要大
  • 未找到整数 parseInt 方法

    我正在尝试在这段代码中测试一个简单的方法 您在其中使用接收参数的方法 正在发生的问题是Integer解析 int 方法 命令提示符给出的错误是 java 24 error cannot find symbol cholo Integer p
  • 清除 QGraphicsScene 中的小部件:崩溃

    我有一个 QGraphicsScene 里面有一个 QPushButton 清除这个场景将使我的应用程序崩溃 有没有正确的方法来使用 QWidget 清除场景 单击按钮时以下代码会崩溃 include
  • python:multiprocessing.Pipe 和重定向标准输出

    我在用multiprocessing包生成第二个进程 我想将 stdout 和 stderr 重定向到第一个进程 我在用multiprocessing Pipe object dup2 output pipe fileno 1 Where