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

时间:2018-09-06 11:15:54

标签: python django celery django-celery

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

是否有解决方法?

编辑

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

2 个答案:

答案 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

阅读更多内容