使用多处理从其他进程获取数据

时间:2018-04-21 19:01:26

标签: python multiprocessing wait pool

(语言是Python 3)

我正在编写一个包含模块multiprocessing并使用Pool的程序。我需要一些在所有进程之间共享的变量。父进程将初始化此变量并将其作为参数传递给p.map()。我希望子进程更改此变量。这样做的目的是因为子进程的第一部分工作应该并行完成(计算工作不需要任何其他进程的数据)。但是,进程工作的第二部分需要按顺序完成,一个接一个进行,因为它们正在写入文件,并且该文件的内容应该是有序的。我希望每个进程都等到其他进程完成后再继续。我将使用变量记录整个程序的“进度”,例如当第一个进程写入文件时,它会将变量加1。我希望这是开始写入文件的下一个进程的信号。但我需要某种waituntil()函数来使进程等待,直到Value变量指示它是“转向”写入文件。

以下是我的两个问题:

  1. 我需要一个子进程可以编辑的变量,子进程实际上可以获取该变量的值。我应该使用什么类型的变量?我应该使用ValueManager还是其他什么?

  2. 我需要让进程等到上面描述的变量等于某个值,表示轮到他们写入文件了。我可以使用任何类型的waituntil()函数吗?

1 个答案:

答案 0 :(得分:1)

您要找的是同步。 有许多不同的同步原语可供选择。

您永远不应该尝试自己编写同步原语,因为正确地执行这些操作非常简单!

在您的情况下,EventCondition可能适合。