我正在尝试从龙卷风应用程序界面启动和停止芹菜周期性任务。
例如,假设有两个任务:A
和B
。 我希望用户能够从 HTML 表单中选择周期(每分钟、每月、每 5 分钟等(并单击任务 A 上的start
。 用户可以对任务 B 执行相同的操作。然后回到一个页面上,其中有一个按钮可以随时停止任务 A 和/或任务 B。
我一直在浏览很多关于这个主题的问题,但没有一个回答这个简单的问题。
截至目前,我的龙卷风应用程序可以毫无问题地处理简单的芹菜工人,我面临的问题是periodic tasks
。(https://docs.celeryproject.org/en/latest/reference/celery.html#celery.Celery.on_after_configure(
continuous_monitoring_worker.py:
continuous_tracking_worker_app.conf.timezone = 'Europe/London'
@continuous_tracking_worker_app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
print('OK inside setup periodic tasks ...')
sender.add_periodic_task(10.0, test.s('Hello World'), name='add every 10')
# In case I want to stop the task later
#time.sleep(35)
#print('beat_schedule = {}'.format(continuous_tracking_worker_app.conf.beat_schedule))
#del continuous_tracking_worker_app.conf.beat_schedule['add every 10']
@continuous_tracking_worker_app.task
def test(name):
print('Periodic task called, name = {}'.format(name))
使用此代码,我会遇到以下问题:当我启动应用程序时,它每 10 秒启动一次任务(我猜是因为装饰器@continuous_tracking_worker_app.on_after_configure.connect
(。但是我希望任务从界面按需启动(在我的龙卷风视图文件的后端通过调用setup_periodic_tasks(continuous_tracking_worker_app)
,而不是在龙卷风应用程序启动时!
Celery Beat 做不到这一点。
您可以考虑使用芹菜红节拍,使之成为可能。
Celery Beat 可以做到这一点。
只需按照此处所述设置 expires 变量,(转到过期选项卡(