Comment on page
调试:Debugging
使用示例:
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
当职程执行到你指定的断点处时,将会打印如下日志信息:
[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:$ telnet localhost 6900
Connected to localhost.
Escape character is '^]'.
> /opt/devel/demoapp/tasks.py(128)add()
-> return result
(Pdb)
为了演示,我们将读取
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
你可以通过执行如下命令为任何工作职程启动一个
rdb
的会话:$ kill -USR2 <pid>
最近更新 3yr ago