【发布时间】:2021-09-19 15:24:20
【问题描述】:
我有很多 python 函数(每一个都是不同类的成员函数),并且希望每时每刻都并行运行其中的 x 个(除非剩下的少于 x 个)。
换句话说,我想要一个包含所有应该执行的任务和 x 个子进程的队列。主进程会从队列中弹出任务直到队列为空,然后交给子进程执行。子进程空闲时会通知主进程,得到另一个任务。
我想过使用多进程模块,但不知道如何知道每个子进程何时完成并为下一个任务做好准备。
我尝试使用共享队列 - 用主进程填充它的类对象,并在每个子进程上执行以下操作:
def subprocess(shared_queue):
while not shared_queue.empty():
class_obj = shared_queue.pop()
class_obj.main_func()
但是,事实证明我无法用我的复杂类填满队列。
编辑:我认为 pool 不起作用,因为我想运行许多不同的功能,每个功能一次。我在 pool 中看到的示例使用不同的参数多次运行一个函数。
编辑 2:池将按照 cmets 的建议通过将函数作为参数传递来解决原始问题。但我仍然想要一个管理队列的解决方案,因为稍后我想给每个任务一个权重并运行任务,以使它们的权重总和不超过阈值。所以我仍然需要知道子流程何时完成它们的任务。
【问题讨论】:
-
您需要查看
pool,这将使x进程从可能更大的任务列表中运行。另见multithreaded pool -
但是池运行 1 个函数,参数不同。我看到了具有 2 个不同功能的示例,例如 link,但我需要许多不同的功能,每个功能都运行一次
-
函数可以是参数。编写一个调用函数参数的函数。
-
谢谢。我仍然想要一个管理队列的解决方案,因为稍后我想给每个任务一个权重并运行任务,以使它们的权重总和不超过阈值。所以我仍然需要知道子流程何时完成它们的任务。