Celery中的每台机器共享内存池或类似的多处理系统

时间:2018-02-08 03:42:16

标签: python pyspark multiprocessing celery shared-memory

我有一组任务,我希望在多台计算机上并行运行,每台计算机都有多个核心。我的主要挑战是这些任务需要对12GB数据集进行只读访问,这些数据集必须由工作线程/进程快速访问,因此必须将这些数据保存在内存中。将工作人员隔离到单独进程的系统需要为每个工作人员复制这个内存,这是不可接受的 - 我没有每个核心有12GB备用内存的计算机。

PySpark的“广播”功能几乎解决了我的问题,但是PySpark将数据序​​列化为一个字符串,因为它将它分布在整个网络中,并且Spark的一个子系统以巨大的数据大小进行处理,并在序列化数据时退出。

我在Linux上,所以我可以通过ramfs将数据存入共享内存,但我仍然需要一种方法来获得机器级别的粒度。设置共享内存并分配对它的引用应该在每台机器上进行一次,而不是每个任务一次或每个工作一次。我正在努力在任何分布式任务库(Celery,ipyparallel等)上找到一种方法。我是不是用Python的多处理工作来推动自己的任务经销商?

0 个答案:

没有答案