Python:使用多处理对图进行分区

Python: Using multiprocessing to partition a graph

我正在修改现有代码以添加多处理。有问题的代码使用队列对图形进行分区,以生成用于多序列比对的列。

串行代码在队列不为空时运行。队列使用单个图进行初始化。

graphs=[graph]
while graphs:
    g = graphs.pop()
    if g.is_column():
        #append data from graph to another list
        map_columns.append(g.lengths)
        continue
    l, r = g.split() 
    g.append(l)
    g.append(r)

我想让代码有一个进程池,它用图形填充它,然后向池中添加新图形,直到不再有不是列的图形。

我以前使用过 Python 多处理包,但我不确定如何使用它来解决这个问题。我将如何将图形发送到子进程,以便最多 n 个进程处于活动状态(对于 n 个内核)并确保一旦我真的没有子图要分区就结束循环?

在每个算法步骤中,您都会生成一组新的图表来处理。您可以将其视为二叉树生成器,因此,您可以拥有一个进程池和 运行 每个树级别的算法。在开始时(在树的顶部)不会发生并行性,但是随着树生成的进行,如果树在某种程度上是平衡的,您将从这个实现中获益。

from multiprocessing import Pool, Queue


pool = Pool(6)
result_queue = Queue()
graphs=[graph]
intermediary_graphs[graph]

def work(graphs):
    if g.is_column():
        #append data from graph to another list
        map_columns.append(g.lengths)
        return
    l, r = g.split() 
    intermediary_graphs.append(l)
    intermediary_graphs.append(r)
    result_queue.put(l, r)

while graphs:
    pool.map(work, graphs)
    graphs = []
    while not result_queue.empty():
        graphs.append(result_queue.get())

请注意,我还没有对此进行测试。如果还不行运行,请作为伪代码进行完善

所有中间图都将存储在 intermediary_graphs 中,graphs 变量将在每次迭代时清空,并用我们正在生成的图树中的新节点级别重新填充。

希望对您有所帮助。