python--使用pika库操作rabbitmq实现需求

news2024/11/14 5:59:14
Author: wencoo
Blog:https://wencoo.blog.csdn.net/
Date: 22/04/2024
Email: jianwen056@aliyun.com
Wechat:wencoo824
QQ:1419440391
Details:

文章目录

  • 目录
    • 正文 或 背景
    • pika链接mq
    • pika指定消费数量
    • pika自动消费实现
    • pika获取队列任务数量
    • pika主动获取任务消费
    • 根据需求实现的完整示例代码
    • 参考
  • 技术交流
  • 音视频领域其他技术文章的链接
    • opengl相关文章
    • ffmpeg相关文章
      • ffmpeg原理相关文章
      • ffmpeg源码分析相关文章
      • ffmpeg指令相关文章
      • ffmpeg报错相关文章
    • libass相关文章
    • c/c++相关文章
    • linux相关文章
    • 其他文章
  • 后面都是一些废话,不用看,刷分的
    • 推广一个AI学习网站
    • 中国软件行业倡议书
    • 作者有话说
    • 关于内卷

在这里插入图片描述

目录

正文 或 背景

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

有这样业务场景,算法部的同事有一个算法需要集成,有国内和国外两条链路,使用rabbitmq对应的试两个队列,但是他的算法只能开启一个实例,不能开两个进程,否则计算资源不足会崩溃(此处我想吐槽,做算法这帮人,工资又高,结果工程能力太差啦,所谓的算法也不过把github的开源库拿来改改参数,怎么好意思叫算法,搞不懂现在的中国互联网环境了),基于以上原因,需求则是需要在只开一个实力的情况下,消费两个队列里的任务。

由于算法模型都是python写的,所以要使用python来处理mq,python处理mq的驱动库是pika,下面来学习一下pika一些使用操作。

pika链接mq

import pika
import time


credentials = pika.PlainCredentials('admin', 'Hasx9527')
connection = pika.BlockingConnection(pika.ConnectionParameters(host = '180.184.35.67',port = 5672,virtual_host = '/',credentials = credentials))
channel = connection.channel()

pika指定消费数量

# 可选:指定消费者处理队列消息的数量
channel.basic_qos(prefetch_count=1)  # 实现消费者负载均衡,表示同时只能处理1条消息,待处理完成后在接收下一条消息

pika自动消费实现

def callback(ch, method, properties, body):
    ch.basic_ack(delivery_tag = method.delivery_tag)
    print(body.decode())
    time.sleep(10)

# 可选:指定消费者处理队列消息的数量
channel.basic_qos(prefetch_count=1)  # 实现消费者负载均衡,表示同时只能处理1条消息,待处理完成后在接收下一条消息

# 告诉rabbitmq,用callback来接收消息
channel.basic_consume('test.python.pika.1',callback)
# 开始接收信息,并进入阻塞状态,队列里有信息才会调用callback进行处理
channel.start_consuming()

pika获取队列任务数量

queue_info = channel.queue_declare(queue,passive=True)
message_count = queue_info.method.message_count
print(f"队列任务数量为:{message_count}")

pika主动获取任务消费

method_frame, header_frame, body = channel.basic_get(queue)
if method_frame:
    # print(method_frame, header_frame, body)  # 收到的全部数据  就要body
    print(body)          # 是b'xxx'的格式
    channel.basic_ack(method_frame.delivery_tag)  #用自动应答 这个应该不要
else:
    print('消费单条 没有收到消息')

根据需求实现的完整示例代码

import pika
import time


credentials = pika.PlainCredentials('admin', 'Hasx9527')
connection = pika.BlockingConnection(pika.ConnectionParameters(host = '180.184.35.67',port = 5672,virtual_host = '/',credentials = credentials))
channel = connection.channel()

queue1 = 'test.python.pika.1'
queue2 = 'test.python.pika.2'
def queueConsumer(queueName):
	while True:
		# 申明消息队列,消息在这个队列传递,如果不存在,则创建队列
		queue = queueName
		channel.queue_declare(queue , durable = True)
		# 可选:指定消费者处理队列消息的数量
		channel.basic_qos(prefetch_count=1)  # 实现消费者负载均衡,表示同时只能处理1条消息,待处理完成后在接收下一条消息
		method_frame, header_frame, body = channel.basic_get(queue)
		if method_frame:
			print(body)          # 是b'xxx'的格式
			time.sleep(10)
			channel.basic_ack(method_frame.delivery_tag)  #用自动应答 这个应该不要
		else:
			time.sleep(1)
			break

def queueConsumer2(queueName,queueName2):
	while True:
		# 申明消息队列,消息在这个队列传递,如果不存在,则创建队列
		queue = queueName2
		channel.queue_declare(queue , durable = True)
		queue_info = channel.queue_declare(queueName,durable = True,passive=True)
		message_count = queue_info.method.message_count
		if message_count != 0:
			break

		# 可选:指定消费者处理队列消息的数量
		channel.basic_qos(prefetch_count=1)  # 实现消费者负载均衡,表示同时只能处理1条消息,待处理完成后在接收下一条消息
		method_frame, header_frame, body = channel.basic_get(queue)
		if method_frame:
			print(body)          # 是b'xxx'的格式
			time.sleep(10)
			channel.basic_ack(method_frame.delivery_tag)  #用自动应答 这个应该不要
		else:
			time.sleep(1)
			break

while True:
	print("开始运行队列1================\n")
	queueConsumer(queue1)

	print("开始运行队列2================\n")
	queueConsumer2(queue1,queue2)
	

参考

  • python pika 消费mq basic_get方法
  • python 操作RabbitMq详解
  • python对RabbitMQ的简单使用
  • Python三方库:Pika(RabbitMQ基础使用)

由于笔者的水平有限, 加之编写的同时还要参与开发工作,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果读者有任何宝贵意见,可以加我微信 wencoo824。QQ:1419440391。

技术交流

欢迎加微信,搜索"wencoo824",进行技术交流,备注”博客音视频技术交流“

音视频领域其他技术文章的链接

opengl相关文章

  • opengl日记7-ubuntu20.04开发环境opengl拓展glfw和glad环境搭建
  • opengl日记8-opengl创建三角形
  • opengl日记9-opengl使用纹理示例
  • opengl日记10-opengl使用多个纹理示例
  • opengl日记11-opengl的transformtions变换示例
  • opengl日记12-opengl坐标系统
  • opengl日记19-opengl文字渲染-教程示例
  • opengl日记23-opengl文字渲染-渐变色-教程示例
  • opengl日记25-opengl文字渲染-渲染中文渐变色动画-直线线性运动-教程示例
  • opengl日记26-opengl文字渲染-渲染中文渐变色动画-贝塞尔运动-教程示例
  • opengl日记27-opengl报错ERROR::SHADER::PROGRAM::LINKING_FAILED
  • opengl日记28-opengl之c语言版本的glm库cglm编译使用教程

ffmpeg相关文章

  • ffmpeg学习日记1-ffmpeg的基本介绍(相关概念理解,资料收集)

  • ffmpeg学习日记2-新建工程打印ffmpeg版本

  • ffmpeg学习日记3-视频格式和视频编码的关系

  • ffmpeg学习日记4-使用ffmpeg获取视频文件属性值

  • ffmpeg学习日记5-使用ffmpeg进行h264解码

  • ffmpeg学习日记8-YUV的几个知识点

  • ffmpeg学习日记11-使用ffmpeg将视频格式转换为视频编码h264格式

  • ffmpeg学习日记17-获取MP4视频流的帧率

  • ffmpeg学习日记19-判断AVPacket中的一帧数据是否为关键帧

  • ffmpeg学习日记21-缓存AVPacket数据

  • ffmpeg学习日记22-内存读取avio_alloc_context函数的内存释放问题

  • ffmpeg学习日记29-使用vscode调试ffmpeg源码

  • ffmpeg学习日记101-视频-MP4提取YUV数据,每一帧保存为pgm图片

  • ffmpeg学习日记121-视频-各种图片转yuv

  • ffmpeg学习日记122-视频-获取视频的解码器,yuv格式名称,理解编码格式,封装格式,yuv格式的关系

  • ffmpeg学习日记122-视频-获取视频的解码器,yuv格式名称,理解编码格式,封装格式,yuv格式的关系

  • ffmpeg日记1011-过滤器-语法高阶,逻辑,函数使用

ffmpeg原理相关文章

  • ffmpeg日记4001-原理介绍-视频切割原理

ffmpeg源码分析相关文章

  • ffmpeg学习日记501-源码-parse_loglevel()函数
  • ffmpeg学习日记502-源码-ffmpeg_parse_options()函数分析
  • ffmpeg学习日记503-源码-transcode()函数分析
  • ffmpeg学习日记504-源码-readme汉化
  • ffmpeg学习日记506-源码-av_image_copy()函数分析及功能
  • ffmpeg学习日记508-源码-ffmpeg --help 汉化
  • ffmpeg学习日记509-源码-从ffmpeg 源码提取编码的流程分析
  • ffmpeg学习日记512-源码-ubuntu20.04下源码编译
  • ffmpeg学习日记513-源码-configure_filtergraph()函数分析及功能

