【问题标题】:Django Celery FIFODjango 芹菜先进先出
【发布时间】:2012-11-27 20:50:47
【问题描述】:

所以我将这 2 个应用程序与 REST API(json 消息)连接起来。一个用 Django 编写,另一个用 Php 编写。我在两边都有一个精确的数据库副本(使用 mysql)。

当我在其中一个上按“提交”时,我希望将该数据保存在当前应用程序数据库中,并使用 celery/redis 启动一个 cron 作业,以使用 rest 更新另一个应用程序的远程数据库。

我的问题是,我如何将同一个工人分配给我的任务以保持先进先出顺序?

我需要我的数据保持一致,FIFO 真的很重要。

好的,我将进一步详细说明我想做的事情:

所以我有这个 django 应用程序,当我在填写表格后按下提交时,我的 celery 工作人员醒来并负责处理提交的数据并将其发布到远程服务器。我可以毫无问题地做到这一点。

现在,假设我的互联网在那个确切时间出现故障,我的 celery 工作人员不断重试发送,直到成功但假设我在提交之前的数据之前再次提交,我的数据在其他远程服务器上将不一致.

现在这是我的问题。我无法使用 celery 提供的重试选项将此请求设为 FIFO,所以我需要一些帮助来解决这个问题。

【问题讨论】:

  • 他们不能只共享数据库/使用 mysql 复制吗?
  • 您只需使用一个工作进程即可实现 FIFO 式执行。
  • 我如何强制它只使用 1 个工作进程?
  • 不,我必须通过 REST 进行复制,而不是直接共享数据库
  • “必须复制而不是休息”听起来像是沉没成本谬误。

标签: django redis celery fifo


【解决方案1】:

这是我从另一个论坛得到的答案:

在 celery 中使用命名队列: http://docs.celeryproject.org/en/latest/userguide/workers.html#queues

使用单个工作人员启动工作进程: http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html#starting-the-worker-process

设置此工作者从适当的队列消费: http://docs.celeryproject.org/en/latest/userguide/workers.html#queues-adding-consumers

对于先进先出部分,我可以在发送请求之前按先进先出顺序对我的芹菜经纪人进行排序

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多