动态更改并行线程数

时间:2012-06-08 08:20:08

标签: python multithreading networking optimization

我有一个程序需要通过网络进行大量查询,所以我正在做的是并行化工作。这真的是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之后添加工作人员?

第二个问题:如何在运行时评估最佳工人数量?我想我要监控速度任务/时间,增加工人数量,直到这个比例不变。

1 个答案:

答案 0 :(得分:1)

您可能自己可以启动和停止您的工作人员,但您需要的大部分功能可能已经可用:

  • multiprocessing.dummy模块导出与multithreading相同的API,仅使用线程而不是进程实现。
    这意味着您可以使用已经实现的Pool个工作人员,如果在某些时候需要,可以轻松地从线程切换到多处理。
  • concurrent.futures API提供了更高级的并发模型。它位于python3.2 +的标准库中,但早期版本有backports