Python 如何在使用multiprocessing.Process时捕获stdout/stderr

Python 如何在使用multiprocessing.Process时捕获stdout/stderr,python,python-2.7,io,multiprocessing,subprocess,Python,Python 2.7,Io,Multiprocessing,Subprocess,我试图为Python方法目标模拟subprocess.Popen stdout/stderr,这意味着,我希望创建N个具有唯一stdout/stderr处理程序的并行作业 这是我当前的代码: #!/bin/python import time import multiprocessing as mp class Job(object): def __init__(self, target, *a, **kw): self.target = target

我试图为Python方法目标模拟
subprocess.Popen stdout/stderr
,这意味着,我希望创建N个具有唯一stdout/stderr处理程序的并行作业

这是我当前的代码:

#!/bin/python
import time
import multiprocessing as mp


class Job(object):
    def __init__(self, target, *a, **kw):
        self.target = target
        self.args = a
        self.kwargs = kw

def parallelize(jobs):
    """
    Args:
        jobs (list): list of the jobs to run. with all its params
    """
    procs = [mp.Process(target=job.target, args=job.args, kwargs=job.kwargs) for job in jobs]
    for p in procs:
        p.start()
    for p in procs:
        p.join()


def dummy(*a, **kw):
    print a
    time.sleep(1)
    print kw


def main():
    parallelize([Job(dummy) for i in range(2)])

main()
它只与作业并行。输出仍然显示在屏幕上。如果我使用
subprocess.Popen()
,我可以为每个进程创建添加
stdout=PIPE()
参数,并将其值存储在一个对象中,稍后从
parallelize()
返回,但我不知道如何操作

提供了一些选项,例如使用
conn
,但这没有帮助,因为我正在运行黑盒方法,无法覆盖它们并使它们以打印方式发送到
conn

page建议捕获标准输出,但我认为这不好,因为并行进程将输出到同一个位置,而没有分离能力

如何使用IO控制实现并行进程(使用Python方法目标)


我想到了类似
subprocess.Popen('python-c“import my_module;my_module.my_method()”,stdout=subprocess.PIPE)
的东西,但我认为它太粗糙了。

你能给
多处理
后端的
joblib
一个机会吗?我相信它捕获了stdout/stderr。