can*_*nni 3 python parallel-processing performance multiprocessing
简短的问题:是否有可能有N工作流程和一个balancer流程,它会找到此时什么都不做的工人并将其传递UnitOfWork给它?
长问题:想象一下这样的课程,女巫将被子类化以执行某些任务:
class UnitOfWork:
def __init__(self, **some_starting_parameters):
pass
def init(self):
# open connections, etc.
def run(self):
# do the job
Run Code Online (Sandbox Code Playgroud)
启动平衡器和工作进程:
balancer = LoadBalancer()
workers = balancer.spawn_workers(10)
Run Code Online (Sandbox Code Playgroud)
部署工作(平衡器应该找到一个懒惰的工作人员,并将任务传递给它,否则如果每个工作人员都很忙,则将 UOW 添加到队列中并等待空闲工作人员):
balancer.work(UnitOfWork(some=parameters))
# internally, find free worker, pass UOW, ouw.init() + ouw.run()
Run Code Online (Sandbox Code Playgroud)
这可能吗(或者是疯了)?
PS我熟悉multiprocessing Process类和进程池,但是:
Process实例都启动一个进程(是的:))-我想要固定数量的工人Process可以进行通用工作的实例我建议你看看,multiprocessing.Pool()因为我相信它完全解决了你的问题。它运行 N 个“工作进程”,当每个工作人员完成一项任务时,会提供另一个任务。而且不需要“毒丸”;这很简单。
我一直.map()在游泳池上使用这种方法。
Python multiprocessing.Pool:何时使用 apply、apply_async 或 map?
编辑:这是我写给另一个问题的答案,我用multiprocessing.Pool()在我的答案中。