Python 将 std(in/out/err) 流式传输到另一个进程

标签 python io

我有一个“在后台”运行的 python 进程。这是一个subprocess.Popen()调用以完全不同的过程开始。到目前为止,我已经实现了它,这两个进程正在使用 multiprocessing.connections.(Listener|Client)彼此沟通。但我愿意接受任何方式来完成以下任务。

我想要做的是让“监听器”后台进程使用 std(in|out|err) ,就好像它们来自“客户端”进程一样。流很重要,这样 io 就不会被读入内存,而是可以高效地读取和写入,同时也可以避免阻塞监听器进程。我想这意味着我需要较低级别的访问或某种异步/线程/多处理解决方案。那就是我不清楚该怎么做。例如:

while True:  # TODO
    conn = listener.accept()
    try:
        callable_, args, kw = conn.recv()
        callable_(*args, **kw)

问题是如何允许 callable_ 高效且无阻塞地执行流向/来自 std(in|out|err) 的流。监听器也是长时间运行的,我正在尝试支持执行 from sys import std(in|out|err) 的任意 python 代码,在监听器模块导入时仍然会看到 std(in| out|err) 就好像来自客户端。我可以在监听器启动时进行设置(修改/替换 sys.std(in|out|err)?),然后再导入其他内容。

是否有一种好的方法透明地流式传输此 io,以便在初始设置后由监听器进程运行的代码可以是任意的,并且可以正常处理 std(in|out|err) 而不会阻塞等?最好不要创建新进程,因为目标是减少进程开销,尽管在客户端使用多个进程更可取,因为客户端是瘦客户端。同样,如果我必须循环读取/写入来自 std(in|out|err) 的字节段以完成有效的流式传输,最好在客户端中进行。

最佳答案

我不完全确定我理解这个问题,但你调查过 using select with pipes/sockets 了吗?避免阻塞?我对另一个要求“不读入内存”有点含糊。

关于Python 将 std(in/out/err) 流式传输到另一个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7117189/

相关文章:

python - 努力尝试创造新系列

python - 矩阵到矢量与 python/numpy

c++ - 在同一行读取字符串和整数

javascript - 无法在 BeautifulSoup 中抓取一些细节

python - Twisted RPC 消息聚合

python - 如何在 sklearn 中修复这个自定义变压器?

c - read() 在 c 中无法正常工作

java - 在 Java 中从 InputStream 读取时遇到 IOException

c++ - 为什么 cout 立即输出?

即使指定了绝对路径,Scala io.Source.fromfile 也找不到我的文件