1

假设我有一个大小为 50000 的生成器/列表。而且,我想将其用作:

batches = range(0, 50001)

Parallel(n_jobs=multiprocessing.cpu_count(), verbose=100,
                 backend="threading", batch_size=?, pre_dispatch=?)(delayed(<function>)(it) for it in batches)

如果我想一次处理 20,000 个项目/或者我希望线程/cpu 将 20,000 个项目作为单个任务处理,您能否告诉我 batch_size 和 pre_dispatch 的正确值是多少?

4

1 回答 1

0

要在单个 CPU 上处理 20000 个项目,batch_size=20000。

Predispatch 默认发送到 2 个CPU-s。在保持CPU-s忙碌的逻辑中,大概应该是2个batch_size,所以pre_dispatch=40000。设置 pre_dispatch='all' 也很诱人,但是如果任务在时间上大致相等,那么它会起作用。2*batch_size,避免一个CPU空闲,如果时间/任务有很大差异。

以我自己的经验,如果每个操作都很快,最好有更高的batch_size,以减少I/O。

于 2021-03-12T19:05:20.593 回答