Python-RabbitMQ-RPC(非阻塞版)
服务器端:rpc_server.py
import pika,time connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) channel = connection.channel() channel.queue_declare(queue='rpc_queue') def fib(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fib(n-1) + fib(n -2) def on_request(ch, method, props, body):
n = int(body) print("[.] fib(%s)" % n)
response = fib(n)#斐波那契的执行结果赋值给reponse
#再把得到的消息发回给客户端
ch.basic_publish(exchange='',
routing_key=props.reply_to,
properties = pika.BasicProperties(
correlation_id= \
props.correlation_id
),
body =str(response))
ch.basic_ack(delivery_tag=method.delivery_tag)#确保消息被消费,代表任务完成 #channel.basic_qos(prefetch_count=1)
channel.basic_consume(on_request,
queue='rpc_queue') print(" [x] Awaiting RPC request")
channel.start_consuming()
客户端:rpc_client.py
import pika,sys,uuid
import time class FibonacciRpcClient(object):
def __init__(self): self.connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) self.channel = self.connection.channel() result = self.channel.queue_declare(exclusive=True)
self.callback_queue = result.method.queue#获取queue名字 self.channel.basic_consume(self.on_response,#只要收到就调用on_response()
no_ack=True,
queue=self.callback_queue
) def on_response(self, ch, method, props, body):
if self.corr_id == props.correlation_id:#判断服务器端corr_id和本地corr_id相等,才往下走
self.response = body#response收到body的消息表示response不为空 def call(self, n):
self.response = None
self.corr_id = str(uuid.uuid4())
self.channel.basic_publish(exchange='',
routing_key='rpc_queue',
properties=pika.BasicProperties(
reply_to=self.callback_queue,#指定返回到那个queue
correlation_id=self.corr_id,
),
body=str(n))#传字符串,把30传进来
while self.response is None:
#收到消息,就会触发on_response(),没消息就继续往下走循环
self.connection.process_data_events()#非阻塞版的start_consuming
print("no msg...")#只要走到这,就相当于没消息
time.sleep(0.5)
return int(self.response) fibonacci_rpc = FibonacciRpcClient() print(" [x] Requesting fib(30)")
response = fibonacci_rpc.call(8)
print(" [.] Got %r" % response)
Python-RabbitMQ-RPC(非阻塞版)的更多相关文章
- Python RabbitMQ RPC实现
远程调用方法:R(remote) P(procedure) C(call) 为了说明如何使用RPC服务,我们将创建一个简单的客户端类. 它将公开一个名为call的方法,它发送一个RPC请求和块,直 ...
- Python 命令行非阻塞输入
很久很久以前,系windows平台下,用C语言写过一款贪食蛇游戏,cmd界面,用kbhit()函数实现非阻塞输入.系windows平台下用python依然可以调用msvcrt.khbit实现非阻塞监听 ...
- python subprocess.Popen 非阻塞
1.非阻塞设置subprocess.Popen(args, stdout=subprocess.PIPE,stderr=subprocess.PIPE) def non_block_read(outp ...
- python 并发编程 非阻塞IO模型
非阻塞IO(non-blocking IO) Linux下,可以通过设置socket使其变为non-blocking.当对一个non-blocking socket执行读操作时,流程是这个样子: 从图 ...
- python 简单搭建非阻塞式单进程,select模式,epoll模式服务
由于经常被抓取文章内容,在此附上博客文章网址:,偶尔会更新某些出错的数据或文字,建议到我博客地址 : --> 点击这里 可以看我的上篇文章 <python 简单搭建阻塞式单进程,多进程, ...
- 单片机模块化程序: 单片机AT指令配置模块程序模板(非阻塞版)
拷贝这两个文件到自己的工程 测试1://单片机发送AT+RST\r\n 如果单片机串口接收到OK 或者ready 执行下一条 测试视频: https://qqqqqbucket.oss-cn-bei ...
- 【python】-- RabbitMQ RPC模型
RabbitMQ RPC模型 RPC(remote procedure call)模型说通俗一点就是客户端发一个请求给远程服务端,让它去执行,然后服务端端再把执行的结果再返回给客户端. 1.服务端 i ...
- Python之路-python(rabbitmq、redis)
一.RabbitMQ队列 安装python rabbitMQ module pip install pika or easy_install pika or 源码 https://pypi.pytho ...
- 基于RabbitMQ rpc实现的主机管理
要求: 文件分布: 流程图: import pika import os import socket class Server(object): def __init__(self, queuenam ...
随机推荐
- gcd表(欧几里得定理)
题目:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=797 gcd表 时间限制:1000 ms | 内存限制:65535 KB 难度:3 ...
- boost1.59编译安装
boost 1.59.0编译及使用 1.下载: 网址:http://sourceforge.net/projects/boost/files/boost/1.59.0/ 选择:boost_1_59_0 ...
- 批量删除.svn文件夹、.svn文件
使用svn进行版本控制,每个文件夹下都有.svn文件夹,有些项目在脱离svn版本控制之后,想删除项目中所有的.svn文件夹,可用下面的方法进行快速删除: 1.打开要删除.svn文件的最外层文件夹, ...
- koa 基础(十八)es6中的类、静态方法、继承
1.app.js /** * es6中的类.静态方法.继承 */ // 定义Person类 class Person { constructor(name, age) { /*类的构造函数,实例化的时 ...
- list元素按照日期排序
private static void ListSort(List<AppClassInfoVo> list) { Collections.sort(list, new Comparato ...
- 哨兵模式java实例
/** * 测试Redis哨兵模式 * @author liu */ public class TestSentinels { @SuppressWarnings("resource&quo ...
- 找出所有从根节点到叶子节点路径和等于n的路径并输出
//找出所有从根节点到叶子节点路径和等于n的路径并输出 Stack<Node> stack = new Stack<Node>(); public void findPath( ...
- tensorflow dnn 参考
https://blog.csdn.net/qq_35976351/article/details/80793487
- OpenStack 节点重启后无法联网的问题
问题 五一归来,大量服务器被重启了,其中一台服务器失联了.通过远程桌面登录之后发现服务器的 IP 地址是 "正常" 的,可以 Ping 通自己的 IP,但 Ping 不同网关. 解 ...
- 电脑上不了网,但是能登录QQ 问题解决方案
电脑上不了网,但是能登录QQ 问题解决方案 问题现象 个人电脑连上Wifi,打不开百度等网页,但是能登录QQ. 解决方案 1.打开命令提示对话框(Win+R) 2.输入ipconfig/display ...