celery中的生产者消费者问题

在task1.py文件中:

# demo1:task.py and celery.py in one file
# run it by
from celery import Celery
import time

# 定义worker(消费者),并指定broker和backend(共享缓冲区)
# 每启动一个woker就相当于创建一个消费者(启动woker方法:celery -A 创建app的语句所在的文件名)
# 给woker指定queue的方法:
# 1、启动woker时-Q指定创建的这个消费者要从共享缓冲区中哪个队列中取出产品并消费
# 2、如果没有指定queue,则启动的woker默认从共享缓冲区的default队列中取出产品并消费
# 注意:两个不同的woker监听共享缓冲区中的同一个队列会出错(避免出错的方法:给启动的每个woker用-Q指定要监听的队列,并用@...(queue='')的方法给要在使用该woker处理的task函数指定相同的放入的队列)

app2=Celery('task2_app2',broker='redis://127.0.0.1:6379/0',backend='redis://127.0.0.1:6379/0')

# 定义task(生产者)
# 在程序执行过程中,每调用一次add.delay就相当于生产者生产一个产品并放入共享缓冲区
@app2.task(queue='queue2')# 指定该生产者生产的产品要放入共享缓冲区中的哪个队列
# 给task指定queue的方法:
# 1、此处是直接给task指定了queue
# 2、也可以采用给task命名,然后在app.conf.update中定义name与queue的对应规则来批量给多个task指定对应的queue。
# 3、如果没有指定,则默认将task放入共享缓冲区中名为default的队列中
def add(x,y):
print('running ',x,'+',y)
print(x+y)
time.sleep(10)
return x+y

生产者:应用程序

生产动作:调用add.delay()

共享缓冲区:broker和backend

消费者:每个woker都是一个消费者

消费动作:woker启动后会自动监听并从broker中取出任务并执行(消费)

创建消费者:celery -A task1 worker -l info

(开启worker的实质实际上就是执行app=Celery(...)语句,可以使用 –-concurrency=个数 来限制每个消费者可以并行的线程数)

celery中的生产者消费者问题的更多相关文章

  1. Python中的生产者消费者模型

    ---恢复内容开始--- 了解知识点: 1.守护进程: ·什么是守护进程: 守护进程其实就是一个‘子进程’,守护即伴随,守护进程会伴随主进程的代码运行完毕后而死掉 ·为何用守护进程: 当该子进程内的代 ...

  2. Java设计模式—生产者消费者模式(阻塞队列实现)

    生产者消费者模式是并发.多线程编程中经典的设计模式,生产者和消费者通过分离的执行工作解耦,简化了开发模式,生产者和消费者可以以不同的速度生产和消费数据.这篇文章我们来看看什么是生产者消费者模式,这个问 ...

  3. Java 多线程学习笔记:生产者消费者问题

    前言:最近在学习Java多线程,看到ImportNew网上有网友翻译的一篇文章<阻塞队列实现生产者消费者模式>.在文中,使用的是Java的concurrent包中的阻塞队列来实现.在看完后 ...

  4. java 多线程并发系列之 生产者消费者模式的两种实现

    在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题.该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度. 为什么要使用生产者和消费者模式 在线程世界里,生产者就是生产数据 ...

  5. python多线程编程-queue模块和生产者-消费者问题

    摘录python核心编程 本例中演示生产者-消费者模型:商品或服务的生产者生产商品,然后将其放到类似队列的数据结构中.生产商品中的时间是不确定的,同样消费者消费商品的时间也是不确定的. 使用queue ...

  6. Java 实现生产者 – 消费者模型

    转自:http://www.importnew.com/27063.html 考查Java的并发编程时,手写“生产者-消费者模型”是一个经典问题.有如下几个考点: 对Java并发模型的理解 对Java ...

  7. 生产者消费者代码学习,Producer_Consuner

    使用BlockingQuery实现生产者者消费者:考虑并发,解耦. 生产者消费者模式是面向过程的设计模式. 生产者制造数据   ------> 生产者把数据放入缓冲区  -------> ...

  8. Celery 框架学习笔记(生产者消费者模式)

    生产者消费者模式 在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类.函数.线程.进程等).产生数据的模块,就形象地称为生产 ...

  9. celery生产者-消费者

    Celery是一个简单,灵活,可靠的分布式系统,用于处理大量消息,同时为操作提供维护此类系统所需的工具. 它是一个任务队列,专注于实时处理,同时还支持任务调度. celery解决了什么问题: 示例一: ...

随机推荐

  1. tit.Atitit. http 代理原理  atiHttpProxy  大木马 h

    Atitit. http 代理原理  atiHttpProxy  大木马 1. 面这张图可以清晰地阐明HttpProxy的实现原理:1 2. 代理服务器用途1 3. 其中流程具体如下:2 4. 设计规 ...

  2. 李洪强详细介绍SDWebImage

    SDWebImage是一个开源的第三方库,它提供了UIImageView的一个分类,以支持从远程服务器下载并缓存图片的功能.它具有以下功能: 提供UIImageView的一个分类,以支持网络图片的加载 ...

  3. cocos2dx位图字体bitmapfont使用

    参考此文,http://www.cocos2dres.com/post/87.html 在cocosbuilder里使用时有几个注意事项 1.中文保存时选择unicode 2.导出时选择 text 3 ...

  4. ZABBIX监控原理

    zabbix实现原理及架构详解   想要用好zabbix进行监控,那么我们首要需要了解下zabbix这个软件的实现原理及它的架构.建议多阅读官方文档. 一.总体上zabbix的整体架构如下图所示: 重 ...

  5. Django - 安装filebrowser发生Error finding Upload-Folder错误

    Error finding Upload-Folder (site.storage.location + site.directory). Maybe it does not exist? 解决: F ...

  6. Unity3D GUI图形用户界面系统

    1.skin变量 using UnityEngine; using System.Collections; public class Skin : MonoBehaviour { public GUI ...

  7. 【vijos】1286 座位安排(状压dp)

    https://vijos.org/p/1286 这题好神不会捉... 首先我们知道所有情况有C(n*m, k)种,这个好搞.但是两两不相邻这个有点难搞.. 原来是状压dp..sigh. 设状态f[i ...

  8. 使用StringTokenizer分解字符串

    Java切割字符串.一般使用substring.split.StringTokenizer来处理,前两种是String对象的方法,使用字符串能够直接处理,本文介绍下StringTokenizer的使用 ...

  9. CentOS7.1 安装Liberty之环境准备(1)

    一.基础平台 1.一台装有VMware的windows系统(可联网) 2.CentOS 7.1 64bit镜像 二.最小化安装两台CentOS 7.1 的虚拟机controller.compute1, ...

  10. .net泛型通用函数的特殊问题的解决方法

    自从2.0版本的net framework推出之后泛型(Generic)得到了广泛好评.它不必像object类型一样性能上因为“拆箱”或者“装箱”得到损失,同时在编译语法检测阶段就可以实时检测出传入或 ...