0

我一直在阅读很多关于队列的内容,并且让自己感到困惑。我只会记下我所知道的,如果我理解正确,请告诉我。

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

这些队列的流行解决方案提供商是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) 并且应该执行。这是灰色地带。请帮忙。

感谢您的回答。

4

1 回答 1

0

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

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

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

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

于 2013-08-13T11:27:50.680 回答