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



我有一个python进程运行"在后台"。它是在一个完全不同的进程中启动的子进程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)有效和不阻塞。侦听器也是长时间运行的,并且我试图支持任意python代码,这些代码在侦听器模块导入时执行from sys import std(in|out|err)仍然会看到std(in|out|err),就像来自客户端一样。我可以在监听器启动时执行setup(修改/替换sys.std(in|out|err)?),然后再导入其他内容。

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

我不完全确定我理解这个问题,但是你有没有研究过使用管道/套接字的选择来避免阻塞?我有点模糊的另一个要求,它"不读到内存中。"

相关内容

最新更新