Python学习_24 Python开发异步分布式


Python学习_24 Python开发异步分布式
1、消息队列
消息队列是在消息的传输过程中保存消息的容器。
消息队列最经典的用法就是消费者和生成者之间通过消息管道来传递消息,消费者和生成者是不通的进程。生产者往管道中写消息,消费者从管道中读消息。
操作系统提供了很多机制来实现进程间的通信 ,multiprocessing模块就提供了Queue和Pipe两种方法来实现
a、Pipe
Pipe方法返回(conn1,conn2)代表一个管道的两个端,Pipe方法有duplex参数,如果duplex参数为True(默认值),那么这个管道是全双工模式,也就是conn1和conn2均可以收发消息;duplex为False,conn1只负责接受消息,conn2只负责发送消息
b、Queue
常用的方法
Queue只有一个构造参数,用来制定队列容量,制定为0时代表容量无限
q.qsize() 返回队列的大小,返回值不一定可靠
q.empty() 如果队列为空,返回True,反之False,返回值不可靠
q.full() 如果队列满了,返回True,反之False;与 maxsize 大小对应
q.get([block[, timeout]]) 获取队列,timeout等待时间
q.get_nowait() 相当q.get(False) 非阻塞 q.put(item) 写入队列,timeout等待时间
q.put(item, block=True, timeout=None) 往消息队列中存放消息。block可以控制是否阻塞,timeout指定阻塞时候的等待时间。如果不阻塞或者超时,会引起一个full exception。
q.put_nowait(item) 相当q.put(item, False)
q.task_done() 在完成一项工作之后,q.task_done() 函数向任务已经完成的队列发送一个信号
q.join() 实际上意味着等到队列为空,再执行别的操作

例子:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018\5\26 0026 0:22
# @Author  : xiexiaolong
# @File    : demon1.py
from multiprocessing import Queue
q = Queue()
for i in range(10):
    q.put(i)
while not q.empty():
    print(q.get())
结果:
D:\python\venv\Scripts\python.exe D:/python/0524/demon1.py
0
1
2
3
4
5
6
7
8
9

Process finished with exit code 0
2、Celery异步分布式
Celery是一个python开发的异步分布式任务调度模块,其本事不提供消息服务,使用第三方服务,就是borker来传递任务,目前支持rebbimq,redis,数据库等
连接url格式:
redis://
password@hostname:port/db_number
首先安装celery模块,用pip install celery安装
写一个连接redis
from celery import Celery

broker = "redis://myredis@193.112.207.252:6379/2"
backend = "redis://myredis@193.112.207.252:6379/3"
app = Celery("yanzi", broker=broker,backend=backend)
@app.task
def add(x, y):
    return x+y
分析:上述代码导入了celery,然后创建了celery 实例 app,实例化的过程中指定了任务名tasks(和文件名一致),传入了broker和backend。然后创建了一个任务函数add,下面启动celery服务,新建一个文件:
from tasks import add    
r = add.delay(2, 2)    
r = add.delay(3, 3)    
print r.ready()    
print r.result      
print r.get()


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值