从这里的文档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
意味着什么呢?