dim*_*414 7 python command-line caching os-agnostic
我正在开发一个Python命令行实用程序,可能涉及对一组文件的相当大的查询.这是一个相当有限的查询列表(想想索引的数据库列)为了提高进程中的性能,我可以生成一次排序/结构化列表,映射和树,并重复点击它们,而不是每次都打到文件系统.
但是,这些缓存在进程结束时会丢失,并且每次运行脚本时都需要重建,这会大大增加程序的运行时间.我想确定在我的命令的多次执行之间共享此数据的最佳方法,这可能是并发的,一个接一个,或者执行之间有明显的延迟.
要求:
喜好:
在我理想的幻想世界中,我能够直接在执行之间保留Python对象,有点像Java线程(如Tomcat请求)共享单例数据存储对象,但我意识到这可能是不可能的.我越接近,越好.
候选人:
SQLite在内存中
SQLite本身对我的用例来说似乎不够快,因为它是由磁盘支持的,因此必须在每次执行时从文件中读取.也许这并不像看起来那么糟糕,但似乎有必要将数据库持久存储在内存中.SQLite允许DB 使用内存作为存储,但这些DB在程序退出时被销毁,并且不能在实例之间共享.
使用mmap将平面文件数据库加载到内存中
在光谱的另一端,我可以将缓存写入磁盘,然后使用mmap将它们加载到内存中,可以在不同的执行之间共享相同的内存空间.如果所有进程都退出,我不清楚mmap会发生什么.如果mmap最终从内存刷新是没关系的,但我希望它能保持一点点(30秒?几分钟?),这样用户可以一个接一个地运行命令,并且可以重用缓存. 这个例子似乎意味着需要一个开放的mmap句柄,但我还没有找到任何关于何时从内存中删除内存映射文件并需要从磁盘重新加载的确切描述.
我想我可以实现这个,如果mmap对象在退出后确实存在,但感觉非常低级,我想有人已经实现了更优雅的解决方案.我不想开始构建这个只是为了意识到我一直在重建SQLite.另一方面,感觉它会非常快,我可以根据具体的用例进行优化.
使用Processing在进程之间共享Python对象
处理包指示" 可以使用...共享内存在进程之间共享对象 ".通过其他文档,我没有看到任何进一步提及这种行为,但这听起来很有希望.谁能指导我了解更多信息?
将数据存储在RAM磁盘上
我关注的是特定于操作系统的功能,但我可以创建一个RAM磁盘,然后根据需要简单地读/写(SQLite?).该fs.memoryfs包似乎是一个有前途的替代使用多个操作系统的工作,但评论意味着相当数量的限制.
我知道pickle是存储Python对象的有效方式,因此它可能比任何类型的手动数据存储都具有速度优势.我可以将泡菜挂入以上任何选项吗?这会比平面文件还是SQLite更好?
我知道有很多与此相关的问题,但我做了一些挖掘工作,找不到任何关于多个命令行执行的直接解决我的问题.
我完全承认,我可能会过分思考这一点.我只想尝试一下我的选择,如果他们是值得的.
非常感谢你的帮助!
归档时间: |
|
查看次数: |
3497 次 |
最近记录: |