Celery - 从龙卷风界面启动和停止周期性任务

Celery - Start and stop periodic task from tornado interface

我正在尝试从 tornado 应用程序界面启动和停止 celery 周期性任务。

例如,假设有两个任务:AB。 我希望用户能够从 HTML 表格(每分钟、每月、每 5 分钟等)中 select 周期,然后单击任务 A 上的 start。 用户可以对任务 B 执行相同的操作。然后返回到一个页面,该页面上有一个按钮可以随时停止任务 A and/or 任务 B。

我在 Whosebug 上浏览了很多有关该主题的问题,其中 none 正在回答这个简单的问题。

截至目前,我的龙卷风应用程序可以毫无问题地处理简单的芹菜工人,我面临的问题是 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 Redbeat

Celery Beat 可以做到这一点。

只需按照描述设置过期变量here, (go to the expiration tab)