我正在使用 celery 加载神经网络模型,并希望将加载的模型存储在设置中以进行快速预测。
所以在django.conf.settings
中我有:
MODELS = {}
在 celery 任务中,我有以下代码片段:
@app.task
def load_nn_models(model_name):
from django.conf import settings
...
settings.MODELS[model_name] = {'model': net, 'graph': sess}
但是,我注意到任务正在另一个启动不同Django 环境的线程中运行,并且设置中的任何更改都不会反射(reflect)回主线程。
有解决办法吗?
编辑
我在设置中存储的参数是:
- 网:keras Model
- session :Tensorflow Session
最佳答案
显然,Django 设置不适合这样做。首先因为 settings
对象不是共享资源(每个进程有一个实例),然后因为 the doc explicitely mentions that this object is to be considered as immutable .
如果您的目的是让 celery 任务计算这些对象,以便其他任务和/或前端可以使用它们,您将必须找到一种方法来序列化它们并将序列化版本存储在共享资源(数据库、缓存等)。
关于python - Django 更新 Celery 异步任务中的设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52202863/