检测Django函数是否在一个celery worker中运行



我有一个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)

相关内容

  • 没有找到相关文章

最新更新