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. Atitit .h5文件上传

    Atitit .h5文件上传 1. 上传原理1 2. Html1 3. Js2 4. uploadV2.js2 5. upServlet & FileUploadService {3 6. 注 ...

  2. atitit。全局变量的设计与实现 java php的异同

    atitit.全局变量的设计与实现 java php的异同 1. 超级全局(Superglobals)"变量 1 2. 全局变量和"global"关键字 1 3. 更加好 ...

  3. eclipse 启动时使用指定的jdk

    -vmD:/DevPrograms/Java/jdk1.5.0_22/bin/javaw.exe-startupplugins/org.eclipse.equinox.launcher_1.1.1.R ...

  4. 生成ID模板:年月日时分秒+6位自增码

    因为生成订单ID.商品ID 或者什么什么ID的,不想用自增,又怕反复,于是就用  年与日时分秒 + 6位自增码 (共计20位长度)来当作ID 注意:假设你的ID是Long型.就要注意,Long的最大长 ...

  5. js获取网页宽高

    <script> function getInfo() { var s = ""; s += " 网页可见区域宽:"+ document.body. ...

  6. TCP协议的三次握手和四次挥手过程

    TCP是一种面向连接(连接导向)的.可靠的基于字节流的传输层通信协议.TCP将用户数据打包成报文段,它发送后启动一个定时器,另一端收到的数据进行确认.对失序的数据重新排序.丢弃重复数据. 1.TCP/ ...

  7. 如何将git 关联到Pycharm

    一,预置条件 1,安装pycharm 2,安装git 仓库 二,关联步骤 1,打开Pycharm  File | Settings | Version Control | Git 2,配置需要关联的 ...

  8. 解决:eclipse配置Database Connections报错Communications link failure Last packet sent to the server was 0 ms ago

    网上各式各样的问题,不过我的问题在于我开了Proxifier,导致链接localhost的时候被拦截...把Proxifier关了就好了 以后遇到这种问题.连不上数据库啊,连不上本地的服务器啊,先检查 ...

  9. 1.2.2 Loaders - 加载器

    Loaders从Android 3.0引入,它使得在activity或是fragment里进行异步数据加载变得非常简单.Loaders有如下的特性: 它在每个 Activity  和 Fragment ...

  10. 删除Win10的OneDrive

    1.运行 -> gpedit.msc 计算机配置 -> 管理模板 -> Windows组件 -> OneDrive -> 禁止使用OneDrive进行文件储存 -> ...