簡體   English   中英

如何告訴芹菜工作者停止接受任務? 如何檢查芹菜工作者任務是否正在運行?

[英]How do I tell celery worker to stop accepting tasks? How can I check if any celery worker tasks are running?

場景:

  • 使用Celery在由Python / Flask Web應用程序和后台任務組成的服務器上運行的系統
  • Web應用程序和celery工作者均作為新貴工作運行(Nginx后面的Web應用程序)
  • 使用以下腳本完成生產部署:

    • 停止暴發戶工作
    • 將代碼推送到服務器
    • 運行任何數據庫遷移
    • 開始暴發戶工作

如何增強部署腳本,以便執行以下操作?:

  • 告訴芹菜工人停止接受任務
  • 等待直到當前正在運行的芹菜任務完成
  • 停止暴發戶工作
  • 將代碼推送到服務器
  • 運行任何數據庫遷移
  • 開始暴發戶工作

作為部署的一部分運行的以下腳本解決了該問題:

import time
from celery.app.control import Control
from myapp.tasks import celery # my application's Celery app

if __name__ == "__main__":
    control = Control(celery)
    control.cancel_consumer("celery") # queue name, must probably be specified once per queue, but my app uses a single queue

    inspect = control.inspect()
    while True:
        active = inspect.active()
        running_jobs = []
        for key, value in active.items():
            running_jobs.extend(value)
        if len(running_jobs) > 0:
            print("{} jobs running: {}".format(len(running_jobs), ", ".join(job["name"] for job in running_jobs)))
            time.sleep(10)
        else:
            print("No running jobs")
            break

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM