【问题标题】:在没有 CELERY_ALWAYS_EAGER 的情况下调试 Celery 任务
【发布时间】:2022-01-21 15:01:17
【问题描述】:

我遇到了调试链中运行的 Celery 任务的问题。 如果我设置 CELERY_ALWAYS_EAGER 配置,任务将在同一进程上一一运行,并且我能够调试。 但是,当我设置此配置时,出现了另一个问题,我在创建套接字时遇到了问题。

socket.socket(socket.AF_INET,socket.SOCK_RAW,socket.IPPROTO_ICMP)

我收到一个错误:

    _sock = _realsocket(family, type, proto)
    error: [Errno 1] Operation not permitted

我猜这是 CELERY_ALWAYS_EAGER 配置的结果。 我该如何处理这个问题?

【问题讨论】:

    标签: django debugging multiprocessing celery taskscheduler


    【解决方案1】:

    我建议不要使用CELERY_ALWAYS_EAGER,而是在开发机器上的单独选项卡中运行 celery worker,如下所示:

    celery -A proj worker -l INFO

    这样可以避免令人讨厌的计时错误,因为开发和实时设置的行为相同。

    https://docs.celeryproject.org/en/stable/django/first-steps-with-django.html#starting-the-worker-process

    【讨论】:

    • 我仍然无法使用该选项进行调试。没有断点命中。知道为什么吗?
    • 您可能在 manage.py 进程中设置断点,而不是在任务函数内运行代码的 celery 进程中。您可以使用 celery 的 -f 选项指定要登录的日志文件,然后执行 tail -f /tmp/celery.log 之类的操作以查看发生了什么。有关所有选项,请参阅 celery worker --help
    猜你喜欢
    • 1970-01-01
    • 2017-01-24
    • 2019-09-08
    • 2012-12-26
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    相关资源
    最近更新 更多