gpt4 book ai didi

python - 在 python Flask/Gevent Web 服务中缓存大对象

转载 作者:太空宇宙 更新时间:2023-11-04 06:12:00 27 4
gpt4 key购买 nike

我正在构建一个基于 Python 的网络服务,为我们的主要应用程序 API 提供自然语言处理支持。由于它的 NLP 繁重,因此需要从磁盘中解压一些非常大的 (50-300MB) 语料库文件,然后才能进行任何类型的分析。

如何将这些文件加载​​到内存中,以便每个请求都可以使用它们?我试验过 memcached 和 redis,但它们似乎是为小得多的对象设计的。我也一直在尝试使用 Flask g 对象,但这只会在一个请求中持续存在。

在使用 gevent(或其他)服务器允许并发连接时,有什么办法可以做到这一点吗?语料库是完全只读的,因此应该有一种安全的方式将内存暴露给多个 greenlets/线程/进程。

非常感谢,如果这是一个愚蠢的问题,我深表歉意 - 我使用 Python 已经有一段时间了,但我对网络编程还比较陌生。

最佳答案

如果您正在使用 Gevent,您可以在进程的全局范围内拥有只读数据结构,并且它们将由所有 greenlet 共享。使用 Gevent,您的服务器将包含在单个进程中,因此数据可以加载一次并在所有 worker greenlet 之间共享。

封装数据访问的一个好方法是将访问函数或类放在模块中。您可以在导入模块时取消选中数据,也可以在有人第一次将函数调用到模块中时触发此任务。

您需要确保不会引入竞争条件,但如果数据是严格只读的,您应该没问题。

关于python - 在 python Flask/Gevent Web 服务中缓存大对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18280454/

27 4 0
文章推荐: css - 将 CSS 从 Angular 组件应用到子组件
文章推荐: c - 在没有 的情况下将一个字符串设置为等于另一个字符串
文章推荐: html - 将
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com