使用multiprocessing.Process

时间:2019-05-20 08:11:41

标签: 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
        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()返回,但是我不知道如何

multiprocessing提供了一些选项,例如使用conn,但这无济于事,因为我正在运行黑盒方法,并且无法覆盖它们并使打印结果发送到{{ 1}}打印。

This页建议捕获标准输出,但我认为这样做不好,因为并行进程会输出到同一位置,而没有分离能力...

如何通过IO控制实现并行处理(使用Python方法目标)?

我虽然喜欢conn之类的东西,但我认为它太过分了。

0 个答案:

没有答案