运行 正在加载 Django 芹菜
Running Django celery on load
你好我正在做一个项目,我需要 celery beat 来完成 运行 长期的周期性任务。但问题是,在开始 celery beat 后,它第一次花费指定的时间 运行。
我想第一次在加载时触发任务,然后 运行 定期触发任务。
我在 GitHub 上看到了这个 question on Whosebug and this 问题,但没有找到可靠的解决方案。
对此有什么建议吗?
由于这似乎不可能,我建议采用不同的方法。在需要时显式调用任务,让调度程序照常继续调度任务。您可以使用 following 方法之一在启动时调用任务(如果任务不是幂等的,您可能需要处理 ready
方法的多次调用)。或者在 django 服务器启动命令后使用 celery call
从命令行调用任务。
大多数时候调用它的最佳位置是在当前应用程序的 ready()
函数中 AppConfig
class:
from django.apps import AppConfig
from myapp.tasks import my_task
class RockNRollConfig(AppConfig):
# ...
def ready(self):
my_task.delay(1, 2, 3)
注意 .delay()
的使用,它将调用放在 celery que 上并且不会减慢启动服务器的速度。
参见:https://docs.djangoproject.com/en/3.2/ref/applications/#django.apps.AppConfig and https://docs.celeryproject.org/en/stable/userguide/calling.html。
你好我正在做一个项目,我需要 celery beat 来完成 运行 长期的周期性任务。但问题是,在开始 celery beat 后,它第一次花费指定的时间 运行。
我想第一次在加载时触发任务,然后 运行 定期触发任务。
我在 GitHub 上看到了这个 question on Whosebug and this 问题,但没有找到可靠的解决方案。
对此有什么建议吗?
由于这似乎不可能,我建议采用不同的方法。在需要时显式调用任务,让调度程序照常继续调度任务。您可以使用 following 方法之一在启动时调用任务(如果任务不是幂等的,您可能需要处理 ready
方法的多次调用)。或者在 django 服务器启动命令后使用 celery call
从命令行调用任务。
大多数时候调用它的最佳位置是在当前应用程序的 ready()
函数中 AppConfig
class:
from django.apps import AppConfig
from myapp.tasks import my_task
class RockNRollConfig(AppConfig):
# ...
def ready(self):
my_task.delay(1, 2, 3)
注意 .delay()
的使用,它将调用放在 celery que 上并且不会减慢启动服务器的速度。
参见:https://docs.djangoproject.com/en/3.2/ref/applications/#django.apps.AppConfig and https://docs.celeryproject.org/en/stable/userguide/calling.html。