How do I enable remote celery debugging in PyCharm

2019-02-01 15:35发布

I'm trying to find some instructions on how to enable PyCharm debugging within my celery processes on a remote machine. The remote machine is running Ubuntu 14.04.

I am running PyCharm 4.x.

I've seen some other information that alludes others have it working, but haven't been able to locate any proper instructions.

5条回答
Lonely孤独者°
2楼-- · 2019-02-01 16:02

My working configuration:

  • Script: /home/app/env/bin/celery
  • Script parameters: worker -B -n qrc -Q qrc -l info --app=backend.celery

    • Where -B is for celerybeet, -n is node name, -Q is queue name, -l is log level, and --app is the app name, a django app with celery.py next to settings.py in my case.
  • Working directory: /home/app/server/ ie my django root folder

查看更多
闹够了就滚
3楼-- · 2019-02-01 16:03

Unfortunately, most solutions don't work on Windows. (There was a separate question specifically about that, but unfortunately it got closed as a duplicate of this one. So I'll answer that question here now.)

The problem is that on Windows, the standalone celery command is a batch file, so PyCharm cannot attach the Python debugger to it.

Up until Celery 3.x, you can create a manage.py run configuration and call the celery worker command on it.

Screenshot of PyCharm run configuration for running manage.py celery worker

Note that you don't need to set --app here, as the application is defined by the management command via DJANGO_SETTINGS_MODULE.

Unfortunately, the celery management command was a feature of the django-celery library, which isn't supported by Celery 4.x. As of yet, I haven't found a solution for Celery 4.x.

查看更多
孤傲高冷的网名
4楼-- · 2019-02-01 16:05

You can have a Run Configuration to run your celery workers which then allows you to debug simply by clicking the debug button. Here is how I set that up in PyCharm 5:

pycharm celery

You need to set up a remote python interpreter and then set other configs like the image above. Note that the Working directory is pointing to the bin folder of the remote interpreter with celery installed.

查看更多
虎瘦雄心在
5楼-- · 2019-02-01 16:08

I'm using PyCharm 2017 and had to do something very similar to the answers above, but I specifically had to put the full/absolute path name to celery in the "Script" field

Also, I'm not sure if PyCharm 4 has this feature, but newer versions allow you to attach directly to a running python process by going to Run > Attach to Local Process...

This allows you to run celery however you were before (in the terminal, perhaps) then allow Pycharm to take over

查看更多
迷人小祖宗
6楼-- · 2019-02-01 16:15

Just add the following config:

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

Doing so makes celery execute in the same thread as the currently executing thread.

查看更多
登录 后发表回答