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

news/2024/5/19 12:59:49
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 timecredentials = 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)  # 收到的全部数据  就要bodyprint(body)          # 是b'xxx'的格式channel.basic_ack(method_frame.delivery_tag)  #用自动应答 这个应该不要
else:print('消费单条 没有收到消息')

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

import pika
import timecredentials = 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 = queueNamechannel.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)breakdef queueConsumer2(queueName,queueName2):while True:# 申明消息队列,消息在这个队列传递,如果不存在,则创建队列queue = queueName2channel.queue_declare(queue , durable = True)queue_info = channel.queue_declare(queueName,durable = True,passive=True)message_count = queue_info.method.message_countif 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)breakwhile 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.mrgr.cn/p/27834746

相关文章

【电控笔记5.4】pwm延迟

PWM延迟 1标准采样法 Td=MCU计算延迟+输出延迟 Tcon=电流控制周期 Ts=PWM载波周期 Td=1.5Ts(6.3节 ) 电流环跟PWM采样周期同步 2修改采样法

python爬虫学习------scrapy第二部分(第三十天)

🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天…

压缩即智能:为什么 ChatGPT 拥有智能?(转)

源地址: 背景 随着 ChatGPT、GPT4、PaLM2、文心一言各种大模型的爆火,我们在惊讶大模型能力的同时,也在不断的问自己一个问题,为什么 Decode-only 的 ChatGPT 拥有智能? GPT 其实就是基于 Transformer 的 Decode-only,本质是就是 Next Token Prediction,为啥如此简单的结…

docker常用基本命令

把jar包和 dockerfile文件放到同一目录下#构建Docker镜像 注意后面的 . 不能省略 docker build -t your-image-name .#运行并创建一个容器 docker run -d -p 8080:8080 --name container_name your-image-name# 停止容器 767fce4cb990 容器ID (容器名也可以) docker stop 767f…

Android Studio开发工具学习之Git远程仓库拉取与推送

Git远程仓库操作 1.1 推送项目到远端服务器1.1.1 进入Gitee或Github、创建一个新的仓库1.1.2 将Android Studio中项目推送至Gitee 1.2 从远端服务器拉取项目1.2.1 AS工程页拉取新项目1.2.2 AS启动页拉取项目 1.1 推送项目到远端服务器 1.1.1 进入Gitee或Github、创建一个新的仓…

vue3推荐算法

Vue 3 推荐算法主要指的是在 Vue 3 框架中实现的或者适用于 Vue 3 的算法库或组件库。Vue 3 由于其优秀的设计和性能,被广泛应用于构建各种类型的应用程序,包括需要复杂算法支持的项目。以下是一些在 Vue 3 中可能会用到的推荐算法资源: Vue-…

【Network Automation系列】-- 第一章

引言: 本系列是根据《Mastering Python NetworkingThird Edition》翻译整理出来的,原著作者:Eric Chou,大家可以关注一下。 随着网络工程领域的快速变化,我们无疑也经历了类似的变化。 随着软件开发越来越多地集成到网络的各个方面、传统的命令行接口和垂直集成中,网络堆栈…

selenium--绕过网站监控操作

driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": """Object.defineProperty(navigator, webdriver, {get: () => undefined})""", }) #r绕过网站对webdriver的监测

Rime 如何通过 iCloud 实现词库多端同步,Windows、iOS、macOS

Rime 如何通过 iCloud 实现词库多端同步,Windows、iOS、macOS 一、设备环境 最理想的输入环境就是在多端都使用同一个词库,这样能保持多端的输入习惯是一致的。 以我为例,手头每天都要用到的操作平台和对应的输入法: 操作系统设…

data参数

大部分时间都是Content-Type: application/json,flask_appbuilder的服务中很多接口是 multipart/form-data;,用python调用时,通常情况下 data = json.dumps({ "catalogCode":"region","pageNo": 1, "pageSize": 1000}) headers = {T…

Linux目录及文件管理

Linux目录结构/(根目录):根目录是整个文件系统的起点,包含了所有其他目录和文件。 /bin(二进制文件):存放系统的基本命令,如 ls、cp、mv 等。 /boot(引导文件):存放启动 Linux 所需的引导文件,如内核文件、引导加载程序配置文件等。 /dev(设备文件): 包含系统中所有的设…

【云计算】云数据中心网络(七):负载均衡

《云网络》系列,共包含以下文章: 云网络是未来的网络基础设施云网络产品体系概述云数据中心网络(一):VPC云数据中心网络(二):弹性公网 IP云数据中心网络(三)…

Linux网络设置

一、网络相关设置内容 将Linux主机接入到网络,需要配置网络相关设置,包括以下内容 1.主机名 2.IP/netmask 3.路由:默认网关 4.DNS服务器,主DNS服务器,次DNS服务器,第三个DNS服务器 centos的网卡配置位…

ROS2学习--OOP方法编写python节点

1.创建工作空间 mkdir -p town_ws/src cd town_ws/src 2.创建功能包 ros2 pkg create village_li --build-type ament_python --dependencies rclpypkg create 是创建包的意思 --build-type 用来指定该包的编译类型,一共有三个可选项ament_python、ament_cmake、cmake --depen…

[python省时间]处理文档,包括批量查找,替换,

1、批量查找替换 # -*- coding: utf-8 -*- import os import re # path=os.getcwd()str_old = insert str_new = frs.event.queue file_formate = init.sql file_sql=open(rF:\bak\init_all.sql, r+, encoding=utf-8) def replace_txt(path):if path.find(file_formate) == len…

【python省时间】时间转换、日期格式化、时间戳转字符、

1、日期格式化 def paserTime(timestamp): t = time.time() f=time.localtime(timestamp/1000) print (t) #原始时间数据 # print (int(t)) #秒级时间戳 print (int(round(t * 1000))) #毫秒级时间戳 #nowTime = lambda: int(round(…

【Qt QML】TabBar的用法

Qt Quick中的TabBar提供了一个基于选项卡的导航模型。TabBar由TabButton控件填充,并且可以与任何提供currentIndex属性的布局或容器控件一起使用,例如StackLayout或SwipeView。 import QtQuick import QtQuick.Controls import QtQuick.LayoutsWindow …

CentOS 7虚拟机配置过程中所需组件的安装(二)

1.安装net-tools组件(解决无 ifconfig) # yum install net-tools 2.安装gcc、c编译器以及内核文件 # yum -y install gcc gcc-c kernel-devel 验证安装成功 3.安装nano(文本编辑器) # yum install nano

【Pytorch】(十四)C++ 加载TorchScript 模型

文章目录 (十四)C 加载TorchScript 模型Step 1: 将PyTorch模型转换为TorchScriptStep 2: 将TorchScript序列化为文件Step 3: C程序中加载TorchScript模型Step 4: C程序中运行TorchScript模型 【Pytorch】(十三)PyTorch模型部署: T…

javaWeb项目-校园志愿者管理系统功能介绍

项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog 1、SpringBoot框架 …