【发布时间】:2016-02-16 07:54:26
【问题描述】:
来自这里的文档https://pythonhosted.org/joblib/parallel.html#parallel-reference-documentation
我不清楚 batch_size 和 pre_dispatch 到底是什么意思。
让我们考虑使用'multiprocessing' 后端、2 个作业(2 个进程)并且我们有 10 个任务要计算的情况。
据我了解:
batch_size - 控制一次腌制任务的数量,所以如果你设置batch_size = 5 - joblib 将腌制并立即向每个进程发送5个任务,到达那里后将由进程依次解决,一个接一个其他。使用batch_size=1,joblib 将一次腌制并发送一个任务,当且仅当该进程完成了之前的任务。
表达我的意思:
def solve_one_task(task):
# Solves one task at a time
....
return result
def solve_list(list_of_tasks):
# Solves batch of tasks sequentially
return [solve_one_task(task) for task in list_of_tasks]
所以这段代码:
Parallel(n_jobs=2, backend = 'multiprocessing', batch_size=5)(
delayed(solve_one_task)(task) for task in tasks)
等于这个代码(在性能上):
slices = [(0,5)(5,10)]
Parallel(n_jobs=2, backend = 'multiprocessing', batch_size=1)(
delayed(solve_list)(tasks[slice[0]:slice[1]]) for slice in slices)
我说的对吗?那么pre_dispatch 是什么意思呢?
【问题讨论】:
标签: python multithreading python-3.x multiprocessing joblib