【发布时间】:2021-01-29 07:27:26
【问题描述】:
我有两个 python 程序应该并行运行并做同样的事情:
- 从磁盘读取和解压缩数据(大约需要 1 分钟)
- 处理数据(大约需要 2-3 分钟)
- 将数据发送到数据库(大约需要 3-5 分钟)
如您所见,最好让两个实例的执行以一种执行大量处理器的步骤 1 和 2 的方式同步(实现是多线程的,因此 CPU 实际上可以最大化),而另一个执行 I/O 繁重的第 3 步,反之亦然。
我的第一个想法是使用锁文件,每个进程在进入阶段 3 时获取并在完成后释放。所以其他进程会一直等到锁被释放,然后在进入阶段3的时候再设置。然而,这似乎是一种非常繁琐的做法。此外,系统应该在无人监督的情况下运行数天和数周,并能够从错误、计划重启或电源故障中恢复。特别是在最后一种情况下,锁定文件可以简单地锁定所有内容。
有没有更优雅的方式来传达两个进程之间的锁定?还是我应该使用锁定文件并尝试实现一些智能清理功能以防止发生死锁?
【问题讨论】: