python多处理动态创建进程和管道

时间:2015-03-30 20:50:51

标签: python pipe multiprocessing

我希望能够根据定义子项的输入文件在父元素和子元素之间动态创建子进程和管道。

我可以创建子进程,但我需要能够创建管道以与特定节点进行通信,并使用这些管道发送特定的处理数据:

if __name__ == '__main__':
    q = mp.Queue()
    t = mp.Process(name="transactor", target=t, args=("transaction.csv",))
    nodes = [mp.Process(name=str(n), target=f, args=(n,)) for n in nodeArray]

    for node in nodes:
        node.start()

我的问题在于,我不明白如果创建的进程数量可能会改变如何创建可变数量的管道并选择正确的管道进行通信,如果您只知道目标节点或子标识?

对于python而言,我有点像菜鸟,我看到很多很好的例子,使用Pythons mulitprocessing库来处理简单的父子进程和管道,但没有什么

1 个答案:

答案 0 :(得分:0)

创建Process时创建Pipe,并返回Process a Pipe的元组。

import multiprocessing as mp

def mkproc(func):
    parent_conn, child_conn = mp.Pipe()
    p = mp.Process(func, args=(child_conn,))
    p.start()
    return (p, parent_conn)

调用mkproc创建进程后,将结果存储在列表中;

allprocs = [mkproc(f) for f in (foo, bar, baz)]

allproc的内容现在是(ProcessPipe)元组的列表。如果遍历列表,则您拥有进程和属于它的管道;

for proc, conn in allprocs:
    # do something with the process or pipe.