我有一个postrongave钩子,触发一个任务在芹菜中运行。该任务还会更新模型,从而导致postrongave钩子运行。问题是我不想在这个实例中.delay()
调用,我只想同步运行它,因为它已经在一个worker中运行了。
是否有一个环境变量或其他东西,我可以用来检测代码何时在芹菜中运行?
澄清一下:我知道芹菜任务仍然可以被称为正常函数,这正是我想要利用的。我想这样做:
if os.environ['is_celery']:
my_task(1, 2, 3)
else:
my_task.delay(1, 2, 3)
通常是common.py, production.py, test.py and local.py/dev.py
。您可以添加一个celery_settings.py
,内容如下:
from production import *
IS_CELERY = True
然后在你的celery.py
(我假设你有一个)你会做
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.celery_settings")
在你的脚本中,你可以这样做:
if getattr(settings, 'IS_CELERY', None):
my_task(1, 2, 3)
else:
my_task.delay(1, 2, 3)