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

标签 python django celery django-celery

我正在使用 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)回主线程。

有解决办法吗?

编辑

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

最佳答案

显然,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/

相关文章:

python - 如何根据不同的输入自动迭代以获取(pandas)数据帧的元素

django - 使用列表推导式或 django 的 'values_list' 函数,哪种方法更有效?

django - RESTful 服务参数必须是可发现的吗?

python - 在尝试从图像中创建像素列表时出现错误 'list' 对象不可调用,

python azure webApp,带有 openai

python - Flask-Admin 自动上传并插入数据库

Django - 无法让时间函数(时区、日期时间)正常工作,获取 ErrorName 消息 : global name not defined

django - 使用来自 django 应用程序的 kafka 消息

python - 给定一个 Redis Broker 和一个数据库后端,Celery Task 请求首先写入哪里?

python - celery get 和 join 的区别