1

私はPyCharmを使用していますが、デバッガーをセロリワーカープロセスに接続すると、タスクが完了せず、このエラーがコンソールに記録されることに気付きました。

Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named pydevd

このメッセージは、セロリタスクが呼び出されたときにもログに記録されます。

[2013-03-24 05:24:26,336: INFO/MainProcess] Got task from broker: celery.group[91218981-204a-414c-a674-fcd8e2b22d23]

ただし、このタスクが実際に完了することはありません。

これは、PyCharmのpydevdデバッガーをセロリワーカープロセスに接続するために使用される実際のコマンドです。

/home/scottc/venv/myproj/bin/python home/scottc/.IntelliJIdea12/config/plugins/python/helpers/pydev/pydevd.py --multiproc --client 127.0.0.1 --port 60283 --file manage.py celeryd -E -B --loglevel=INFO

PyCharmにデバッガーを接続せずにプロセスを実行するだけでは、ImportErrorメッセージが表示されず、タスクが完了します。

最後に、コードに次のように手動で入力できるため、pydevdがパスに含まれていることがわかります。

from pydev import pydevd
pydevd.settrace('my_host', port=5643, stdoutToServer=True, stderrToServer=True)

デバッガーは正常に接続します。ただし、問題は、いくつかのブレークポイントを設定してPyCharmで「デバッグ」をクリックするよりもはるかに便利ではないことです。

4

2 に答える 2

1

この問題は、セロリとビリヤードをアップグレードしたときに解消されました。

billiard==2.7.3.23
celery==3.0.17
于 2013-03-26T03:11:07.577 に答える
1

セロリをデバッグするために、次の構成を追加する方が簡単だと思います。

from celery import current_app
current_app.conf.CELERY_ALWAYS_EAGER = True
current_app.conf.CELERY_EAGER_PROPAGATES_EXCEPTIONS = True

これにより、セロリは現在実行中のスレッドと同じスレッドで実行されます。

于 2016-08-07T08:20:11.320 に答える