简短问题:是否有可能有N工作流程和balancer流程来找到此时什么也不做的员工并将UnitOfWork传递给它?
长问题:
想象一下这样的类,witch将为某些任务子类:

class UnitOfWork:
  def __init__(self, **some_starting_parameters):
    pass
  def init(self):
    # open connections, etc.
  def run(self):
    # do the job

启动平衡器和工作进程:
balancer = LoadBalancer()
workers  = balancer.spawn_workers(10)

部署工作(平衡器应找到一个懒惰的工作线程,并将任务传递给它,否则,如果每个工作线程都很忙,请将UOW添加到队列中,并等待空闲的工作线程):
balancer.work(UnitOfWork(some=parameters))
# internally, find free worker, pass UOW, ouw.init() + ouw.run()

这是可能的(还是疯狂的)?
PS我熟悉multiprocessingProcess类和进程池,但是:
每个Process实例都启动一个进程(yep:)—我需要固定数量的工人
我想要能使泛型工作的Process实例

最佳答案

在平衡器中不需要任何智能;仅队列就可以满足您的需要将每个工作单元放入队列中,并让workers循环,从队列中获取单个工作单元,并在每次迭代时对其进行处理我认为在队列中传递UnitOfWork实例没有任何问题。
如果你有固定数量的工作要做,你可以创建一个“不再有工作要做”的工作单元(一个“毒丸”),告诉一个工人关闭,在所有的正常工作都排到队列中之后,把尽可能多的毒丸排到队列中。

09-30 11:02