【问题标题】:keep data in memory persistently将数据持久保存在内存中
【发布时间】:2021-06-24 05:27:23
【问题描述】:

我想编写一个Python 脚本,它将 2 GB 数据从硬盘加载到内存中,然后每当其他程序请求时,它必须获取输入并根据输入对这些数据进行一些计算。对我来说重要的是把这 2 GB 的数据持久地保存在内存中,以加快计算速度,更重要的是避免巨大的 I/O 负载。

我应该如何将数据永久保存在内存中?或者更一般地说,我应该如何在 Python 中解决这样的问题?

【问题讨论】:

  • 您确定进程间通信是提高性能的最佳方式吗?为什么不在要使用数据的同一进程中将其加载到内存中?
  • @kaya3 这不是进程间通信。运行计算的同一脚本也应该保留数据。
  • 那么“每当其他程序要求时”是什么意思?
  • 另一个程序应该向我的python程序发送请求,然后它必须根据已经加载的数据进行计算并返回结果。所以加载和计算是由一个python程序完成的。
  • 好的 - 我认为查询和响应本身与执行计算所需的数据相比占用的内存相对较少?

标签: python python-3.x persistent-storage


【解决方案1】:

根据您拥有的数据类型,您可以将数据保存在 Python 列表、集合、哈希图或任何其他数据结构中。如果这只是一个缓存,你也可以使用像 Redis 或 memcached 这样的服务器。

“永远”将数据加载到内存或每次需要时都加载数据并没有什么特别之处。您可以只加载到 Python 变量中并保留它们。

【讨论】:

  • 当然,为什么在 Python 数据结构中保留 2GB 数据会有问题呢?只要您有超过 2GB 的可用内存,一切都会顺利进行。
  • @Soheil 您可能希望将脚本变成服务。尝试使用 bottle 之类的模块并公开 HTTP API。
  • 另外你应该知道你最近使用的文件将被保存在你系统的文件系统缓存中,并且未来的读取速度会更快,甚至不会撞到磁盘。
  • 为什么不能让这个脚本作为服务运行而不是在运行一次后退出呢?
  • 如果 Redis 可以做你需要的过滤/搜索,你可以使用它。否则,您将需要提供服务。您如何“为每个新输入图像”运行此脚本。不是一直在运行以获取新图像吗?
【解决方案2】:

确保您有 2GB 的可用 RAM,然后使用 mmap 模块 (https://docs.python.org/3/library/mmap.html) 将整个阵列映射到活动内存中。

【讨论】:

    猜你喜欢
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多