Python 第五阶段 学习记录之----rabbmit
消息服务器rabbmit
RabbitMQ 消息队列
python里有两个Q, threading queue、不同线程间数据交互
进程Queue: 不同进程间交互这个说法是错误的。 这个是用于父进程与子进程间交互、或者同属于同一父进程下多个子进程进行交互。
两个python程序的进程间是无法通信的。
各个独立进程间通信:
QQ 要发送消息给 world。1、通过socket,这个需要自己去写很多东西(沾包、收到的是什么需要返回的又是什么……) 。2、消息队列,
那两个不同的程序要通信、两台机器要通信?
消息队列: 可以跟各种进程通信、且不用再去写什么沾包啊之类的
zeromq\activemq 这些都是消息队列
很多事件需要自己去体验一下。
Rabbitmq: erlang开发的
发消息:轮询
消息发出去了、需要确认吗? 还是发出去就完了,管你的。
大部份情况都需要回发一下处理完的消息。。万一处理过程中、挂了怎么办?发送端没收到回复是吧
挂了,socket断了,发送端自然知道、这消息立马就重新发给另一个在线的接收端。
no_ack=False# 需要收到了回应才放弃这条消息
回应保证的是:客户端、接收消息端挂掉 channel.basic_ack()
持久化: 保证的是,服务器挂掉之后
Rabbitmq安装:
需要安装好环境:erlang
brew install rabbitmq
看例子:
import time
import pika
import uuid class MyRabbmit(object):
def __init__(self):
self.connection = pika.BlockingConnection(pika.ConnectionParameters(
"localhost"
))
self.channel = self.connection.channel()
# self.channel.queue_declare(queue="rpc_queue")
result = self.channel.queue_declare(exclusive=True)
self.callback_queue = result.method.queue self.channel.basic_consume(self.on_response,
queue=self.callback_queue,
# no_ack=True
) def on_response(self, ch, method, property, body):
print(property.reply_to)
print(body) self.response = body.decode() def call(self, cmd):
self.response = None
self.uuid = str(uuid.uuid4())
print(self.uuid)
self.channel.basic_publish(exchange="",
routing_key="rpc_queue",
body = cmd,
properties = pika.BasicProperties(
reply_to=self.callback_queue,
correlation_id=self.uuid
)
)
while self.response is None:
time.sleep(0.5)
self.connection.process_data_events()
# print("wait...")
return self.response my_rpc = MyRabbmit()
cmd = input(">>").strip()
if cmd:
result = my_rpc.call(cmd) print("result: ", result)
import os
import pika connection = pika.BlockingConnection(pika.ConnectionParameters(
"localhost"
)) channel = connection.channel()
channel.queue_declare("rpc_queue") def func(cmd):
result = os.popen(cmd).read()
print(result)
return result def on_response(ch, method, property, body):
print(body)
print(property.reply_to, property.correlation_id)
body = func(body.decode())
channel.basic_publish(exchange="",
routing_key=property.reply_to,
body=body
)
ch.basic_ack(delivery_tag=method.delivery_tag) # 回复一下结果 channel.basic_consume(on_response,
queue="rpc_queue",
no_ack=False,
) print("等待收消息...")
channel.start_consuming()
Python 第五阶段 学习记录之----rabbmit的更多相关文章
- Python 第五阶段 学习记录之---Django 进阶
Model 一.创建表 1.基本结构 字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bi ...
- Python 第五阶段 学习记录之---Django 基础
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...
- Python 第五阶段 学习记录之--- Web框架
什么是web服务器的原理是什么 Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env pyt ...
- Python 第五阶段 学习记录之----ORM
ORM: orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型的,为了 ...
- Python 第八阶段 学习记录之---算法
算法(Algorithm): 一个计算过程, 解决问题的方法 1.递归的两个特点 - 调用自身 - 结束条件 时间复杂度 - 时间复杂度是用来估计算法运行时间的一个式子(单位) - 一般来说,时间复杂 ...
- python 第四阶段 学习记录之----异步
异步: 知识情况: 1.多线程, 多线程使用场景 1.IO操作不占CPU,读写数据(网络中.系统中) 2.计算占CPU, 3.上下文切换不占CPU.它消耗资源 python多线程 不适合CPU密集型的 ...
- Python 第四阶段 学习记录之----多线程
多线程 多线程例子, 注释部份即为多线程的使用 #-*- coding: utf-8 -*- # Wind clear raise # 2017/3/5 下午2:34 import socket im ...
- python+selenium 自动化测试框架-学习记录
本人小白一枚,想着把学习时的东西以博客的方式记录下来,文章中有不正确的地方请大佬多多指点!!共同学习 前期准备 安装python3.selenium.下载对应版本的webdriver:安装所需的第三 ...
- python pep8编码风格学习记录(转)
简要归纳 每个缩进层级使用4个空格. 每行最多79个字符. 顶层的函数或类的定义之间空两行. 采用ASCII或UTF-8编码文件 在文件顶端,注释和文档说明之下,每行每条import语句只导入一个模块 ...
随机推荐
- 如何让linux的history命令显示时间记录
在.bashrc文件追加如下内容即可: HISTFILESIZE= HISTSIZE= HISTTIMEFORMAT='%F %T ' export HISTTIMEFORMAT
- Java Spring MVC 错误 及 常见问题 总结
[参考]spring入门常见的问题及解决办法 错误: 从Git新获取项目 运行出现 1.org.springframework.beans.factory.BeanDefinitionStoreExc ...
- Python连接Mssql
此篇使用的是Python3.6 下载pymssql包 打开网址http://www.lfd.uci.edu/~gohlke/pythonlibs/ 用pip安装whl文件.在cmd中输入 pip in ...
- 库存秒杀问题-redis解决方案- 接口限流
<?php/** * Created by PhpStorm. * redis 销量超卖秒杀解决方案 * redis 文档:http://doc.redisfans.com/ * ab -n 1 ...
- 基金 、社保和QFII等机构的重仓股排名评测
基金前15大重仓股持仓股排名 基金重仓前15大个股,相较于同期沪深300的平均收益, 近1月:2.45%, 近3月:10.0%, 近1年:11.22%, 近3年:105.23%. 1,中国平安(SH6 ...
- 【Py-Github】根据条件筛选Github repo的例子
条件: language:python commits:>100 contributors:>2 stars:>5 fork:0 实现: from github import Git ...
- 阿里云申请免费https证书 + IIS服务器安装
参考: 阿里云免费SSL证书申请与安装使用(IIS7)
- a排兵布阵
来源hdu1166 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵 ...
- 浏览器打开exe文件
<win-r> regedit 打开注册表,然后自定义协议 自定义协议注册表.reg 打开后导入 Windows Registry Editor Version 5.00 [HKEY_CL ...
- wamp 进入到项目中找不到localhost
重点在 www 目录的 index.php 里面,把里面没有第一句没有被注释的话: $suppress_localhost = true; 改成 $suppress_localhost = false ...