假设我有一个大小为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中的正确值是什么吗?
答案 0 :(得分:0)
要在单个 CPU 上处理 20000 个项目,batch_size=20000。
Predispatch 默认发送到 2CPU-s。在保持CPU-s忙碌的逻辑中,大概应该是2batch_size,所以pre_dispatch=40000。设置 pre_dispatch='all' 也很诱人,但是如果任务在时间上大致相同,那么它会起作用。 2*batch_size,避免一个CPU空闲,如果时间/任务差异很大。
以我自己的经验,如果每次操作都快的话,最好有更大的batch_size,以减少I/O。