我有一个程序需要通过网络进行大量查询,所以我正在做的是并行化工作。这真的是I / O-bound,我只是在做:
for i in range(options.workers):
w = Worker(queue, output_queue, options.site)
w.setDaemon(True)
w.start()
for i, dataset_metadata in enumerate(datasets_metadata):
queue.put((i+1, dataset_metadata))
queue.join()
options.workers
来自命令行。现在我想动态改变作品的数量。
第一个问题:如何在queue.join
之后添加工作人员?
第二个问题:如何在运行时评估最佳工人数量?我想我要监控速度任务/时间,增加工人数量,直到这个比例不变。
答案 0 :(得分:1)
您可能自己可以启动和停止您的工作人员,但您需要的大部分功能可能已经可用:
multiprocessing.dummy
模块导出与multithreading
相同的API,仅使用线程而不是进程实现。 Pool
个工作人员,如果在某些时候需要,可以轻松地从线程切换到多处理。concurrent.futures
API提供了更高级的并发模型。它位于python3.2 +的标准库中,但早期版本有backports。