首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何调试Eclipse中本地运行的Celery/Django任务

如何调试Eclipse中本地运行的Celery/Django任务
EN

Stack Overflow用户
提问于 2012-10-03 04:57:24
回答 5查看 21.2K关注 0票数 29

我需要从Eclipse调试器中调试芹菜任务。我使用的是Eclipse、PyDev和Django。

首先,我在Eclipse中打开我的项目,并在任务函数的开头放置一个断点。

然后,通过右键单击PyDev Package Explorer中的manage.py,选择"Debug As->Python Run“并指定"celeryd -l info”作为参数,从Eclipse启动Celery工作程序。这将启动MainThread、Mediator和另外三个从Eclipse调试器中可见的线程。

之后,我返回到PyDev视图,通过右键单击项目并选择Run /PyDev:Django来启动主应用程序

我的问题是,一旦任务由mytask.delay()提交,它就不会在断点处停止。我在任务代码中添加了一些跟踪,这样我就可以看到它是在一个工作线程中执行的。

那么,当Eclipse调试器在Celery worker线程中执行任务时,如何让它在任务所在的断点处停止呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-10-03 17:31:41

您应该考虑在与主进程相同的线程中运行celery任务(通常它在单独的进程上运行),这将使调试变得更容易。

您可以通过将以下设置添加到settings.py模块来告诉celery同步运行任务:

代码语言:javascript
复制
CELERY_TASK_ALWAYS_EAGER  = True
# use this if you are on older versions of celery
# CELERY_ALWAYS_EAGER = True 

注意:这仅用于调试或开发阶段!

票数 45
EN

Stack Overflow用户

发布于 2016-04-18 17:53:01

你可以使用Celery的rdb来做这件事

代码语言:javascript
复制
from celery.contrib import rdb
rdb.set_trace()

然后,在不同的终端中键入telnet localhost 6900,您将得到调试提示符。

票数 24
EN

Stack Overflow用户

发布于 2013-07-24 04:50:42

CELERYD_POOL默认为celery.concurrency.prefork:TaskPool,它将为每个工作进程生成单独的进程,并且PyDev看不到它们的内部。如果将其更改为threaded选项之一,则可以使用调试器。

例如,对于Celery 3.1,您可以使用此设置:

代码语言:javascript
复制
CELERYD_POOL = 'celery.concurrency.threads:TaskPool'

请注意,这需要安装threadpool模块。

还要确保拥有CELERY_ALWAYS_EAGER = False,否则更改pool类没有任何意义。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12698212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档