简短问题:是否有可能有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我熟悉
multiprocessing
Process
类和进程池,但是:每个
Process
实例都启动一个进程(yep:)—我需要固定数量的工人我想要能使泛型工作的
Process
实例 最佳答案
在平衡器中不需要任何智能;仅队列就可以满足您的需要将每个工作单元放入队列中,并让workers循环,从队列中获取单个工作单元,并在每次迭代时对其进行处理我认为在队列中传递UnitOfWork实例没有任何问题。
如果你有固定数量的工作要做,你可以创建一个“不再有工作要做”的工作单元(一个“毒丸”),告诉一个工人关闭,在所有的正常工作都排到队列中之后,把尽可能多的毒丸排到队列中。