python multiprocessing 动态创建的进程和管道
python multiprocessing dynamically created processes and pipes
我希望能够根据定义 child 的输入文件在 parent 和 child 元素之间动态创建 child 进程和管道。
我可以创建 child 个进程,但我需要能够创建管道以与特定节点通信并使用这些管道发送特定处理数据:
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()
我的问题在于,我不明白如果创建的进程数量会改变,你如何创建可变数量的管道和 select 正确的管道进行通信,如果你只知道目标节点或child的身份?
我对 python 有点菜鸟,我看到很多使用 Python 多处理库进行简单 parent child 进程和管道的好例子,但什么都没有
创建进程时创建管道,return进程元组和管道。
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.
我希望能够根据定义 child 的输入文件在 parent 和 child 元素之间动态创建 child 进程和管道。
我可以创建 child 个进程,但我需要能够创建管道以与特定节点通信并使用这些管道发送特定处理数据:
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()
我的问题在于,我不明白如果创建的进程数量会改变,你如何创建可变数量的管道和 select 正确的管道进行通信,如果你只知道目标节点或child的身份?
我对 python 有点菜鸟,我看到很多使用 Python 多处理库进行简单 parent child 进程和管道的好例子,但什么都没有
创建进程时创建管道,return进程元组和管道。
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.