【发布时间】:2021-11-20 21:03:22
【问题描述】:
我在Python 2.7 中使用Python multiprocessing.Pool 类。我有大量只能在一天中的某个时间段内运行的作业。每项工作都需要一些时间。我想将作业限制为一次最多并行运行 n 个。
池功能可以很好地限制并行作业的数量,但是当我试图结束这些作业时它似乎有问题。当我在窗口结束时,我希望当前正在运行的作业完成它们的处理。我不想开始新的工作。我一直在尝试使用Pool.close() 来执行此操作,它确实让我的运行进程按需要完成,但从实验看来,即使在池之后,队列中但尚未开始处理的作业仍将提交处理已关闭。
另一个选项Pool.terminate() 甚至会主动关闭正在运行的作业,这与预期的行为背道而驰。
| Function | Allows running jobs to finish | Prevents new jobs from starting |
|---|---|---|
| .terminate() | No | Yes |
| .close() | Yes | No |
| Desired behaviour | Yes | Yes |
【问题讨论】:
-
只是一个想法,但一种简单的方法可能是让每个作业的开头检查来自主进程的信号或事件;一旦你在运行窗口结束时设置了它,任何正在运行的作业都将继续,因为它们在开始时已经检查了信号,但任何新开始的作业都会立即退出。 (当大量短期进程在短时间内启动时,可能会对性能造成一点影响)
标签: python python-2.7 multiprocessing pool