8

手头的任务:

有一个 MySQL 表,其中用户活动被推送为一行。该活动需要稍后处理。

id    |  activity_type  |  activity_data | creation_time | status
23          EMAIL          {....... }       2013-02-01     UNPROCESSED

没有芹菜的加工:

  • 使用一个脚本来处理 N 条记录,处理它们,然后将已处理记录的状态更新为 PROCESSED。

如何使用 Celery 实现相同的功能,我想使用相同的功能来标记任务而不是使用代理?即任务添加 -> 将 10 个最旧的行添加到状态为 UNPROCESSED 的 mysql 表中,该表也包含与任务相关的数据。

在任务完成时-> 将行标记为已处理。

如何告诉 celery 不是将任务推送到代理上,而是必须从 MySQL 表中检索任务?

我是 Celery 的初学者,因此不了解它的所有功能。不建议使用 MySQL 作为代理,但我想知道可行性。

4

1 回答 1

4

我认为你误解了芹菜的工作方式。您不能只用您自己设计的 MySQL 表替换它的代理 - 好吧,不能不对其源代码进行实质性更改。

代理是 celery 的一个内部部分,它使用它自己的内部格式来跟踪其任务,因此仅使用 MySQL 代理没有固有的优势,因为这是您当前存储执行所需信息的方式任务。

如果您愿意,您仍然可以使用 celery,但您必须编写将用户活动表转换为 celery 任务所需的代码。

但是,我建议先尝试芹菜...

  1. 基本了解如何使用它
  2. 确定它是否是您要实现的目标的良好解决方案

celery 教程开始,看看它是如何开始的。

于 2013-04-16T10:55:28.003 回答