【发布时间】:2012-11-01 20:19:07
【问题描述】:
我们在 Django 项目中使用 Celery 执行后台任务。 不幸的是,我们在任务中有许多阻塞套接字,可以建立很长时间。所以 Celery 变得满载并且没有响应。
Gevent 可以帮助我处理套接字,但 Celery 仅对 gevent 提供实验性支持(而且我在实践中发现,它不能很好地工作)。 所以我考虑切换到另一个任务队列系统。
我可以选择两种不同的方式:
- 编写我自己的任务系统。这是最不受欢迎的选择,因为它需要很多时间。
- 为 Celery 寻找良好且经过充分尝试的替代品,该替代品将在猴子修补后起作用。
是否有任何 Celery 的类似物,即使在突然退出后也能保证我执行任务?
【问题讨论】:
-
我认为 Celery 中的 eventlet 支持可能经过更多测试,但许多在生产中运行 Celery+gevent,因此您遇到的问题很可能源于您自己的代码。
-
@asksol 你能给我在 Celery 中集成 gevent 和猴子补丁的文档吗?
-
怎么样?使用
-P gevent,工人已经被修补 -
@asksol 我已经测试过了。我们使用django-celery,通过manage.py运行worker,所以在celery初始化之前需要gevent-patch。我解决了这个问题,现在一切正常。您可以在下面写下答案(就像您的第一条评论一样),我会接受。
标签: python django asynchronous celery gevent