Django更新了Celery的异步任务中的设置

问题描述 投票:1回答:2

我正在使用芹菜来加载神经网络模型,并希望将加载的模型存储在快速预测的设置中。

所以在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 Environment的线程中运行,并且设置中的任何更改都不会反映回主线程。

这有解决方法吗?

编辑

我在设置中存储的参数是:

python django celery django-celery
2个回答
2
投票

显然,Django设置不适合这个。首先因为settings对象不是共享资源(每个进程有一个实例),因为the doc explicitely mentions that this object is to be considered as immutable

如果您的目的是让芹菜任务计算这些对象,以便其他任务和/或前端可以使用它们,您将不得不找到一种方法来序列化它们并将序列化版本存储在共享资源(数据库,缓存等)中)。


1
投票

你可以尝试使用configparser import 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

你可以阅读qazxsw poi的更多内容

© www.soinside.com 2019 - 2024. All rights reserved.