【问题标题】:python multiprocessing dynamically created processes and pipespython multiprocessing 动态创建进程和管道
【发布时间】:2015-03-30 20:50:51
【问题描述】:

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

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

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 时,我有点菜鸟,我看到了很多使用 Python 多处理库来处理简单的父子进程和管道的很好的例子,但没有什么

【问题讨论】:

    标签: python pipe multiprocessing


    【解决方案1】:

    在创建流程时创建管道,并返回流程的元组和管道。

    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 的内容现在是 (Process, Pipe) 元组的列表。如果您遍历列表,您将拥有进程和属于它的管道;

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

    【讨论】:

    • 谢谢罗兰。我想我理解你在这里想要达到的目标,但我发现我遇到了错误:assert group is None, 'group argument must be None for now'
    • 我随后将它应用到我的实际代码中,发现它运行良好。
    猜你喜欢
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 2011-04-05
    • 1970-01-01
    相关资源
    最近更新 更多