Python多处理 - 如何使进程在活动时等待?

时间:2014-11-07 12:25:12

标签: python synchronization multiprocessing

好吧,我对python和多处理都很陌生,我需要知道的是,是否有任何方法可以让活动进程等待“所有进程都已使用给定资源完成“然后继续他们的工作。是的,我真的需要他们等待,主要目的与同步有关。它不是关于完成流程并加入它们,它是关于在它们运行时等待,我应该使用条件/事件之类的东西吗?我无法在任何地方找到任何有用的东西。

这将是这样的:

import multiprocessing

def worker(args):
    #1. working
    #2. takes the resource from the manager
    #3. waits for all other processes to finish the same step above
    #4. returns to 1.

if __name__ == '__main__':
    manager = multiprocessing.Manager()
    resource = manager.something()
    pool = multiprocessing.Pool(n)
    result = pool.map(worker, args)
    pool.close()
    pool.join()

编辑:“工作”部分比其他部分花费更多时间,因此我仍然利用多处理,即使对该单个资源的访问是串行的。让我们说这个问题就是这样的:我有多个进程运行解决方案查找器(一个进化算法),每个“n”解决方案,我使用该资源在这些进程之间交换一些数据,并使用这些信息改进解决方案。所以,我需要所有人在交换信息之前等待。这有点难以解释,我不是真的在这里讨论这个理论,我只是想知道我是否有办法在主要问题中做我试图描述的内容。

2 个答案:

答案 0 :(得分:0)

我不确定,我理解你的问题。但我认为你可以使用Queue。将数据从一个进程传输到另一个进程是一个很好的解决方案。你可以实现类似的东西:

1. Process first chunk
2. Write results to queue
3. Waits until queue is not full
4. Returns to 1

答案 1 :(得分:0)

我实际上找到了一种方法来做我想做的事。 正如您在问题中看到的那样,代码在流程中使用了一个管理器。所以,简单来说,我创建了一个共享资源,它基本上像一个" Log"。每次进程完成其工作时,它都会在日志中写入权限。一旦所有期望的权限都存在,流程就会继续他们的工作(例如,使用它,我可以为资源设置特定的访问顺序)。 请注意,这是一个锁或信号量。 我认为这根本不是一个好方法,但它适合问题的需要而且不会延迟执行。