广告
返回顶部
首页 > 资讯 > 后端开发 > Python >【Python模块】rabbitMQ
  • 781
分享到

【Python模块】rabbitMQ

模块PythonrabbitMQ 2023-01-31 06:01:25 781人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

RabbitMQ介绍:父进程与子进程间,同一父继承可以用multiprocess的Manager模块来实现数据互访。作用:RabbitMQ是为了实现相互独立的两个进程数据互访。应用场景:不需要立即操作的数据。比如:发消息,发通知,发红包等。

  • RabbitMQ介绍:

父进程与子进程间,同一父继承可以用multiprocess的Manager模块来实现数据互访。

作用:RabbitMQ是为了实现相互独立的两个进程数据互访。

应用场景:不需要立即操作的数据。比如:发消息,发通知,发红包等。其它常见场景包括最终一致性、广播、错峰流控等等。

同类产品有:ActiveMQ、RabbitMQ、kafka 、 ZeroMQ等。

 

  • RabbitMQ特点:

        RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。

 

  • AMQP :Advanced Message Queue,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。

  • RabbitMQ 最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。具体特点包括:

  • 可靠性(Reliability)
    RabbitMQ 使用一些机制来保证可靠性,如持久化、传输确认、发布确认。

  • 灵活的路由(Flexible Routing)
    在消息进入队列之前,通过 Exchange 来路由消息的。对于典型的路由功能,RabbitMQ 已经提供了一些内置的 Exchange 来实现。针对更复杂的路由功能,可以将多个 Exchange 绑定在一起,也通过插件机制实现自己的 Exchange 。

  • 消息集群(Clustering)
    多个 RabbitMQ 服务器可以组成一个集群,形成一个逻辑 Broker 。

  • 高可用(Highly Available Queues)
    队列可以在集群中的机器上进行镜像,使得在部分节点出问题的情况下队列仍然可用。

  • 多种协议(Multi-protocol)
    RabbitMQ 支持多种消息队列协议,比如 STOMP、MQtT 等等。

  • 多语言客户端(Many Clients)
    RabbitMQ 几乎支持所有常用语言,比如 Java、.net、Ruby 等等。

  • 管理界面(Management UI)
    RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker 的许多方面。

  • 跟踪机制(Tracing)
    如果消息异常,RabbitMQ 提供了消息跟踪机制,使用者可以找出发生了什么。

  • 插件机制(Plugin System)
    RabbitMQ 提供了许多插件,来从多方面进行扩展,也可以编写自己的插件。

     

 

  • RabbitMQ 中的概念模型

 

  • 消息模型:

    所有 MQ 产品从模型抽象上来说都是一样的过程:
    消费者(consumer)订阅某个队列。生产者(producer)创建消息,然后发布到队列(queue)中,最后将消息发送到监听的消费者。

     

  • RabbitMQ 基本概念

     上面只是最简单抽象的描述,具体到 RabbitMQ 则有更详细的概念需要解释。上面介绍过 RabbitMQ 是 AMQP 协议的一个开源实现,所以其内部实际上也是 AMQP 中的基本概念:

 

        

  1. Message
    消息,消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储)等。

  2. Publisher
    消息的生产者,也是一个向交换器发布消息的客户端应用程序。

  3. Exchange
    交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。

  4. Binding
    绑定,用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表。

  5. Queue
    消息队列,用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走。

  6. Connection
    网络连接,比如一个tcp连接。

  7. Channel
    信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的TCP连接内地虚拟连接,AMQP 命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因为对于操作系统来说建立和销毁 TCP 都是非常昂贵的开销,所以引入了信道的概念,以复用一条 TCP 连接。

  8. Consumer
    消息的消费者,表示一个从消息队列中取得消息的客户端应用程序。

  9. Virtual Host
    虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 / 。

  10. Broker
    表示消息队列服务器实体。

 

  • AMQP 中的消息路由

  1. AMQP 中消息的路由过程和 Java 开发者熟悉的 JMS 存在一些差别,AMQP 中增加了 Exchange 和 Binding 的角色。生产者把消息发布到 Exchange 上,消息最终到达队列并被消费者接收,而 Binding 决定交换器的消息应该发送到那个队列。

         5015984-7fd73af768f28704.png

 

  • Exchange 类型

    Exchange分发消息时根据类型的不同分发策略有区别,目前共四种类型:direct、fanout、topic、headers 。headers 匹配 AMQP 消息的 header 而不是路由键,此外 headers 交换器和 direct 交换器完全一致,但性能差很多,目前几乎用不到了,所以直接看另外三种类型:

  1. direct

    消息中的路由键(routing key)如果和 Binding 中的 binding key 一致, 交换器就将消息发到对应的队列中。路由键与队列名完全匹配,如果一个队列绑定到交换机要求路由键为“dog”,则只转发 routing key 标记为“dog”的消息,不会转发“dog.puppy”,也不会转发“dog.guard”等等。它是完全匹配、单播的模式。

     

    direct.png

     

     

  2. fanout

    每个发到 fanout 类型交换器的消息都会分到所有绑定的队列上去。fanout 交换器不处理路由键,只是简单的将队列绑定到交换器上,每个发送到交换器的消息都会被转发到与该交换器绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。fanout 类型转发消息是最快的。

     

    fanout.png

  3.  

     

  4. topic

    topic 交换器通过模式匹配分配消息的路由键属性,将路由键和某个模式进行匹配,此时队列需要绑定到一个模式上。它将路由键和绑定键的字符串切分成单词,这些单词之间用点隔开。它同样也会识别两个通配符:符号“#”和符号“*”。#匹配0个或多个单词,*只匹配一个单词。

    #.a 可以匹配b.c.d.e.a      , *.a只以可匹配b.a或c.a或e.a,而不能匹配a.b.a
    topic.png

 

  • RabbitMQ安装:

  1.  windows7:

    1. 安装erlang(32bit or 64bit)。

    2. 设置erlang系统环境变量:添加系统变量ERLANG_HOME,路径:erlang安装路径。追加path -->路径%ERLANG_HOME%\bin(注:eshell版本:V10.0.1)

    3. 安装rabbitMQ。

    4. 设置rabbitMQ系统环境变量:添加系统变量RABBITMQ_HOME,路径:erlang安装路径。追加path -->路径%RABBITMQ_HOME%\sbin

    5. 开启rabbitmq服务:在cmd下运行,net start rabbitMQ

    6. 检查rabbitMQ是否安装成功:cmd下运行 rabbitctl list_users,没有报错,并显示用户名,成功

    7. 添加rabbitMQ的WEB管理插件:cmd下运行 rabbitmq-plusins enable rabbitmq_management

    8. 浏览器里输入:Http://localhost:15672,访问WEB管理。

       

      注:设置系统环境变量的目的在于,在任何目录下,都可以运行bat或exe文件。否则需要进入程序相应目录。

       

       

  2. linux(在线安装):

    当前linux版本--Centos 7,erlang版本19.0,rabbitmq版本3.6.6,(erlang与rabbitmq版本对应表:http://www.rabbitmq.com/which-erlang.html):

    1. 安装前需要安装GCc

    2. 安装前需要安装perl

    3. 安装wget:rpm -y install wget (wget是执行网络下载)

    4. 下载erlang: wget 地址:http://www.rabbitmq.com/releases/erlang/erlang-19.0.4-1.el7.centos.x86_64.rpm

    5. 安装erlang。rpm -ivh 包名

    6. 安装socat包,yum -y install socat

    7. 下载并安装rabbitmq。地址:http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el6.noarch.rpm

    8. 安装rabbitmq。rpm -ivh 包名

    9. 设置环境变量,并指向rabbitmq的bin目录,可以不需要进入程序目录,并直接运行程序。

      vi ~/.user_profile  ,添加 export PATH=$PATH:/usr/lib/rabbitmq/bin

    10. 启动rabbitmq服务。service rabbitmq-server start

    11. 使用教程https://blog.csdn.net/qq_22075041/article/details/78855708

       

  •  RabbitMQ简单配置:

    1. 查看用户:

      默认只有guest用户,一般供本地测试用。把guest从配置文件中的红色列表中删除[{rabbit, [{loopback_users, []}]}]可改变guest为外部用户。

    2. 查看当前rabbitmq用户:

      rabbitmqctl list_users

    3. 添加用户:

      rabbitmqctl add_user david david1

    4. 添加用户标识:

      rabbitmqctl set_user_tags david administrator

    5. 添加用户权限:

      rabbitmqctl set_permissions -p / david ".*" ".*" ".*"

      / 是默认的vhost名,权限<conf> <write> <read>

      正则表达式来匹配特定的资源,如'^(amq\.gen.*|amq\.default)$'可以匹配server生成的和默认的exchange,'^$'不匹配任何资源

    6. 添加一个新的vhost

      rabbitmqctl add_vhost host1

      外部连接都是需要指定一个vhost,所以要访问需要按上面步骤,给一个用户配置权限

    7. 重启rabbitmq服务

      service rabbitmq-server restart

    8. 查看服务状态

      service rabbitmq-server status

       

       python中RabbitMQ相关的方法。

       对于每个Channel来说,每个消息都会有一个DeliveryTag,一般用接收消息的顺序来表示:1,2,3,4 等等。

      方法或属性参数作用示例
      pika.PlianCredentials(name,pw)

      name:rabbitmq的用户名

      pw:rabbitmq的密码

      创建rabbitmq登陆凭证
      credential=pika.PlianCredentials('david','123456')
      pika.ConnectionParameters(host,port,virtual_host,credential)

      host:rabbitmq服务器地址

      prot:端口,5672

      virtual_host:指定虚拟host

      credential:登陆rabbitmq凭证

      连接到rabbitmq时的参数设置

       

      如果是本地的rabbitmq用下面语句:

      pika.ConnectionParameters('localhost')

      parameter=pika.ConnectionParameters('192.168.0.4',5672,'/',credential)

       

      rabbitmq是本地只写地址:

      parameter=pika.ConnnectionParameters('localhost')

      pika.BlockingConnection(parameters)
      parameter:
      阻塞式连接到rabbitmq
      connect=pika.BlockingConnection(parameter)
      pika.channel()
      建立通道
      channel = connect.channel()

      delivery_tag:该消息的index

      requeue:默认True

      更改为False,不把拒收的消息重新放入queue

      单条消息拒收
      basic_nack()

      delivery_tag:该消息的index

      mutiple:是否批量,默认False

      更改为True,一次性ack比delivery_tag小的queue

      requeue:默认True

      更改为False,不把拒收消息重新放入队列

      消息拒收,可以多条
      basic_qos()

      prefetch_size:

      prefetch_count:默认0

      值越高,处理数据条数越大,适合高性能电脑

      all_channels:

      改变均衡处理信息的条数。
      queue_declare(queue,passive,durable,exclusive,auto_delete,arguments)

      queue:队列名

      passive:

      durable:True、开启持久化

      exclusive:True、开启生成随机队列名

      auto_delete:

      argument:

      声明一个队列。如果已存在不同属性的队列报错。

      普通声明:

      queue_declare(queue='test')

      带持久化:

      queue_declare(queue='test',durable=True)

      自动生成queue名:

      queue_declare(exclusive=True)

      exchange_declare()

      exchange:名字

      exchange_type:默认direct、

      可选类型:topic\fanout\direct\

      passive:

      druable: True、持久化

      auto_delete:

      internal:

      arguments:

      声明一个exchange,如果存在不同属性的exchange会报错

      默认direct类型:

      exchange_declare(exchange='test1')

      持久化:

      exchange_declare(exchange='test2',durable=True)

      queue_delete()

      queue:队列名

      if_unused:

      if_empty:

      删除已声明的queue
      queue_delete(queue='test')
      delete_exchange()

      exchange:

      if_unused:

      删除已声明的exchange
      queue_delete(exchange='test1')
      method.queue获取随机生成的queue名字

      声明随机queue:

      result = channel.queue_declare(exclusive = True)

      获取queue name:

      q_name = result.method.queue

      queue_bind()

      queue:队列名

      exchange:要绑定的exchange

      routing_key:要绑定的routing_key

      arguments:

      把声明的随机queue绑定到指定的exchange或者routing_key上

      把上面的随机Q绑定到exchange和使用routing_key过滤:

      channel.queue_bind(queue=q_name,exchange='test1',routing_key='a')

      basic_publish()

      exchange:目标exchange

      routing_key:目标routing_key

      body:消息正文

      properties:发送的消息属性

      mandatory:默认False

      更改为True,服务器没有对应的queue,那么会调用basic.return方法将消息返还给生产者。

      immediate:默认False

      更改为True,如果exchange在将消息route到queue(s)时发现对应的queue上没有消费者,那么这条消息不会放入队列中。当与消息routeKey关联的所有queue(一个或多个)都没有消费者时,该消息会通过basic.return方法返还给生产者。

      把信息发送到rabbitmq

      channel=basic_publish(exchange='test1',routing_key = 'a',body='hello Word!')

      basic_publish的properties:

       

      pika.BasicProperties()

      content_type:

      content_encoding:

      headers:

      delivery_mode:声明信息持久化

      priority:

      correlation_id:指定为回调函数参数props中correlation_id

      reply_to:回调队列名

      expiration:

      meddage_id:

      timestamp:

      type:

      user_id:

      app_id:

      cluster_id:

       

      指定发送的信息属性

      1、使信息持久化,需要声明queue持久化和delivery_mode=2信息持久化

      2、要实现回调,客户端至少发送带有reply_to以及correlation_id两个属性的信息


      basic_consume()

      consumer_callback:回调函数名

      queue:接收的队列名

      no_ack:自动消毁队列

      exclusive:

      consumer_tag:

      argument:

      basic_ack()

      delivery_tag:默认0

      该消息的index

      mutiple:是否批量,默认False

      更改为True,一次性ack比delivery_tag小的queue

      当consume的no_ack属性是False时,通知rabbitmq删除queue
      回调函数参数属性和方法
      channel包含channel的一切属性和方法
      method

      consumer_tag:

      delivery_tag:

      exchange:

      redelivered:

      routing_key:

      propertiesbasic_publish通过properties传入的参数
      bodybasic_publish发送的消息


每种方式Queue是必须有的,因为只有Queue才能读取数据。

 

轮询方式接收:publisher端直接send到Routing Key。RECV端直接从queue读取。

 

fanout:publisher端Send到Exchange。Consumer端声明Queue,绑定到Exchange,从Exchange读取。

 

direct:publisher端send到Exchange,并进行通过Routing_key匹配关键字。Consumer端声明Queue,绑定到Exchange,读取时写上完整的关键字,只读取关键字匹配内容。

 

topic:和direct模式一样,不过Routing_key支持模糊匹配。

 

  •  python中的RabbitMQ实例:

    • 默认轮询方式:


    • 生产者把生产的消息放入queue,多个消费者依次取出不同的消息。Q1,Q2两个消费者,生产者放入信息D1,D2时,Q1只能接收到D1,Q2只能接收到D2.

     

# 发送端
import pika

credential = pika.PlainCredentials('host_admin','111111')        # 设置连接到Vhost的用户名和密码
connect = pika.BlockingConnection(pika.ConnectionParameters(
                                                            '192.168.1.104',
                                                            5672,                    # web管理端口是15672,程序存取消息端口是5672
                                                            'host1',                 # vhost名字。
                                                            credential))
                                                            
channel = connect.channel()
channel.queue_declare(queue = "say", durable = True)                                 # durable消息持久化。

channel.basic_publish(exchange = '',
                      routing_key = 'say',
                      body = 'D1',
                      properties=pika.BasicProperties(delivery_mode=2)               # delivery_mode=2 消息持久化,但是阅后即消。
                      )
# 发送第第二条数据,只是为了更明显的看出来试验结果。
channel.basic_publish(exchange = '',
                      routing_key = 'say',
                      body = 'D2',
                      properties=pika.BasicProperties(delivery_mode=2)              
                      )
channel.close()


# 接收端
credential = pika.PlainCredentials('host_admin','111111')
connect = pika.BlockingConnection(pika.ConnectionParameters('192.168.1.104',
                                                            5672,
                                                            'host1',
                                                            credential))
def callback(ch,method,properties,body):
    print(method.queue)
                                                          
channel = connect.channel()
channel.queue_declare(queue = "say",durable = True)
channel.basic_comsume(callback,
                      queue='say',
                      no_ack=False)
channel.start_consume()

 

 

  •  fanout 广播方式

     

     

        忽略routing_key,客户端接收时,只需绑定exchange就可以,所有客户端同时接到信息。

import pika
# 发送端
connect = pika.BlockingConnections(pika.ConnectionParameters('localhost'))         # 本地方式连接,不用验证
channel = connect.channel()

channel.exchange_declare(exchange='fan_test',exchange_type='fanout')                
channel.basick_publish(exchange='fantest',
                       routing_key='',
                       body='this is test!'
                       )
channel.close()       
                       

# 接收端
connect = pika.BlockingConnections(pika.ConnectionParameters('localhost'))
channel = connect.channel()
result=channel.queue_declare(exclusive=True)    # 随机生成一个queue名字
q_name=result.method.queue                      # 获取随机生成的queue名字
channel.queue_bind(queue=q_name,                # 把queue名字绑定到exchange
                   exchange='fantest')

def callback(ch,method,properties,body):
    print(body)

channel.basic_consume(callback,
                      queue=q_name,
                      no_ack=True)
                 
channel.start_consume()
  •  direct方式

        经过routing,只发送给完全匹配routing_key和queue

# 发送端
import pika

connect = pika.BlockingConnections(pika.ConnectionParameters('localhost'))

channel = connect.channel()

channel.exchange_declare(exchange='ex_test',exchange_type='direct')

channel.basic_publish(exchange='ex_test',
                      routing_key='R1',
                      queue='',
                      body='this is test of the direct to R1!')
                      
channel.basic_publish(exchange='ex_test',
                      routing_key='R2',                                # 更改了routing_key,客户端routing_key,R1接收不到
                      queue='',
                      body='this is a test of direct to R2!')

channel.close()


# 接收端

connect = pika.BlockingConnection(pika.Connectionparameters('localhost'))

channel = connect.channel()

result = channel.queue_declare(exclusive = True)
q_name = result.method.queue

channel.queue_bind(queue=q_name,
                   exchange='ex_test')

                   
def callback(ch,method,properties,body):
    print(method.routing_key,body)
                   
channel.basic_consume(callback,
                      queue=q_name,
                      routing_key='R1')

channel.start_consume()
  • topic方式:

    可以匹配不同名字的routing_key

# 发送端
import pika

routing_key = ["a.a","b.a","c.b.a","d.c","d.c.b"]

connect = pika.BlockingConnection(pika.ConnectionParameters('localhost'))

channel = connect.channel()

channel.exchange_declare(exchange='ex_topic',exchange_type='topic')

for i in routing_key:
    message = "routingkey:{}".fORMat(i)
    channel.basic_publish(exchange="ex_topic",
                          routing_key = i,
                          body = message)

channel.close()



# 接收端:

import pika

routing = ["*.a","#.a"]

connect = pika.BlockingConnection(pika.ConnectionParameters("localhost"))

channel = connect.channel()

def callback(ch,method,propreties,body):
    print(method.queue,body)

channel.exchange_declare(exchange="ex_topic",exchange_type="topic")
result = channel.queue_declare(exclusive= True)
q_name = result.method.queue

for i in routing:
    channel.queue_bind(exchange="ex_topic",routing_key=i,queue=q_name)

channel.basic_consume(callcack,
                      queue=q_name,
                      no_ack=True)

channel.start_consuming()

 

 

 




参考文章:https://www.jianshu.com/p/79ca08116d57


 

--结束END--

本文标题: 【Python模块】rabbitMQ

本文链接: https://www.lsjlt.com/news/190123.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 【Python模块】rabbitMQ
    RabbitMQ介绍:父进程与子进程间,同一父继承可以用multiprocess的Manager模块来实现数据互访。作用:RabbitMQ是为了实现相互独立的两个进程数据互访。应用场景:不需要立即操作的数据。比如:发消息,发通知,发红包等。...
    99+
    2023-01-31
    模块 Python rabbitMQ
  • python模块:smtplib模块
    1.使用本地的sendmail协议进行邮件发送格式(1):smtpObj=smtplib.SMTP([host [,port [,local_hostname]]])host:SMTP服务器主机的IP地址或者是域名port:服务的端口号(默...
    99+
    2023-01-31
    模块 python smtplib
  • Python模块:time模块
    time模块:python中处理时间的基础模块,有时间戳,元组,自定义,三种时间表现形式。python中时间戳的值是以1970年1月1日0点开始计算的,单位是秒。时间戳:就是两个时间差的数值。时区:传说中在开发服务器/客户端程序时,时区不一...
    99+
    2023-01-31
    模块 Python time
  • 使用Python模块:struct模块
    Python没有提供直接的将用户定义的数据类型和文件IO关联起来的功能,但是它提供了struct库(是一个内置库)——我们可以以二进制模式来写这些数据(有趣的是,它真的是设计来讲文本数据写为缓存的) 1)bytes、str...
    99+
    2023-01-31
    模块 Python struct
  • python模块学习----nmap模块
    安装nmap模块:pip install python_nmanmap模块说明:python-nmap是一个帮助使用nmap端口扫描器的python库。它允许轻松操纵nmap扫描结果,并且将是一个完美的选择,为需要自动完成扫描任务的系统管理...
    99+
    2023-01-31
    模块 python nmap
  • python加密模块-hashlib模块
    hashlib模块 用于加密相关的操作,3.X里代替了md5模块和sha模块,主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法 (sha比md5 更复杂、md5 不能反解) 具体应用:用于网站防篡改。具...
    99+
    2023-01-31
    模块 python hashlib
  • Python模块
    初步认识 安装完python后,python自带一部分模块,自带的模块又称作内置模块。其中一部分模块在路径Lib下。(这里的文件夹可以看做包,可以把多个模块放进一个包里) 从模块的来源来讲,可以分三种:内置模块、自定义模块(自己定义的)...
    99+
    2023-01-30
    模块 Python
  • python - 模块
    参考:https://www.cnblogs.com/nulige/p/6166205.html一、模块介绍Python Module(模块),就是一个保存了Python代码的文件。模块能定义函数,类和变量。模块里也能包含可执行的代码。文件...
    99+
    2023-01-31
    模块 python
  • python 模块
    python的模块分为2种:1.标准库(不需要安装,直接导入就可以使用的)2.第三方库(必须要手动安装的)先来介绍2个标准库:sys和os#!/usr/bin/env python# coding: utf-8...
    99+
    2023-01-30
    模块 python
  • python-模块
    一:模块的基本认识: 内置模块 内置模块是python自带的功能,在使用内置模块相应功能时,需要先导入再使用    第三方模块 下载-->安装-->使用 1.找到python所在的根目录-->再找到Scrip...
    99+
    2023-01-31
    模块 python
  • Python基础之hashlib模块subprocess模块logging模块
    目录一、hashlib模块基本操作与用法二、subprocess模块简介基本操作与用法三、logging模块简介基本操作与用法一、hashlib模块 什么是哈希模块: hashlib...
    99+
    2022-11-11
  • Python中的sys模块、random模块和math模块
    一、sys运行时环境模块 sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。 用法: sys.argv:命令行参数List,第...
    99+
    2022-11-11
  • python常见模块之OS模块和time模块
    一、OS模块概述 Python OS模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。 二、常用方法 三、OS模...
    99+
    2022-11-12
  • rabbitmq模块启动报java.net.SocketException: socket closed的解决方法
    问题 最近在接手一个项目时,使用的是spring-cloud微服务构架,mq消息消费模块是单独一个模块,但启动这个模块一直报如下错误: java.net.SocketException: socket closed 这个错误是这个模块注册不...
    99+
    2023-09-26
    java-rabbitmq rabbitmq java nacos 微服务
  • Python时间模块之datetime模块
    目录 简介 函数介绍及运用 date:日期类 1.获取当前时间  2.日期对象的属性 3.date类中时间和时间戳的转换: 4.修改日期使用replace方法  time:时间类  time类操作 datetime:日期时间类 timede...
    99+
    2023-09-12
    python datetime python 日期时间
  • python数学模块(math/decimal模块)
    目录一, math模块2. math库常用函数3.math库使用示例二, decimal模块1. 什么时候使用decimal2. 使用decimal3. decimal使用示例一, ...
    99+
    2022-11-11
  • Python模块学习之IPy模块
    IP地址规划是网络设计中非常重要的一个环节,规划的好坏会直接影响路由协议算法的效率,包括网络性能、可扩展性等方面,在这个过程当中,免不了要计算大量的IP地址,包括网段、网络掩码、广播地址、子网数、IP类型等。Python提供了一个强大的第...
    99+
    2023-01-31
    模块 Python IPy
  • 【Python模块】Python UUI
    uuid是128位的全局唯一标识符(univeral unique identifier),通常用32位的一个字符串的形式来表现。有时也称guid(global unique identifier)。python中自带了uuid模块来进行u...
    99+
    2023-01-31
    模块 Python UUI
  • Python RabbitMQ
    RabbitMQRabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统。他遵循Mozilla Public License开源协议。MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用...
    99+
    2023-01-31
    Python RabbitMQ
  • 【python】redis模块
    单线程,通过epoll实现高并发,端口6379linux下载地址:http://redis.io/downloadwindows下载地址:https://github.com/MSOpenTech/redis/releases 本文介绍的内...
    99+
    2023-01-31
    模块 python redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作