Celery-4.1 用戶指南: Debugging (調試)

遠程調試任務(pdb)


基礎


celery.contrib.rdb 是 pdb 的一個擴展版本,它支持不經過終端訪問就能夠遠程調試進程。python

示例:shell

from celery import task
from celery.contrib import rdb

@task()
def add(x, y):
    result = x + y
    rdb.set_trace()  # <- set break-point
    return result

set_trace() 函數在當前位置設置一個斷點,而且建立一個網絡套接字使得你能夠 telnet 上去進行遠程調試你的任務。網絡

調試器可能被多個進程同時啓動,但調試器不是使用一個固定端口而是從基端口開始尋找一個可用的端口(默認從6900端口開始)。基端口能夠經過環境變量 CELERY_RDB_PORT 進行修改。session

默認狀況下,調試器只在本機可用,要讓它能夠從外面訪問須要設置環境變量 CELERY_RDB_HOSTapp

當工做單元執行到你的斷點,它將打出日下日誌信息:函數

[INFO/MainProcess] Received task:
    tasks.add[d7261c71-4962-47e5-b342-2448bedd20e8]
[WARNING/PoolWorker-1] Remote Debugger:6900:
    Please telnet 127.0.0.1 6900.  Type `exit` in session to continue.
[2011-01-18 14:25:44,119: WARNING/PoolWorker-1] Remote Debugger:6900:
    Waiting for client...

若是你 telnet 到你聲明的端口,你將進入一個 pdb shell:spa

$ telnet localhost 6900
Connected to localhost.
Escape character is '^]'.
> /opt/devel/demoapp/tasks.py(128)add()
-> return result
(Pdb)

鍵入 help 或者可用命令的列表,若是你之前沒有使用過 pdb,你最好先看看python 調試文檔.net

爲了說明問題,咱們讀取 result 變量的值,修改它而且繼續執行任務:調試

(Pdb) result
4
(Pdb) result = 'hello from rdb'
(Pdb) continue
Connection closed by foreign host.

咱們搗亂的結果能夠從工做單元日誌看到:日誌

[2011-01-18 14:35:36,599: INFO/MainProcess] Task
    tasks.add[d7261c71-4962-47e5-b342-2448bedd20e8] succeeded
    in 61.481s: 'hello from rdb'

提示


啓用斷點信號


若是設置了 CELERY_RDBSIG 環境變量,當 SIGUSR2 信號發送時,工做單元將啓動一個rdb實例。對工做單元主進程或者工做進程這都適用。

例如開啓一個工做單元:

$ CELERY_RDBSIG=1 celery worker -l info

你能夠經過給任何工做單元進程發送 USR2 信號開始一個 rdb 會話:

$ kill -USR2 <pid>

 

 轉自:https://blog.csdn.net/libing_thinking/article/details/78603252

相關文章
相關標籤/搜索