检测Django函数是否在芹菜工作者中运行

时间:2016-08-31 12:04:27

标签: python django celery

我有一个post_save挂钩,触发任务在芹菜中运行。该任务还会更新模型,从而导致post_save挂钩运行。问题是我不希望在这个实例中.delay()调用,我只是想同步运行它,因为它已经在一个worker中运行了。

是否有环境变量或其他我可以用来检测代码何时在芹菜中运行的东西?

澄清一下:我知道Celery任务仍然可以被称为正常功能,这正是我试图利用的功能。我想做这样的事情:

if os.environ['is_celery']:
    my_task(1, 2, 3)
else:
    my_task.delay(1, 2, 3)

1 个答案:

答案 0 :(得分:5)

通常你有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)