<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Django+Celery 進階:Celery可視化監控與排錯

      一、Celery 命令行工具

      Celery 命令行工具可用去查看Celery的運行狀態。打開一個終端窗口,進入項目目錄(與manage.py同級),運行以下命令

      • 列出集群中在線的Celery Worker節點
      celery -A mysite status
      
      ### 大概10秒后,輸出結果
      ->  celery@DESKTOP-MHHVBI3: OK
      
      1 node online.
      
      • 列出正在執行的Celery 任務
      celery -A mysite inspect active
      
      ### 輸出結果
      ->  celery@DESKTOP-MHHVBI3: OK
          - empty -
      
      1 node online.
      
      • 列出已注冊的Celery 任務
      celery -A mysite inspect registered
      
      ### 輸出結果示例
      ->  celery@DESKTOP-MHHVBI3: OK
          * myapp_infra.tasks.cleanup_expired_data
          * myapp_infra.tasks.send_daily_report
          * myapp_system.tasks.login_log_task
          * myapp_system.tasks.operation_log_task
          * myapp_system.tasks.send_single_mail_task
      
      1 node online.
      
      • 顯示Celery 統計數據
      celery -A mysite inspect stats 
      
      ### 輸出結果示例
      ->  celery@DESKTOP-MHHVBI3: OK
          {
              "broker": {
                  "alternates": [],
                  "connect_timeout": 4,
                  "failover_strategy": "round-robin",
                  "heartbeat": 0,
                  "hostname": "127.0.0.1",
                  "insist": false,
                  "login_method": null,
                  "port": 6379,
                  "ssl": false,
                  "transport": "redis",
                  "transport_options": {},
                  "uri_prefix": null,
                  "userid": null,
                  "virtual_host": "3"
              },
              "clock": "543",
              "pid": 2316,
              "pool": {
                  "implementation": "celery.concurrency.solo:TaskPool",
                  "max-concurrency": 1,
                  "max-tasks-per-child": null,
                  "processes": [
                      2316
                  ],
                  "put-guarded-by-semaphore": true,
                  "timeouts": []
              },
              "prefetch_count": 32,
              "rusage": "N/A",
              "total": {
                  "myapp_infra.tasks.cleanup_expired_data": 3,
                  "myapp_system.tasks.login_log_task": 36
              },
              "uptime": 541
          }
      
      1 node online.
      

      小結:

      • 以上命令支持 --timeout參數,例如在命令后加上--timeout 3
      • 參考資料:Celery 監控

      二、Celery 圖形監控

      Celery Flower 圖形監控

      Celery Flower 是一個用于監控和管理 Celery 任務的開源 Web 應用程序,它提供了實時的任務狀態監控、任務執行圖表、工作者信息、任務追蹤和任務日志等功能。

      安裝

      pip install flower
      

      基本使用

      Celery Flower 服務啟動命令:進入根目錄(包含manage.py文件的目錄)執行

      celery -A mysite flower --port=5555
      

      訪問 http://<IP>:5555 查看Celery 圖形監控

      • 點擊 Workers 查看 Celery Worker 狀態

      image-20250525113618659

      • 點擊 Tasks 查看當前及后來的任務(不會顯示以前的任務)。另外,通過觀察任務列表的變化,判斷 Celery Beat 的狀態是否正常。

      image-20250525110933420

      • 點擊 Broker 查看 Redis 狀態

      image-20250525113632394

      與Django項目集成

      對于Django+Vue3的前后端分離項目,使用iframe(內聯框架) HTML 元素,可將網頁嵌入其他網頁。實現將Celery Flower 集成到Django項目中。

      image-20250716143830162

      點擊查看集成代碼示例

      三、Redis 圖形監控

      Redis一般作為Celery的消息中間件 (Broker),負責接收任務生產者發送的消息并將任務存入隊列。

      安裝工具:Another Redis Desktop Manager,是一個Redis的圖形管理界面工具。下載地址

      解壓即可使用。連接Redis 服務器后,查看celery隊列中的任務數。

      • 如果沒有celery鍵,表示當前沒有等待的Celery任務

      image-20250525104650853

      四、Celery 排錯

      PermissionError權限錯誤

      錯誤信息

      [2025-04-12 22:53:48,435: INFO/MainProcess] Task tasks.add[6d0cc2d2-0a84-4a4d-b5e7-e86a4bd9b625] received
      [2025-04-12 22:53:48,436: ERROR/SpawnPoolWorker-6] Pool process <billiard.pool.Worker object at 0x0000027D686A33D0> error: PermissionError(13, '拒絕訪問。', None, 5, None)
      Traceback (most recent call last):
      

      解決方法

      # 在Windows系統中,prefork 多進程模式可能導致權限沖突。改用單進程模式啟動--pool=solo 
      celery -A tasks worker --loglevel=INFO --pool=solo 
      

      AppRegistryNotReady 錯誤

      錯誤信息

      2025-05-17 18:33:13,886 INFO D:\workspace_python\mars-mgn\mysite\myapp_system\tasks.py changed, reloading.
      Traceback (most recent call last):
      ...
        File "D:\workspace_python\mars-mgn\venv\Lib\site-packages\django\apps\registry.py", line 138, in check_apps_ready
          raise AppRegistryNotReady("Apps aren't loaded yet.")
      django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
      

      解決方法

      • 分析:Celery初始化與Django啟動順序問題:在celery.py中通過app.autodiscover_tasks()自動發現任務時,可能過早加載包含Django模型的任務模塊,而Django的INSTALLED_APPS尚未完全初始化
      • 避免在任務模塊頂部直接導入Django模型。將模型導入操作移至任務函數內部
      # myapp_system/tasks.py
      from celery import shared_task
      from django.core.mail import send_mail
      
      @shared_task
      def send_email_task(subject, message, from_email, recipient_list):
          # 導入操作移至任務函數內部:延遲導入模型和序列化器
          from .mail_log.serializers import MailLogSaveSerializer
          from .models import SystemMailLog
          
          # 發送郵件邏輯
          send_mail(subject, message, from_email, recipient_list)
          return "郵件發送成功"
      

      任務參數

      錯誤信息

      celery.beat.SchedulingError: Couldn't apply scheduled task daily_cleanup_expired_data: cleanup_expired_data() takes 0 positional arguments but 1 was given
      

      解決方法

      • 分析:args 和 kwargs 參數是傳遞給任務。若定義任務時沒有定義接收參數,但卻傳遞了arsg或kwargs參數,則Celery Beat 會報錯
      • 修改任務定義的代碼,然后重啟Celery worker和 beat。

      時區

      建議使用統一的時區,例如全部統一為東八區

      • settings.py 中明確配置
      # 設置 Django 時區
      TIME_ZONE = 'Asia/Shanghai'
      USE_TZ = True
      
      # 配置 Celery 時區
      CELERY_TIMEZONE = 'Asia/Shanghai'
      
      # MySQL數據庫連接字符串中添加時區參數
      DATABASES = {
          "default": {
              "ENGINE": "django.db.backends.mysql",
      		# ...
              "OPTIONS": {"init_command": "SET time_zone='+08:00'"},
          }
      }
      
      • Celery Worker 所在服務器系統時區為
      # 查看系統時區
      timedatectl | grep "Time zone"
      # 設置時區
      timedatectl set-timezone Asia/Shanghai
      

      您正在閱讀的是《Django從入門到實戰》專欄!關注不迷路~

      posted @ 2025-07-16 15:28  小王子1024  閱讀(347)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产一区二区精品偷系列| 久久久久成人片免费观看蜜芽| 国产亚洲精品成人无码精品网站 | 在线天堂www在线| 精品国产污污免费网站入口| 最新国产精品亚洲| 亚洲综合网国产精品一区| 精品国产乱弄九九99久久| 露脸一二三区国语对白| 中文字幕永久精品国产| 国产天美传媒性色av高清| 最新av中文字幕无码专区| 浴室人妻的情欲hd三级国产| 少妇人妻偷人免费观看| 蓝山县| 成人看的污污超级黄网站免费 | 日韩精品无码区免费专区| 国内自拍av在线免费| 欧美成本人视频免费播放| 国产草草影院ccyycom| 亚在线观看免费视频入口| 欧美大胆老熟妇乱子伦视频| 国产一区二区三区黄色片| 国产不卡在线一区二区| 中文字幕乱码视频32| 最新亚洲av日韩av二区| 久久五月丁香合缴情网| 色婷婷日日躁夜夜躁| 国产在线无码不卡播放| 国产精品自在欧美一区| 色综合AV综合无码综合网站| 国模在线视频一区二区三区 | 日本一道一区二区视频| 中文字幕丰满乱子无码视频| 久久精品国产亚洲av亚| 亚洲精品国模一区二区| 精品人妻伦九区久久aaa片69| 国产视频一区二区三区麻豆| 国产亚洲欧美在线观看三区| 少妇人妻偷人精品系列| 国产精品夫妇激情啪发布|