ffmpeg指令相关文章

  • ffmpeg学习日记601-指令-视频裁剪,添加bgm合成mp4
  • ffmpeg学习日记602-指令-转换视频的分辨率
  • ffmpeg学习日记603-指令-获取视频分辨率
  • ffmpeg学习日记604-指令-将视频格式转为H264格式
  • ffmpeg学习日记605-指令-获取视频的总帧数
  • ffmpeg学习日记606-指令-将视频转为全I帧
  • ffmpeg学习日记607-指令-将mp4视频转yuv
  • ffmpeg学习日记612-指令-转换视频格式
  • ffmpeg学习日记612-指令-转换视频格式
  • ffmpeg学习日记614-指令-获取文件时长
  • ffmpeg学习日记619-指令-透明通道视频相关指令

ffmpeg报错相关文章

  • ffmpeg学习日记701-报错-co located POCs unavailable
  • ffmpeg学习日记702-报错-包含‘PRId64‘的报错

libass相关文章

  • libass分析1-源码分析-起源-源码编译
  • libass分析2-源码分析-示例程序test.c的源码分析
  • libass分析3-源码分析-libass中的宏定义分析
  • libass分析5-源码分析-ASS_Track结构体分析,ass文件数据是如何存放的
  • libass分析6-源码分析-ASS_Renderer结构体分析,ass文件数据是如何存放的
  • libass分析8-源码分析-libass处理event中{}的逻辑

c/c++相关文章

  • c/c++专栏

linux相关文章

  • linux专栏

其他文章

  • docker-创建rabbitmq容器指令

后面都是一些废话,不用看,刷分的

推广一个AI学习网站

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

中国软件行业倡议书

精简软件开发,电脑性能越来越好,打出的程序安装包越来越大,磁盘,内存越吃越多,这不是好现象,手机同理,大家觉得呢,欢迎发表看法,各抒己见。

手机app随意读取用户通讯录,就是流氓行为,即使有时候弹窗提示是否授权,选择了否,但是他其实还是悄悄读取你的通讯录,并且随便给你的通讯录好友发推广信息,这一点是非常反感的,并且也触犯了用户的权益,这不仅是流氓行为,更是违法行为,某软件就不说了。

作者有话说

个人简介:多年工作工程经验,擅长linux下软件开发,qt,ffmpeg音视频二次开发。

欢迎各位叨扰作者,如果有什么项目合作,创业合伙需要研发,网站推广,猎头服务,内推等等,尽管来联系,对于能挣钱的事,作者可是很感兴趣的哦。

关于内卷

劝大家一句,不要内卷,内卷只能害了别人,害了自己。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1615997.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

去哪儿网开源的一个对应用透明,无侵入的Java应用诊断工具

今天 V 哥给大家带来一款开源工具Bistoury,Bistoury 是去哪儿网开源的一个对应用透明,无侵入的java应用诊断工具,用于提升开发人员的诊断效率和能力。 Bistoury 的目标是一站式java应用诊断解决方案,让开发人员无需登录机器或修改…

使用大卫的k8s监控面板(k8s+prometheus+grafana)

问题 书接上回,对EKS(AWS云k8s)启用AMP(AWS云Prometheus)监控AMG(AWS云 grafana),上次我们只是配通了EKSAMPAMG的监控路径。这次使用一位大卫老师的grafana的面板,具体地址如下: ht…

Google Ads广告为Demand Gen推出生成式AI工具,可自动生成广告图片

谷歌今天宣布在Google Ads广告中为Demand Gen活动推出新的生成人工智能功能。 这些工具由谷歌人工智能提供支持,广告商只需几个步骤即可使用文本提示创建高质量的图片。 这些由人工智能驱动的创意功能旨在增强视觉叙事能力,帮助品牌在YouTube、YouTube…

【Hadoop】-Apache Hive概述 Hive架构[11]

