【发布时间】:2013-08-19 06:45:23
【问题描述】:
我正在构建一个基于 python 的 Web 服务,它为我们的主应用 API 提供自然语言处理支持。由于它是如此繁重的 NLP,它需要从磁盘中提取一些非常大的 (50-300MB) 语料库文件,然后才能进行任何类型的分析。
如何将这些文件加载到内存中,以便它们可用于每个请求?我尝试了 memcached 和 redis,但它们似乎是为更小的对象设计的。我也一直在尝试使用 Flask g 对象,但这只会在一个请求中持续存在。
在使用 gevent(或其他)服务器允许并发连接时,有什么方法可以做到这一点?语料库是完全只读的,因此应该有一种安全的方式将内存暴露给多个 greenlets/threads/processes。
非常感谢,如果这是一个愚蠢的问题,我深表歉意 - 我已经使用 python 工作了很长一段时间,但我对网络编程还比较陌生。
【问题讨论】:
-
IMO 您应该使用与 pickle 不同的存储格式。 ……数据库怎么样?
-
@MarkusUnterwaditzer 是的,我最终选择了 redis。 NLP 的困难在于,对于大多数任务,您需要将整个语料库加载到内存中,通常是某种专门的数据结构。如果您只需要特定任务的语料库,有时可以解决这个问题(就像我最终做的那样),但我不知道有任何数据存储可以支持一般情况。
标签: python caching flask nlp gevent