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

Python 使用多处理从其他进程获取数据,python,multiprocessing,wait,pool,Python,Multiprocessing,Wait,Pool,语言是Python 3 我正在用多处理和使用池模块编写一个程序。我需要一些在所有进程之间共享的变量。父进程将初始化此变量并将其作为参数传递给p.map。我希望子进程更改此变量。这是因为子进程的第一部分工作应该在不需要任何其他进程数据的并行计算工作中完成。但是,流程的第二部分工作需要按顺序进行,一个流程接一个流程,因为它们正在写入文件,并且该文件的内容应该按顺序进行。我希望每个流程都等到其他流程完成后再继续。我将用变量记录整个程序的进度,例如,当第一个进程写入文件时,它将变量增加1。我希望这是一个

语言是Python 3

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

以下是我的两个问题:

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

我需要进程等待,直到上面描述的变量等于某个值,表示轮到它们写入文件。有什么我可以使用的waitill函数吗


您正在寻找的是所谓的同步。 有许多不同的同步原语可供选择

您永远不应该尝试自己编写同步原语,因为正确地编写同步原语并非易事


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

谢谢!我想这解决了我的问题。但是,您能否解释一下同步与其他两种选项相比有哪些优势?为什么我不应该自己编写同步呢?”AhanShanbHAG在进行并行编程时,总是需要考虑并发访问。也可能存在一些意外的行为,例如,由于切换等原因,更改不会立即传播。这是确保一次只有一个进程/线程可以进入关键部分的方法。如您所见,在处理并发访问时必须格外小心。除此之外,大多数操作系统提供通常更快的本机实现。始终使用现有的实现!如果需要,我可以链接我的代码。