【发布时间】:2022-01-14 00:43:49
【问题描述】:
我正在使用 Flask-restx 和 Spacy NER 模型。
我有一个 api,它必须接收文本和 ID 号,预测标签并使用 spacy nlp 模型返回相同的标签。此 nlp 模型特定于特定的 ID 号。
示例:对于Id '1',将加载nlp模型'a'并用于预测;对于 Id '2',将使用 nlp 模型 'b' 等。
我想知道我是否可以为已预加载特定 nlp 模型的特定 Id 保持打开线程,并且在发送请求时,根据 id 号,打开的特定线程可以处理数据并快速返回一个值。
示例: api 已收到一个请求,即已为 id '5' 创建了一个新的 nlp 模型 'x' 并将被使用,因此使用加载的模型'x' 和所有具有 id 号的请求打开一个新线程' 5' 仅由该线程处理。
目的是存在一个预加载的模型,因此在发送请求时,可以在几秒钟内对其进行处理并返回值。加载 spacy 模型大约需要 30 秒,这在每次发送请求时都无法完成,因为会有超时。
这可以做到还是有其他方法可以做到?
【问题讨论】:
-
是的,它可以做到,但是每个 NLP 模型需要自己的 Thread 是否有特定的原因?如果它们可以只是在初始化时加载数据集的 Python 对象,那么您可以在启动时简单地实例化它们的全局集,将它们插入到 name->obj 映射的字典中,并从请求处理程序中使用它们。如果它们不是线程安全的,则必须与
Lock对象同步。 -
将创建新模型,这将使我无法在启动期间加载它们。当创建一个新的 ID 时,数据库表会告诉我哪个模型将用于该 ID,然后需要加载该 ID。唯一的问题是,对于每个请求,我都无法实时加载特定模型。
-
好吧听起来你真的不需要更多线程,在我的回答中解释了如何做到这一点。
标签: python multithreading api request