将编译后的python 3.7正则表达式存储在数据库中



我在无服务器环境中使用AWS lambda执行一些文本挖掘任务。由于它是无服务器的,因此不可能保持运行环境的运行,并且冷启动它需要大约10分钟来编译所有正则表达式。因此,我很想在数据库中存储一堆(超过10k(序列化编译的正则表达式,以便在需要时快速重用它们。有人给我什么建议吗?

大致如下:

import psycopg2
import re
r=re.compile(r"w+") 
cursor.execute("update regex set compiled=%s where id=%s", (r, 1))

"已编译"的类型为byta和

cursor.execute("select compiled from regex where id=%s", (1,))
r=cursor.fetchone()[0]
r.search("somestring")

我相信您谈论的是将返回的对象存储在re.compile(r"\w+"(中。

您可以存储字符串r〃;\w+";在像DynamoDB这样的NoSQL数据库中,检索字符串并使用re.compile.进行编译

像这样:

cursor.execute("select compiled from regex where id=%s", (1,))
s=cursor.fetchone()[0]
r=re.compile(s)
r.search("somestring")
...

另一种选择是使用PythonPickle来序列化您的对象,但我认为不可能将其保存在数据库中,您可以使用S3上传Pickle结果文件并检索它。

使用Lambda暖启动,您可以随时使用Pickle+S3将此对象保存在内存中,但第一次执行会有很高的延迟。

我认为解决方案是在无效的情况下不要使用无服务器架构。

Python似乎没有提供一种有效的方法来序列化已编译的正则表达式。你得到的只是重新编译所需的代码

如果有人遇到相同的问题,解决方案是防止lambda的冷启动。远非优雅,但目前是唯一的解决方案。

相关内容

最新更新