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

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

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的mulitprocessing库用于简单的父子进程和管道的好例子,但是没有

#1楼 票数:0 已采纳

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

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.

  ask by p0815 translate from so

未解决问题?本站智能推荐:

1回复

使用python多处理管道

我正在尝试编写一个使用多个进程计算校验和的类,从而利用多个核心。 我有一个非常简单的类,它在执行一个简单的案例时很有用。 但每当我创建两个或更多类的实例时,工作者永远不会退出。 好像从来没有得到父管道关闭管道的消息。 所有代码都可以在下面找到。 我首先分别计算md5和sha1校验和
1回复

Windows上使用Python的多处理管道

Windows是否支持multithreading.pipes()? 如果是,那么此代码有什么问题? 我需要使用减少量吗? 该代码挂在p2.recv()上,从命令行运行时出现RuntimeError。
1回复

大对象和“多处理”管道和“发送()”

我最近发现,如果我们使用multiprocessing.Pipe创建一对父子连接对象,并且如果我们尝试通过管道发送的对象obj太大,我的程序就会挂起而不会抛出异常或做任何事情。 请参阅下面的代码。 (下面的代码使用numpy包来生成大量的浮点数。) 输出如下。 它无限期地挂在这里。 但是,
2回复

在进程之间进行通信时,队列优于管道的优势是什么?

在管道上使用2个队列在进程之间进行通信的优点(如果有的话)是什么? 我打算使用multiprocessing python模块。
1回复

python管道的同步/异步行为

在我的应用程序中,我使用多处理模块中的管道来在python进程之间进行通信。 最近我发现了一种奇怪的行为,这取决于我通过它们发送的数据的大小。 根据python文档,这些管道基于连接,并且应该以异步方式运行,但有时它们会在发送时陷入困境。 如果我在每个连接中启用全双工,一切正常,即使我没有
1回复

Python多处理管道“死锁”

我遇到以下示例代码的问题: 当完成的队列变得足够大(我认为限制大约64k)时,整个事情会在没有任何进一步通知的情况下冻结。 当队列变得太大时,这种情况的一般方法是什么? 有没有办法在处理后动态删除元素? Python文档建议在实际应用程序中删除p.join()但是我无法估计进程
1回复

Python的多处理的过程通信

我已经了解了Python多进程的Pipes / Queues / Shared ctypes Objects / Managers,并且想将它们与Linux的匿名管道,命名管道,共享内存,套接字等进行比较。 我现在有以下问题 Python的多处理的管道和队列模块基于匿名管道。 它提
1回复

Python多处理管道轮询错误

使用管道与多处理库进行进程通信时,我注意到poll函数有些奇怪的行为。 如果我关闭管道的另一端,poll()返回true,这很奇怪。 python文档并没有真正告诉您期望什么。 我仍然认为,如果管道中绝对没有任何东西,并且另一端甚至关闭,则poll()至少将返回false。 我使用pyt