Django 后台任务 vs Celery

Bol*_*oze 6 python django task celery background-task

我正在尝试在 django 中执行一些消耗大量时间的任务。为此,我将运行后台任务。

经过一些研发,我找到了两种解决方案:

  • 芹菜与 RabbitMQ。

  • Django 后台任务。

这两个选项似乎都满足标准,但设置 Celery 需要一些工作。现在就第二个选项而言,设置相当简单,而且在相当短的时间内,我可以继续编写后台任务。现在我的问题是,如果我采用第二个选项:

  1. Django 后台任务的执行情况如何?(生产环境中的可扩展性明智)。
  2. 我可以轮询数据库中的任务(一段时间后)以检查任务的状态吗?
  3. Django-Background-tasks 的架构?找不到关于它的架构的任何明确解释(或者我错过了一些资源?)
  4. 再次回到第一点,Django 后台任务在生产中的表现如何。(谈论在产品中使用它的先前经验。)

Nin*_*ker 5

设置 celery 需要工作(虽然在使用 Redis 时更少)。它也是具有近十年投资和广泛行业采用的重要工具。

至于性能,由队列支持的任务系统与由 RDBM 支持的任务系统的扩展行为是很好理解的 - 但可能与您无关,因为“可扩展性”是一个非常主观的术语。该线程为主题和问题提供了一些很好的框架。

比较 GitHub 上的星星(bg tasks 的 3XX 与 Celery 的 13XXX),您应该意识到 Django-Background-tasks 的用户群较小,您可能需要深入了解内部结构和精确机制。这不应该阻止您 - 准备好在没有答案时进行 DIY。


Uma*_*mad 5

  1. Django 后台任务的执行情况如何?- 这将取决于您实施的方式和内容。需要注意的一件事是,Django-background-tasks 基于数据库,其中 celery 可以将 redis/rabbitmq 作为后端,所以很可能我们会在这里看到相当大的性能差异。

  2. 我可以轮询数据库中的任务(一段时间后)以检查任务的状态吗?- 在 celery 中是可能的,也许您可​​以通过检查 django-background-tasks 内部代码找到解决方案。但有一件事是,我们可以中止 celery 任务,这在 Django-Background-tasks 中可能是不可能的

  3. Django-Background-tasks 的架构?找不到关于它的架构的任何明确解释(或者我错过了一些资源?) - 这是一个简单的基于 Django 的项目。你可以看看代码。这似乎很简单。

  4. 再次回到第一点,Django 后台任务在生产中的表现如何。- 未在生产中使用。但是由于Django-Background-tasks 是基于数据库的,并且 celery 可以配置为使用 redis/rabbitmq - 我认为 celery 在这里有一个加分点。

对我来说,这种比较,似乎是将手枪与高端自动机枪进行比较的环节。两者都做同样的工作。但一个简单明了 - 另一个有点复杂但有很多选择和范围。

根据您的用例进行选择。