从这里的文档https://pythonhosted.org/joblib/parallel.html#parallel-reference-documentation https://pythonhosted.org/joblib/parallel.html#parallel-reference-documentation我不清楚到底是什么batch_size
and pre_dispatch
means.
让我们考虑使用时的情况'multiprocessing'
后端,2 个作业(2 个进程),我们有 10 个任务要计算。
我认为:
batch_size
- 控制一次腌制任务的数量,所以如果你设置batch_size = 5
- joblib 会立即 pickle 并发送 5 个任务到每个进程,到达后,这些任务将由进程依次解决,一个接一个。和batch_size=1
当且仅当该进程完成了前一个任务时,joblib 才会一次pickle 并发送一个任务。
为了表明我的意思:
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
意味着然后?