您可以强制 celery 计划任务立即在 apply_sync 上运行吗?

luk*_*kik 5 python celery

我在 Celery 上有一个计划任务,每三分钟运行一次。但是,在某些情况下,我希望在高优先级任务进入时立即运行该任务。

例如,您有一个计划,每 3 分钟发送一次批量电子邮件。但是,当收到高优先级电子邮件时,我想send_email.apply_async()立即调用并运行它,然后仅发送该特定的高优先级电子邮件并退出。

我注意到的是,当我打电话时send_email.apply_async(kwargs=hig_priority_email_details),我注意到它没有立即执行,就像它在 3 分钟后被发送到运行一样。我可能会错过什么?

计划任务:

'engine.app_engine_v1_0.send_email.run-every-180-seconds': 
    {'task': 'engine.app_engine_v1_0.send_email',
     'schedule': timedelta(seconds=180),
     'kwargs': {'no_of_emails':60000, 'lock_expire':5, 'skip_lock':False}
     },
Run Code Online (Sandbox Code Playgroud)

luk*_*kik -2

.delay()我已经有一段时间没有运行Celery 提供的方法了,以至于我忘记了它。它在Celery 基础知识指南中进行了解释。它是发送任务消息的快捷方式,但不支持执行选项。

所以在这种情况下,我所需要做的就是调用它send_email.delay(**high_priority_email_details),它就会立即运行。

  • 这**不能**保证任务立即运行。`.delay()` 只是映射到 `.apply_async()`。如果任务是用诸如 celery.schedules.crontab 之类的东西来安排的,即使使用 .apply_async(countdown=0) 也不能保证立即执行。 (4认同)