Celery 的异步替换
Posted
技术标签:
【中文标题】Celery 的异步替换【英文标题】:Asynchronous replacement for Celery 【发布时间】: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。我解决了这个问题,现在一切正常。您可以在下面写下答案(就像您的第一条评论一样),我会接受。
【参考方案1】:
Zeromq 可能适合您的用例。
见-https://serverfault.com/questions/80679/how-to-pick-between-rabbitmq-and-zeromq-or-something-else
但是,您需要编写自己的消息库来保存消息。
【讨论】:
这和“写我自己的任务系统”是一样的。 ZeroMQ 是一个用于在应用程序之间发送消息的低级库,而不是分布式任务队列。【参考方案2】:你试过用 Celery + eventlet 吗?它在我们的项目中运行良好
【讨论】:
以上是关于Celery 的异步替换的主要内容,如果未能解决你的问题,请参考以下文章