我正在使用几十个内核进行一些多处理,并且正在使用:
pool = multiprocessing.Pool()
# worker does some groupby operations and returns a dict of summary statistics
# huge_dataframe is a pandas.DataFrame(), 30 cols (mixed dtypes) x 1B rows
results = pool.map_async(worker, ((huge_dataframe, i) for i in xrange(3000)))
my_data = results.get()
但是,我的工作永远不会完成。它的速度足够快,峰值与我所拥有的核心一样多,然后在工作中途缓慢熄火,直到它不再产生新的流程。我已经尝试编辑map_async的chunksize,Pool()的maxtasksperchild,随机化我的(真实)输入列表以避免偏斜,但似乎没有任何工作。我想知道是否有一个底层队列由multiprocessing.Pool()填充并需要清空,所以程序无限期挂起?如果是这样,我可以通过apply_async避免这个瓶颈吗?这是否为每个进程设置单独的Queue对象?感谢。