29

EclipseデバッガーからCeleryタスクをデバッグする必要があります。私はEclipse、PyDev、Djangoを使用しています。

まず、Eclipseでプロジェクトを開き、タスク関数の先頭にブレークポイントを設定します。

次に、PyDevパッケージエクスプローラーからmanage.pyを右クリックし、[Debug As]-> [Python Run]を選択し、引数として[celeryd -l info]を指定して、EclipseからCeleryワーカーを起動します。これにより、MainThread、Mediator、およびEclipseデバッガーから見えるさらに3つのスレッドが起動します。

その後、PyDevビューに戻り、プロジェクトを右クリックして[Run As / PyDev:Django]を選択してメインアプリケーションを起動します。

私の問題は、タスクがmytask.delay()によって送信されると、ブレークポイントで停止しないことです。タスクコードにいくつかのトレースを入れて、ワーカースレッドの1つで実行されたことを確認します。

では、Eclipseデバッガーを、Celeryワーカースレッドで実行したときにタスクとともに配置されたブレークポイントで停止させるにはどうすればよいでしょうか。

4

5 に答える 5

47

セロリタスクをメインプロセスと同じスレッドで実行するオプションを検討する必要があります(通常は別のプロセスで実行されます)。これにより、デバッグがはるかに簡単になります。

この設定をsettings.pyモジュールに追加することで、タスクを同期して実行するようにceleryに指示できます。

CELERY_TASK_ALWAYS_EAGER  = True
# use this if you are on older versions of celery
# CELERY_ALWAYS_EAGER = True 

注:これは、デバッグまたは開発段階でのみ使用することを目的としています。

于 2012-10-03T09:31:41.007 に答える
25

あなたはCeleryのrdbを使ってそれをすることができます:

from celery.contrib import rdb
rdb.set_trace()

次に、別の端末タイプtelnet localhost 6900で、デバッグプロンプトが表示されます。

于 2016-04-18T09:53:00.677 に答える
5

CELERYD_POOLのデフォルトcelery.concurrency.prefork:TaskPoolでは、ワーカーごとに個別のプロセスが生成され、PyDevはその内部を確認できません。スレッドオプションの1つに変更すると、デバッガーを使用できます。

たとえば、Celery 3.1の場合、次の設定を使用できます。

CELERYD_POOL = 'celery.concurrency.threads:TaskPool'

これには、スレッドプールモジュールがインストールされている必要があることに注意してください。

また、を持っていることを確認してCELERY_ALWAYS_EAGER = Falseください。そうでない場合、プールクラスを変更しても意味がありません。

于 2013-07-23T20:50:42.433 に答える
1

タスクをテストするための管理コマンドを作成します。シェルから実行するよりも簡単です。

于 2013-11-15T10:22:37.910 に答える
-1

別のスレッドでのみ実行される場合は、最新のPyDevバージョンで動作するはずです(以前は、生成されたスレッドがデバッグされないという問題があったと思いますが、これは修正されました)。

これで、別のプロセスで起動する場合は、リモートデバッガーを使用する必要があります(同じマシン上にある場合でも)。参照: http: //pydev.org/manual_adv_remote_debugger.html

于 2012-10-18T19:33:54.293 に答える