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

标签 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 中的多处理和堆分配,但有些迷失,特别是因为我不确定到底发生了什么。任何建议都将受到热烈欢迎

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

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

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

提前非常感谢

最佳答案

我认为这是操作系统设置。查看如何配置交换因子。如果您想将所有内容保留在 RAM 中(除非 RAM 已满),请将其设置为 0。

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

关于python - 大型 python 重新数组的内存处理,以便在 GridEngine 上快速读写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21588133/

相关文章:

c++ - 分配的数组已归零

bash - 评论中的变量扩展

bash - 如何正确地将环境变量传递给 Sun Grid Engine?

google-compute-engine - 在 Google Compute Engine 上设置和运行网格作业的工具?

python - 如何使用 Selenium 单击多个元素,同时避免 Stale Element 错误

python mmap flush() 不适用于 ACCESS_COPY

sql - R 或 SQL 中间隔的每组引用的最大 n

Python子进程困惑的输出

python - TypeError : int() argument must be a string or a number, 不是 'Model Instance'

iphone - 苹果框架中的内存泄漏