<bdo id='Bt5XU'></bdo><ul id='Bt5XU'></ul>
  • <small id='Bt5XU'></small><noframes id='Bt5XU'>

      <i id='Bt5XU'><tr id='Bt5XU'><dt id='Bt5XU'><q id='Bt5XU'><span id='Bt5XU'><b id='Bt5XU'><form id='Bt5XU'><ins id='Bt5XU'></ins><ul id='Bt5XU'></ul><sub id='Bt5XU'></sub></form><legend id='Bt5XU'></legend><bdo id='Bt5XU'><pre id='Bt5XU'><center id='Bt5XU'></center></pre></bdo></b><th id='Bt5XU'></th></span></q></dt></tr></i><div id='Bt5XU'><tfoot id='Bt5XU'></tfoot><dl id='Bt5XU'><fieldset id='Bt5XU'></fieldset></dl></div>
      1. <tfoot id='Bt5XU'></tfoot><legend id='Bt5XU'><style id='Bt5XU'><dir id='Bt5XU'><q id='Bt5XU'></q></dir></style></legend>

      2. 芹菜中如何向特定队列发送周期性任务

        时间:2024-08-21

        <i id='Tm4jm'><tr id='Tm4jm'><dt id='Tm4jm'><q id='Tm4jm'><span id='Tm4jm'><b id='Tm4jm'><form id='Tm4jm'><ins id='Tm4jm'></ins><ul id='Tm4jm'></ul><sub id='Tm4jm'></sub></form><legend id='Tm4jm'></legend><bdo id='Tm4jm'><pre id='Tm4jm'><center id='Tm4jm'></center></pre></bdo></b><th id='Tm4jm'></th></span></q></dt></tr></i><div id='Tm4jm'><tfoot id='Tm4jm'></tfoot><dl id='Tm4jm'><fieldset id='Tm4jm'></fieldset></dl></div>

        <small id='Tm4jm'></small><noframes id='Tm4jm'>

            <bdo id='Tm4jm'></bdo><ul id='Tm4jm'></ul>
          • <legend id='Tm4jm'><style id='Tm4jm'><dir id='Tm4jm'><q id='Tm4jm'></q></dir></style></legend>

                1. <tfoot id='Tm4jm'></tfoot>

                    <tbody id='Tm4jm'></tbody>
                  本文介绍了芹菜中如何向特定队列发送周期性任务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  默认情况下,芹菜将所有任务发送到‘celery’队列,但您可以通过添加额外参数来更改此行为:

                  @task(queue='celery_periodic')
                  def recalc_last_hour():
                      log.debug('sending new task')
                      recalc_hour.delay(datetime(2013, 1, 1, 2)) # for example
                  

                  日程安排程序设置:

                  CELERYBEAT_SCHEDULE = {
                     'installer_recalc_hour': {
                          'task': 'stats.installer.tasks.recalc_last_hour',
                          'schedule': 15  # every 15 sec for test
                      },
                  }
                  CELERYBEAT_SCHEDULER = "djcelery.schedulers.DatabaseScheduler"
                  

                  运行工作进程:

                  python manage.py celery worker -c 1 -Q celery_periodic -B -E
                  

                  此方案未按预期工作:此工作进程将定期任务发送到"celery"队列,而不是"celery_periical"。我如何修复它?

                  P.S.芹菜==3.0.16

                  推荐答案

                  我找到了此问题的解决方案:

                  1)首先,我更改了周期性任务的配置方式。我使用了这样的@PERIONIC_TASK修饰符:

                  @periodic_task(run_every=crontab(minute='5'),
                                 queue='celery_periodic',
                                 options={'queue': 'celery_periodic'})
                  def recalc_last_hour():
                      dt = datetime.utcnow()
                      prev_hour = datetime(dt.year, dt.month, dt.day, dt.hour) 
                                  - timedelta(hours=1)
                      log.debug('Generating task for hour %s', str(prev_hour))
                      recalc_hour.delay(prev_hour)
                  

                  2)我在@periical_task的参数中写了两次celery_periical

                  • queue=‘celery_periodic’选项在您从代码(.Delay或.Apply_Async)调用任务时使用

                  • options={‘queue’:‘celery_periical’}选项在芹菜节拍调用时使用。

                  我确信,如果您使用CELERYBEAT_SCHEDUE变量配置定期任务,同样的事情也是可能的。

                  更新。此解决方案适用于CELERYBEAT_SCHEDULER的基于数据库和基于文件的存储。

                  这篇关于芹菜中如何向特定队列发送周期性任务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:Python命令行界面中的制表符完成-如何捕获制表符事件 下一篇:在Django中调用.Delay()后,芹菜任务挂起

                  相关文章

                  <small id='uy31N'></small><noframes id='uy31N'>

                2. <tfoot id='uy31N'></tfoot>
                        <bdo id='uy31N'></bdo><ul id='uy31N'></ul>
                      <legend id='uy31N'><style id='uy31N'><dir id='uy31N'><q id='uy31N'></q></dir></style></legend>

                    1. <i id='uy31N'><tr id='uy31N'><dt id='uy31N'><q id='uy31N'><span id='uy31N'><b id='uy31N'><form id='uy31N'><ins id='uy31N'></ins><ul id='uy31N'></ul><sub id='uy31N'></sub></form><legend id='uy31N'></legend><bdo id='uy31N'><pre id='uy31N'><center id='uy31N'></center></pre></bdo></b><th id='uy31N'></th></span></q></dt></tr></i><div id='uy31N'><tfoot id='uy31N'></tfoot><dl id='uy31N'><fieldset id='uy31N'></fieldset></dl></div>