【发布时间】:2019-09-25 08:43:52
【问题描述】:
我正在考虑使用 Ray 来实现数据并行处理的简单实现:
- 需要处理大量数据项,这些数据项可通过流/迭代器获得。每件商品的尺寸都很大
- 应在每个项目上运行一个函数,并将产生一个显着大小的结果
- 处理后的数据应该在流中传递或存储在某种接收器中,该接收器只能在某个时间段内接受一定数量的数据
我想知道这是否可以在 Ray 中完成。
目前我有以下基于pythons多处理库的简单实现:
- 一个进程读取流并将项目传递给队列,该队列将在 k 个项目后阻塞(这样队列所需的内存不会超过某个限制)
- 有几个工作进程将从输入队列中读取并处理项目。处理后的项目被传递到结果队列,该队列的大小也有限
- 另一个进程读取结果队列以传递项目
这样,一旦工作人员无法处理更多项目,队列将阻塞,并且不会尝试将更多工作传递给工作人员。 如果 sink 进程无法存储更多的项目,结果队列将阻塞,进而阻塞 worker,worker 反过来阻塞输入队列,直到 writer 进程可以再次写入更多结果。
那么,Ray 有抽象来做这样的事情吗?我如何确保只能将一定数量的工作传递给工作人员,我如何才能拥有像单进程输出函数这样的东西,并确保工作人员不能用如此多的结果淹没该函数,以至于内存/存储耗尽?
【问题讨论】:
标签: python-3.x ray