gpt4 book ai didi

python - 如何解耦 Django 和 Celery?

转载 作者:行者123 更新时间:2023-11-28 19:13:15 24 4
gpt4 key购买 nike

在我的 celery 任务中,我有一个使用在 GPU 上运行的 python 模块 (theano) 的任务,该模块只能同时由一个线程导入。但是要启动网站,我必须运行:

python manage.py runserver
celery -A celery_try worker -l info

所以模块会同时被celery和django网站导入,这是冲突的。有没有办法解耦 Django 和 Celery,使模块只导入一次?

最佳答案

出于测试目的,您可以在单线程模式下运行 Django 开发服务器:python manage.py runserver --nothreading

你只想在 celery worker 进程中import theano,而不是在 django web 服务器进程中,对吗?好的,让我们有条件地导入,以便它在 celery 中导入而不是在 django 中导入。

import os

try:
# next line will raise exception in django, but will work fine in celery
is_worker = os.environ['celery_worker']
import theano # celery will import theano, django won't
except Exception as exc:
# django code will catch exception that celery_worker doesn't exist and print it here
print exc

然后使用 celery_worker 环境变量集启动你的 celery worker:

celery_worker=yes celery -A celery_try worker -l info

为了区分celery worker和django,让我们在celery进程中设置一个bash环境变量,而不是在django进程中。我将该变量命名为 celery_worker。为了设置它,我在 celery -A celery_try worker -l info 前添加了 per-command env variable assignment : celery_worker=yes。现在,在 python 代码中,我检查环境变量是否存在。如果是,我们在 celery worker 中,需要导入 theano。

如果我们在 django 中,则不应定义 os.environ['celery_worker'] 并应引发异常。

关于python - 如何解耦 Django 和 Celery?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37204359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com