我在Celery上有一个计划任务,每隔三分钟运行一次。但是,在某些情况下,我希望在高优先级任务进入时立即运行任务。
E.g。您有一个每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}
},
答案 0 :(得分:0)
我没有运行Celery提供的.delay()
方法,因为我忘了它。它在Celery Basics guide中解释。它是发送任务消息的快捷方式,但它不支持执行选项。
所以在这种情况下,我需要做的只是调用send_email.delay(**high_priority_email_details)
,它会立即运行。