【问题标题】:understanding how queues(celery etc.) work?了解队列(芹菜等)如何工作?
【发布时间】:2013-08-13 10:57:37
【问题描述】:

我已经阅读了很多关于队列的内容,但我自己也很困惑。我只会记下我所知道的,如果我理解正确,请告诉我。

队列基本上可以帮助您完成请求-响应周期之外的事情。意思是,如果客户上传了一张图片,并且您想保存图片的缩略图版本,您不想让客户等待图像被修剪的时间,然后返回给他,您可以这样做请求-响应循环,通过队列。队列几乎就像传统的数据结构队列一样,是先进先出的。

这些队列的流行解决方案提供商是 celerypyres 和 amazon sqs。

队列是如何工作的?

通常有一个守护进程正在运行,例如,如果有 celery,那么就有一个 celery 守护进程在运行,并继续对队列顶部的任何任务进行计算。 (希望我是对的)

另一个例子,有点复杂,请指正。

现在说我想自动化以下任务:

  1. 在 12 月 25 日给我的朋友发一封邮件。

  2. 祝朋友在 12 月 26 日生日快乐。

  3. 祝另一位朋友在 12 月 26 日生日快乐。

在这种情况下,我将执行以下操作:

  1. 创建一个条目,并在数据库中。

  2. 创建条目后,将该条目排队。

  3. 解雇一个工人,它将执行该任务。

现在有个疑问,第 3 步是否正确?

是否有一个长的投票工作人员,它将采取行动? 这是如何运作的?我很困惑。还是我需要有一个 cron 作业,正在运行,这将继续触发一个脚本 检查队列中是否有任何东西,在给定的时间内(以分钟为精度)如果是,则解雇工人。

当您查看 celery 的文档时,他们需要一个后端 - redis、mongodb、sqs 等。因此,如果我是对的,将会有一个连续的进程作为守护进程运行,并跟踪事物在队列中(redis,mongodb)并且应该执行。这是灰色地带。请帮忙。

感谢您的回答。

【问题讨论】:

    标签: rabbitmq celery message-queue resque amazon-sqs


    【解决方案1】:

    有两种使用 Celery 的基本方法。假设您使用的是 Celery+Rabbitmq

    1. 执行长时间运行的任务(>您不想让客户端等待工作完成。) 您可以从 Web 请求中执行的代码运行 celery 任务。这意味着您的任务将序列化为消息,并将发送到兔子服务器的队列。 其他进程(芹菜进程),有一个消费者,当消息进入队列时将初始化。 Celery worker 获取此消息,对其进行反序列化,然后在其他线程中执行您的任务。就是这样。

    2. 您可以通过 cron 启动您的 Celery 作业(它只是更改了为 Celery 创建任务的发件人,但所有其他事情都相同)

    附言如果你使用的不是 RabbitMq,比如 Database,Memcached 作为 Broker。 Celery 将每 N 秒或毫秒读取一次。等等

    【讨论】:

      猜你喜欢
      • 2014-06-09
      • 2023-04-08
      • 1970-01-01
      • 2014-11-24
      • 2019-09-03
      • 2017-07-27
      • 1970-01-01
      • 2016-04-14
      • 2019-12-29
      相关资源
      最近更新 更多