目录 Apache Hive概述 一、分布式SQL计算-Hive 二、为什么使用Hive Hive架构 一、Hive组件 Apache Hive概述 Apache Hive是一个在Hadoop上构建的数据仓库基础设施,它提供了一个SQL-Like查询语言来分析和查询大规模的数据集。Hive将结构化查询语言(…

第十二届蓝桥杯C/C++ B组 杨辉三角形(二分查找+思维)

3418. 杨辉三角形 - AcWing题库 题目描述: 思路: 从上图片中,我们可以看出来这是一个对称图形,所以我们只看左半部分就可以了,我们一行一列去做数据量是1e9这样会很麻烦,所以我们这里做一个思想转换,斜着…

单片机 VS 嵌入式LInux (学习方法)

linux 嵌入式开发岗位需要掌握Linux的主要原因之一是,许多嵌入式系统正在向更复杂、更功能丰富的方向发展,需要更强大的操作系统支持。而Linux作为开源、稳定且灵活的操作系统,已经成为许多嵌入式系统的首选。以下是为什么嵌入式开发岗位通常…

申请IP地址SSL证书的七大步骤

申请IP地址SSL证书的目的是为了在使用IP地址作为访问地址而非域名的情况下,为您的服务提供HTTPS加密,确保数据传输的安全性。以下是申请IP地址SSL证书的一般步骤和注意事项: 一、选择合适的SSL证书类型: IP SSL证书:…

java锁常识

AQS框架 AQS(AbstractQueuedSynchronizer)是 Java 中用于构建锁和同步器的基础框架。它提供了一种实现同步器的方式,使得开发者可以基于 AQS 构建各种类型的同步工具,如独占锁、共享锁、信号量等。 AQS 主要基于 FIFO 队列&…

RoadBEV:鸟瞰视图下的路面重建

作者:Tong Zhao,Lei Yang,Yichen Xie等 编译:董亚微一点人工一点智能 RoadBEV:鸟瞰视图下的路面重建https://mp.weixin.qq.com/s/hDNHwvpFe39doiXlVc-d7Q 摘要:道路的路面状况,特别是几何轮廓…

线程池多线程在项目中的实际应用

一.发短信 发短信的场景有很多,比如手机号验证码登录注册,电影票买完之后会发送取票码,发货之后会有物流信息,支付之后银行发的付款信息,电力系统的电费预警信息等等 在这些业务场景中,有一个特征&#x…

Linux 网络编程项目--简易ftp

主要代码 config.h #define LS 0 #define GET 1 #define PWD 2#define IFGO 3#define LCD 4 #define LLS 5 #define CD 6 #define PUT 7#define QUIT 8 #define DOFILE 9struct Msg {int type;char data[1024];char secondBuf[128]; }; 服务器: #i…

231 基于matlab的北斗信号数据解析

基于matlab的北斗信号数据解析,多通道和单通道接收到的北斗信号数据,利用接收到的北斗数据(.dat .txt文件),进行解析,得到初始伪距,平滑伪距,载波相位,并计算其标准差&am…

洛谷 -P1007 独木桥(模拟,思维)

独木桥 题目背景 战争已经进入到紧要时间。你是运输小队长,正在率领运输部队向前线运送物资。运输任务像做题一样的无聊。你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景,而你留在桥下欣赏士兵们。士兵们十分愤怒&#xf…

双线性插值计算手动实现以及原理

双线性插值计算手动实现以及原理 代码原理 代码 先贴代码吧,原理其实也比较简单,看代码基本也就理解了,时间太晚了,原理后续再补吧。 import torch from torch.nn import functional as F import numpy as np from itertools im…

苍穹外卖开发笔记(6.缓存商品,购物车)

目录 一、缓存商品2、缓存菜品(redis)1.问题说明2.实现思路3.代码开发 2、缓存套餐(spring cache)1.实现思路2.代码实现 3、测试 二、购物车功能1、添加购物车1.需求分析设计2.代码开发3.测试 2、查看购物车1.需求分析设计2.代码开…

基于TSM模块的打架斗殴识别技术

目 录 1 引言.... 4 1.1 研究背景与意义.... 4 1.2 研究现状综述.... 5 1.3 研究内容.... 6 1.3.1 图像预处理的优化.... 6 1.3.2 TSM模块的应用.... 6 1.3.3 视频分类的设计与实现.... 6 2 关键技术与方法.... 8 2.1 TSM算法与模型选择.... 8 2.1.1 TSM算法原理.... 8 2.1.2 …

用python做傅里叶变换和系统辨识

一、原始信号 1、理想数据 (1)系统参数 参数类型数值J0.5 k g ∗ m 2 kg*m^2 kg∗m2K0.2b5 (2)激励曲线 import matplotlib.pyplot as plt import numpy as np# 生成数据 x np.linspace(0, 10, 1000) # 生成0到10之间的100…

下列程序定义了NxN的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N],int n),该函数的功能是:使数组右上半三角元素中的值乘以m。

本文收录于专栏:算法之翼 https://blog.csdn.net/weixin_52908342/category_10943144.html 订阅后本专栏全部文章可见。 本文含有题目的题干、解题思路、解题思路、解题代码、代码解析。本文分别包含C语言、C++、Java、Python四种语言的解法完整代码和详细的解析。 题干 下列…

从0到1:社区论坛小程序开发笔记

背景 论坛小程序:为用户提供了一个社交互动的平台,使用户可以分享经验、交流观点、解决问题,促进社区成员之间的互动和交流。 用户可以在论坛小程序上发布有关各种话题的帖子,分享自己的知识、经验和见解,帮助其他用户…

mysql基础14——视图

视图 视图是一种虚拟表 可以把一段查询语句作为视图存储在数据库中 需要的时候把视图看作一个表,对里面的数据进行查询 视图并没有真正存储数据 避免了数据存储过程中可能产生的冗余 提高了存储的效率 子查询 嵌套在另一个查询中的查询 派生表 如果在查询中…