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 的异步替换的主要内容,如果未能解决你的问题,请参考以下文章

celery:celery介绍架构基本使用,celery执行异步任务延迟任务定时任务,django中使用celery。

Celery异步任务框架

celery异步发送短信

python—Celery异步分布式

Celery+Rabbitmq实现异步任务

理论python使用celery异步处理请求