Обновление настроек Django в асинхронной задаче Celery - PullRequest
0 голосов
/ 06 сентября 2018

Я использую сельдерей для загрузки моделей нейронной сети и хотел бы сохранить загруженную модель в настройках для быстрого прогнозирования.

так что в 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 , и любые изменения в настройках не будут отражены обратно в основной поток.

Есть ли обходной путь для этого?

EDIT

Параметры, которые я храню в настройках:

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Настройки Django не являются подходящим местом для этого, очевидно. Во-первых, потому что settings объект не является общим ресурсом (есть один экземпляр на процесс), затем потому, что документ явно указывает, что этот объект должен рассматриваться как неизменный .

Если вы хотите иметь задачу сельдерея, вычисляющую эти объекты, чтобы другие задачи и / или фронт могли использовать их, вам нужно будет найти способ их сериализации и сохранить сериализованную версию в общем ресурсе (базе данных, кеш и т. д.).

0 голосов
/ 06 сентября 2018

вы можете попробовать использовать 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

ypu может читать больше для поддерживаемых типов данных

...