我正在使用celery加载神经网络模型,并希望将加载的模型存储在设置中以进行快速预测。
在django.conf.settings
中,我有:
MODELS = {}
在芹菜任务中,我有以下代码段:
@app.task
def load_nn_models(model_name):
from django.conf import settings
...
settings.MODELS[model_name] = {'model': net, 'graph': sess}
但是,我注意到任务正在另一个启动不同 Django Environment 的线程中运行,并且设置中的任何更改都不会反映回主线程。
是否有解决方法?
编辑
我存储在设置中的参数是:
答案 0 :(得分:2)
显然,Django设置不是正确的选择。首先是因为settings
对象不是共享资源(每个进程有一个实例),然后是因为the doc explicitely mentions that this object is to be considered as immutable。
如果您要让celery任务计算这些对象,以便其他任务和/或前端可以使用它们,则必须找到一种方法来序列化它们并将序列化的版本存储在共享资源(数据库,缓存等)。
答案 1 :(得分:1)
您可以尝试使用configparser 导入configparser
def dict_from_file():
config = configparser.ConfigParser()
config.read("config.ini")
models = config['models']
for x in models.values():
print(x)
设置文件config.ini
:
[models]
var_a: home
var_b: car
var_c: Next
调用dict_from_file
的输出是:
home
car
Next
更新文件config.ini
:
[models]
var_a: home
var_c: New
调用dict_from_file
的输出是:
home
New
ypu可以为supported-datatypes
阅读更多内容