内存处理大型python重组,以便在GridEngine上快速读写

时间:2014-02-05 20:46:01

标签: python memory-management sungridengine large-data

有没有办法强制将python2.7对象保存在RAM中以便快速读写访问?或者,如果这是依赖操作系统的问题,那么无论如何都要让Grid Engine做同样的事情吗?

我有一个大型的全球重组(myrecarray),包括19个字段和5000万行。我正在使用一个定义(myloop)来遍历myrecarray访问每一行一次以更新2个字段的值并将一些数据复制到其他对象。这是通过qsub在具有256GB RAM的集群上运行的(大约是myrecarray大小的10倍,因此它可以应对myrecarray的大小)。这里的问题是在集群上运行时循环是一个巨大的瓶颈。当在macbook pro(4GB RAM,2.53 GHz处理器)上使用timeit测试具有相同500,000行重排的循环时,循环需要250 ^ -6秒并且比集群上快5倍。

似乎群集很可能没有将myrecarray放在RAM中,而是强制循环每次都从光盘读取它,从而导致速度减慢。

我已经研究了网格引擎上的内存共享,python和Heap分配中的多处理,并且有点丢失,特别是因为我不确定究竟发生了什么。任何建议都将受到热烈欢迎

重新排列的一个示例行是......

(49817038, 'C', 'R', 'O', 'U', 'E', 1, 1, 0, 0, 1, 2, 3, 3, 6, 2, 0, 'Tup', 'Hit')

N.B。我是唯一使用此群集的人,因此与其他作业没有冲突,这是一个单线程进程,管理员对RAM的使用没有限制。

非常感谢提前

1 个答案:

答案 0 :(得分:1)

我认为这是一个操作系统设置。了解如何配置swappiness因子。如果要将所有内容保存在RAM中,除非它已满,请将其设置为0.

http://en.wikipedia.org/wiki/Swappiness