NoneBot2,基于Python的聊天机器人

news2024/11/26 11:49:59

NoneBot2,基于Python的聊天机器人

  • 第一步,配置python
  • 第二步,配置[go-cqhttp](https://github.com/Mrs4s/go-cqhttp)
  • 第三步,配置[NoneBot](https://61d3d9dbcadf413fd3238e89--nonebot2.netlify.app/)

NoneBot2 是一个现代、跨平台、可扩展的 Python 聊天机器人框架,它基于 Python 的类型注解和异步特性,能够为你的需求实现提供便捷灵活的支持。

NoneBot2 具有丰富的插件生态系统,可以实现多种功能,例如自动回复、天气查询、消息推送等等。此外,它还提供了完善的文档和示例代码,方便用户快速上手和开发自己的插件。

如果你是一名 Python 程序员,想要开发一个聊天机器人,那么 NoneBot2 绝对是你的不二之选。你可以在官方文档中了解更多关于 NoneBot2 的详细信息和使用方法。

首先,你需要明白的是NoneBot2的运行是需要python运行环境来支持,因此我们首先需要配置好python环境;再有,以QQ聊天机器人举例,NoneBot2本身并不包含与QQ服务器通信的底层协议实现,因此无法独立搭建聊天机器人。与 QQ 服务器通信的底层协议实现可以有多种选择,如 CoolQ HTTP API 协议、Mirai 协议、go-cqhttp 协议等。因此,在使用 nonebot 框架搭建 QQ 机器人时,您还需要选择一个底层协议实现来与 QQ 服务器通信,这里我们以go-cqhttp为例

综上所述,如果我们要搭建一个属于自己的QQ机器人,需要进行如下几步:

  1. 要搭建一个安装 Python 是作为 nonebot 运行的基础环境;
  2. 配置 go-cqhttp 是为了实现与 QQ 服务器的通信,并提供 QQ 机器人的服务;
  3. 配置 nonebot 是将 go-cqhttp 和 Python 代码连接起来,实现具体的 QQ 机器人功能。

下面将直接用云服务器进行部署,毕竟如果你要开个机器人肯定是24小时一直服务,因此,这里以腾讯云的Centos为例部署。

第一步,配置python

首先你得先按照Python,需要注意的是,NoneBot 仅支持 Python 3.7.3 以上版本,这里以安装Python3.9.9为例:

由于CentOS7原本就安装了Python2,而且这个Python2不能被删除,因为有很多系统命令,比如yum都要用到。所以我们要额外安装Python3,而且系统一般允许多个版本的python同时存在。

我们先来查看python安装位置,一般是位于/usr/bin/python目录下。

$ which python
>> /usr/bin/python

下面介绍安装Python3的方法:

  1. 安装依赖包(切记安装)

    yum -y groupinstall "Development tools"
    yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
    

    在安装 Python 之前需要安装必要的开发工具和库。

    当您运行第一个命令 yum -y groupinstall development tools 时,它会安装一组常用的开发工具,用于在 Linux 系统上构建软件。这些工具包括编译器、链接器和其他用于构建软件的实用程序。

    接下来的命令 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel 安装 Python 所需的其他开发库。这些库提供了压缩和加密功能、数据库访问支持以及 GUI 工具包(如 Tkinter)等功能。

    通过在安装 Python 之前安装这些工具和库,您可以确保您的系统具备构建和运行 Python 程序所需的所有必要组件。

    同时,补充个小知识点:在 yum 命令中,-y 参数是指定在执行安装或卸载操作时不需要手动确认。如果没有使用 -y 参数,则在安装或卸载软件包时,yum 会提示您确认操作,需要手动输入 y 才能继续执行操作。

    使用 -y 参数可以使 yum 命令在执行操作时自动确认,避免了人工交互的过程,方便自动化脚本和批量操作。但是,使用 -y 参数也需要注意,因为这样可能会导致不必要的安装或卸载,所以在使用时需要谨慎。

  2. 下载Python3安装包
    大家可根据自己需求下载不同版本的Python3,我下载的是Python3.9.9

    wget https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tar.xz
    
  3. 新建python3存放目录

    mkdir /usr/local/python3
    
  4. 安装Python3

    解压压缩包,进入解压目录,指定安装目录,安装Python3。

    tar -xvJf  Python-3.9.9.tar.xz # 该命令将 Python 的源代码文件(压缩文件)解压缩到当前目录中。
    cd Python-3.9.9 # 将当前工作目录更改为 Python 源代码所在的目录,以便在这个目录下执行后续的命令。
    ./configure --prefix=/usr/local/python3 # 运行配置脚本,为 Python 的构建过程设置参数。--prefix 选项指定 Python 的安装目录,这里设置为 /usr/local/python3。这意味着 Python 将被安装到 /usr/local/python3 目录中。
    yum install libffi-devel -y # 这个命令会安装 libffi-devel 开发包,该开发包是 Python 某些模块的依赖项。在安装 Python 的某些版本(如 Python 3.7 及以上版本)时,需要先安装此包。
    make && make install # 这个命令会构建和安装 Python。make 命令编译源代码,并生成可执行文件。make install 命令将编译好的文件安装到指定的目录中(在这里是 /usr/local/python3)。这样,Python 就已经成功安装到了系统中。
    

    在 Python 3.4 及以后的版本中,pip 被包含在了 Python 的安装包中,因此在安装 Python 3.4 及以后的版本时,pip 也会被一同安装。

    如果您使用的是 Python 3.4 及以后的版本,那么在安装完成后,您可以通过在终端中输入 pip 命令来验证 pip 是否已经安装成功。

    对于早期版本的 Python(例如 Python 2.x 系列和 Python 3.3 及以前的版本),pip 并不会自动安装。您需要手动安装 pip。yum -y install python-pipyum -y install python3-pip

  5. 创建软链接

    ln -s /usr/local/python3/bin/python3 /usr/bin/python3
    ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
    

    在 Linux 系统中,通常使用 pythonpip 命令来分别执行 Python 解释器和 pip 包管理器。在您安装了多个版本的 Python 时,可能会出现需要切换 Python 版本的情况。此时,您可以使用软链接来指定默认版本。

    创建软链接的命令是 ln -s 源文件 目标文件,其中 -s 表示创建软链接。在这里,/usr/local/python3/bin/python3 是您要创建软链接的源文件,而 /usr/bin/python3 是软链接的目标文件。这样,当您执行 python3 命令时,实际上会调用 /usr/local/python3/bin/python3 解释器。

    同样,/usr/local/python3/bin/pip3 是源文件,/usr/bin/pip3 是目标文件,执行 pip3 命令时,实际上会调用 /usr/local/python3/bin/pip3 包管理器。

    通过创建软链接,您可以轻松地切换不同版本的 Python,并指定默认版本。但是,需要注意的是,软链接只是一个指向源文件的快捷方式,源文件被删除或移动时,软链接也将失效。

  6. 安装完成,输入python3测试

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-myB3jFx3-1678427983272)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a67a6491-bb37-4e64-92ad-72f67be00c5f/Untitled.png)]

    安装成功

第二步,配置go-cqhttp

go-cqhttp 是一个基于 go 语言开发的,轻量、原生跨平台、高效、可扩展的 QQ 机器人框架,支持多种协议和多个 QQ 用户同时连接,可轻松实现 QQ 消息收发、群消息管理、帐号管理、事件处理等功能。

以腾讯云轻量级服务器centos7为例,配置go-cqhttp的流程如下:

  1. 在github上下载最新的版本go-cqhttp,根据你的系统选择下载安装包,这里我们选择arm64 Linux

    系统类型可执行文件压缩文件
    Intel 版 MacosNot availablego-cqhttp_darwin_amd64.tar.gz
    M1 版 MacosNot availablego-cqhttp_darwin_arm64.tar.gz
    32 位 LinuxNot availablego-cqhttp_linux_386.tar.gz
    64 位 LinuxNot availablego-cqhttp_linux_amd64.tar.gz
    arm64 LinuxNot availablego-cqhttp_linux_arm64.tar.gz
    armv7 LinuxNot availablego-cqhttp_linux_armv7.tar.gz
    32 位 Windowsgo-cqhttp_windows_386.exego-cqhttp_windows_386.zip
    64 位 Windowsgo-cqhttp_windows_amd64.exego-cqhttp_windows_amd64.zip
    arm64 Windowsgo-cqhttp_windows_arm64.exego-cqhttp_windows_arm64.zip
    armv7 Windowsgo-cqhttp_windows_armv7.exego-cqhttp_windows_armv7.zip
    wget https://github.com/Mrs4s/go-cqhttp/releases/download/v1.0.0-rc4/go-cqhttp_linux_amd64.tar.gz
    

    (一定要注意你的安装目录)

  2. 解压安装设置并登录机器人QQ

    tar -xzvf go-cqhttp_linux_amd64.tar.gz
    

    解压后cd到解压的目录里执行ssh命令./go-cqhttp,执行这个命令会在当前文件夹下生成几个文件。重点关注config.yml文件,你需要在这个文件中设置QQ(和 QQ密码)

    # go-cqhttp 默认配置文件
    account: # 账号相关
      uin: # QQ账号
      password: '' # 密码为空时使用扫码登录
      encrypt: false  # 是否开启密码加密
      status: 0      # 在线状态 请参考 https://docs.go-cqhttp.org/guide/config.html#在线状态
      relogin: # 重连设置
        delay: 3   # 首次重连延迟, 单位秒
        interval: 3   # 重连间隔
        max-times: 0  # 最大重连次数, 0为无限制
    ......
    

    设置好后可以重启go-cqhttp。

  3. 重启后,第一次登录因为异地需要验证,可以选择扫码登录。

    • 如果你的服务器和手机不在同一个局域网内,会提示网络环境复杂

      解决办法:在本地电脑调试成功后,会在go-cqhttp所在的文件夹中生成session.token文件,将session.token文件传到云服务器中go-cqhttp所在的文件夹内即可

    • 提示登录失败: 密码错误或账号被冻结

      解决办法:在运行一次go-cqhttp后,可以发现其文件夹内会生成一个device.json文件,将device.josn中的protocol=5改为protocol=2即可

    这里你可能会出现其他bug,可以访问其GitHub,查看issue,看看有无解决办法。如下:

    https://github.com/Mrs4s/go-cqhttp/issues

  4. 由于我们想要其24小时运营,因此可以给它设置为后台运行,并进行进程守护

    1. 设置后台运行

      nohup ./go-cqhttp
      

      nohup ./go-cqhttp 是一个命令,它的作用是在后台运行 go-cqhttp。

      nohup 是 Linux 系统中一个命令,用于让命令在后台运行,并且忽略掉 Hangup 信号。Hangup 信号通常是在用户退出登录时发送给当前进程的,如果没有使用 nohup 命令,当用户退出登录时,进程也会被关闭。

      ./go-cqhttp 则是一个运行 go-cqhttp 的命令,其中 ./ 表示在当前目录下执行,go-cqhttp 是 go-cqhttp 的可执行文件名。因此,nohup ./go-cqhttp 的作用是在后台运行 go-cqhttp,并且忽略掉 Hangup 信号,这样即使当前用户退出登录,进程也会继续在后台运行。

      需要注意的是,在使用 nohup 命令运行程序时,程序的输出信息将不再显示在终端上,而是保存在当前目录下的 nohup.out 文件中,您可以使用 tail -f nohup.out 命令来实时查看输出信息。

    2. 进程守护:

      pm2 start ./go-cqhttp --name="go-cqhttp" 
      pm2 save 
      pm2 startup
      

      **pm2**是一个用于管理 Node.js 进程的工具,它可以帮助我们轻松地启动、停止、重启和监控 Node.js 进程。在这里,我们使用 **pm2**来启动 go-cqhttp 进程,并将其命名为 go-cqhttp,方便我们后续管理进程。使用 **pm2启动进程后,可以通过 pm2 list命令查看当前运行的进程列表,也可以通过 pm2 stoppm2 restartpm2 delete**命令来停止、重启、删除进程。

  5. 测试

    接下来我们进行http通信测试,首先需要在config.yml配置http通信

    如果你是本地服务器,配置IP地址以及端口号以127.0.0.1:5700为例,运行go-cqhttp。

    • 浏览器访问下面网址,测试使用机器人QQ发送消息给好友

      http://127.0.0.1:5700/send_private_msg?user_id=接收消息的好友QQ号码&message=这里输入发送的信息内容

      执行成功会返回一段响应数据{"data":{"message_id":xxxx},"retcode":0,"status":"ok"} 说明发送成功了

    • 给qq群发送消息测试,成功同样会返回上面一样的数据"status":"ok”

      http://127.0.0.1:5700/send_group_msg?group_id=接收消息QQ群号&message=这里输入发送的信息内容

更多详情内容,请访问go-cqhttp相关文档:https://docs.go-cqhttp.org/

第三步,配置NoneBot

直接进入正题,根据以下步骤进行None Bot的配置:

  1. 下载安装机器人依赖

    使用 pip 或 其他包管理工具 安装 nb-cli,nonebot2 会作为其依赖被一起安装

    python3 -m pip install nb-cli
    

    如果没有安装的话,可以执行下面这段命令安装nonebot2

    python3 -m pip install nonebot2
    
  2. 安装cqhttp适配器

    python3 -m pip install nonebot-adapter-cqhttp
    

    nonebot 是一个基于 Python 的 QQ 机器人开发框架,它本身只提供了一些高级 API 和插件,方便开发者编写 QQ 机器人的功能。但是,与 QQ 服务器通信的底层协议实现是多种多样的,如 go-cqhttp、Mirai、CoolQ 等,这些协议实现之间的 API 不尽相同。因此,开发 QQ 机器人需要先选择一个合适的协议实现,然后再编写对应的适配器,以便将协议实现和 nonebot 框架连接起来,实现 QQ 机器人的功能。

    适配器可以理解为是一个桥梁,它的作用是将底层协议实现和 nonebot 框架连接起来,使它们能够互相通信。在使用 nonebot 框架开发 QQ 机器人时,需要先根据所选的底层协议实现,选择相应的适配器,然后根据适配器提供的 API 编写 QQ 机器人的功能。

    举个例子,如果您选择使用 go-cqhttp 作为底层协议实现,那么您需要安装 go-cqhttp,并选择 go-cqhttp 适配器。这个适配器将 go-cqhttp 和 nonebot 框架连接起来,使得您可以通过 nonebot 框架来编写 QQ 机器人的功能,并且 go-cqhttp 可以帮助您与 QQ 服务器通信。

    因此,在使用 nonebot 框架开发 QQ 机器人时,需要根据所选的底层协议实现,选择相应的适配器,并将其与 nonebot 框架结合使用,以实现 QQ 机器人的功能。

  3. 修改go-cqhttp配置

    修改配置 config.yml文件,找到如下位置,修改地址及端口号,后面nonebot机器人安装要用到的

    ......
    # 反向WS设置
      - ws-reverse:
          # 反向WS Universal 地址
          # 注意 设置了此项地址后下面两项将会被忽略
          universal: ws://127.0.0.1:53245/cqhttp/ws
          # 反向WS API 地址
          api: ws://127.0.0.1:53245/cqhttp/api
          # 反向WS Event 地址
          event: ws://127.0.0.1:53245/cqhttp/event
    ......
    
  4. 新建nonebot qq机器人项目

    如果你已经按照推荐方式安装了 nb-cli,使用它创建一个空项目:

    nb create
    
    

    根据引导进行项目配置,完成后会在当前目录下创建一个项目目录,项目目录内包含 bot.py

    如果未安装 nb-cli,使用你最熟悉的编辑器或 IDE,创建一个名为 bot.py 的文件,内容如下(这里以 onebot.v11适配器为例):

    import nonebot
    from nonebot.adapters.onebot.v11 import Adapter as ONEBOT_V11Adapter
    
    nonebot.init()
    app = nonebot.get_asgi()
    
    driver = nonebot.get_driver()
    driver.register_adapter(ONEBOT_V11Adapter)
    
    nonebot.load_builtin_plugins("echo")
    nonebot.load_from_toml("pyproject.toml")
    
    if __name__ == "__main__":
        nonebot.logger.warning("Always use `nb run` to start the bot instead of manually running!")
        nonebot.run(app="__mp_main__:app")
    
  5. 继续配置编辑 .env.prod 文件端口,这里的53245就是上面设置的cqhttp端口一致,第四行是超级管理员qq

    DRIVER=~fastapi
    HOST=127.0.0.1  # 配置 NoneBot 监听的 IP/主机名
    PORT=53245  # 配置 NoneBot 监听的端口
    DEBUG=true  # 开启 debug 模式 **请勿在生产环境开启**
    SUPERUSERS=["123456789", "987654321"]  # 配置 NoneBot 超级用户
    NICKNAME=["awesome", "bot"]  # 配置机器人的昵称
    COMMAND_START='["/"]'   # 配置命令起始字符
    

    在命令行使用如下命令即可运行这个 NoneBot 实例:

    # nb-cli
    nb run
    # 其他
    python3 bot.py
    

    运行后会产生类似如下日志:

    09-14 21:02:00 [INFO] nonebot | Succeeded to import "nonebot.plugins.base"
    09-14 21:02:00 [INFO] nonebot | Running NoneBot...
    09-14 21:02:00 [INFO] uvicorn | Started server process [1234]
    09-14 21:02:00 [INFO] uvicorn | Waiting for application startup.
    09-14 21:02:00 [INFO] uvicorn | Application startup complete.
    09-14 21:02:00 [INFO] uvicorn | Uvicorn running on http://127.0.0.1:53245 (Press CTRL+C to quit)
    

至此,所有的配置都over了

我们来看一下最终效果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MeRI14H8-1678427983275)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d384c2a2-882d-452c-84b3-1bfe17e49279/Untitled.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BFxZ7IWW-1678427983276)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4ec65a12-3b0e-41bb-9a33-a8d0dc776601/Untitled.png)]

声明:本博客为基础学习性质,想要更加深入了解请自行研究官方文档

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

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

相关文章

日读300篇文献的技巧

感觉自己看文章很慢,有时候也抓不住重点。 如果是英文文献的话,可能还要有点难度,毕竟英语渣渣还是需要有中文-》英文的转换过程。 最近在搞毕业论文的时候,发现了一个非常好玩的东西,大大提升了我看文章搞科研&#x…

idea maven:Unable to import maven project /idea maven工程加载报错

文章目录前言一、报错截图二、设置maven三、更换maven版本前言 idea工具中导入maven工程有时候会遇到Unable to import maven project的报错,并且pom依赖中的依赖包没有加载出来,这里总结一下我遇到的问题与解决方法。 系统环境:jdk 1.8 m…

Docker的可视化界面工具

Docker的可视化界面工具1. Portainer1.1 Introduction1.1.1 Official1.2 Download And Deploy1.3 Dashboard1.3.1 Dashboard2. Shipyard2.1 Introduction2.1.1 Character2.1.2 Official2.2 Download And Deploy2.2.1 脚本下载镜像2.2.2 执行脚本2.2.2 查看下载的镜像2.3 Dashbo…

【学习Docker(八)】Docker Canal的安装与卸载

座右铭:《坚持有效输出,创造价值无限》 最近想了解下canal,自行搭建并完成数据同步。经过了几天的踩坑之旅,今天终于搭建成功了。 环境:canalv1.1.5、MySQL8.0、JDK1.8 安装MySQL 创建存放目录 mkdir /docker-localm…

蓝桥杯单片机第九届省赛编程题(深夜学习——单片机)

一、根据硬件框图初始化好要使用的外设推测出外设类型&#xff1a;PCF8591、矩阵按键、AT24C02、LED、数码管&#xff08;定时器&#xff09;创建工程模板&#xff1a;&#xff08;1&#xff09;主函数&#xff1a;#ifndef PBBLIC_H #define PBBLIC_H#include <STC15F2K60S2…

SpaceNet 建筑物检测

SpaceNet 建筑物检测 该存储库提供了一些 python 脚本和 jupyter 笔记本来训练和评估从SpaceNet卫星图像中提取建筑物的卷积神经网络。 用法

直播回顾 | 聚焦科技自立自强,Bonree ONE 助力国产办公自动化平稳替代

3月5日&#xff0c;两会发布《政府工作报告》&#xff0c;强调科技政策要聚焦自立自强。 统计显示&#xff0c;2022年金融信创项目数同比增长300%&#xff0c;金融领域信创建设当前已进入发展爆发期&#xff0c;由国有大型银行逐渐向中小型银行、非银金融机构不断扩展。信创云…

全生命周期的云原生安全框架

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/129423036 一、全生命周期的云原生安全框架 如图所示&#xff1a; 二、框架说明 在上图中&#xff0c;我们从两个维度描述各个安全机制&#xff0c;横轴是开发和运营阶段&#xff0c;细分为编码、测试…

Grial UI Kit updated Crack

Grial UI Kit updated Crack 增加了“电影”流&#xff0c;该流由3个屏幕组成&#xff0c;呈现平滑过渡和动画的电影目录。 添加了新的栅格导航栏控件&#xff0c;允许您使任何页面导航栏透明&#xff0c;也可以从带有实心导航栏的页面导航到带有透明导航栏的网页&#xff0c;反…

指针数组 数组指针 常量指针 指针常量 函数指针 指针函数

一、指针常量与常量指针 1、指针常量 本质上是一个常量&#xff0c;常量的类型是指针&#xff0c;表示该常量是一个指针类型的常量。在指针常量中&#xff0c;指针本身的值是一个常量&#xff0c;不可以改变&#xff0c;始终指向同一个地址。在定义的时候&#xff0c;必须要初…

npm安装依赖和package.json版本不一致解决

npm或者cnpm 安装依赖&#xff0c;不会完全按照package.json中的版本号来&#xff0c;会有稍微的差异&#xff0c;这样的差异可能导致项目起不来&#xff0c;或者报错&#xff0c; 因为某些包只有特定的版本才能正常运行。 解决方案 npm提供了shrinkwrap命令来解决这个问题。 …

opencv-图像几何处理

缩放 缩放只是调整图像的大小。为此&#xff0c;opencv提供了一个cv2.resize()函数&#xff0c;可以手动指定图像大小&#xff0c;也可以指定缩放因子。你可以使用任意一种方法调整图像的大小&#xff1a; import cv2 from matplotlib import pyplot as pltlogo cv2.imread(…

害我走了8年弯路,接口测试和性能测试的区别原来是这几点,终于点通了......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 性能测试和接口测试…

Allegro如何知道组合操作命令的拼写

Allegro如何知道组合操作命令的拼写 前面介绍了如何知道单个操作命令的拼写,但如果是复合命令,就无法直观的通过命令来了解,如下图 Snap Pick to -Segment这个命令拼写是什么 如何知道,具体操作如下 点击File点击Script 出现Scripting窗口

itextpdf生成报文总结

1.使用itextpdfgradle引入依赖compile ("com.itextpdf:itextpdf:5.5.13") compile ("com.itextpdf:itext-asian:5.2.0") compile ("com.itextpdf.tool:xmlworker:5.5.13")参考&#xff1a;https://www.cnblogs.com/ssslinppp/p/4976922.htmlhttp…

Linux性能补丁升级,避免不必要的跨核Wake-Up

导读一个由英特尔发起的、旨在改进Linux内核公平调度程序代码的补丁系列&#xff0c;也看到了来自AMD工程师和其他利益相关者的测试/反馈&#xff0c;并继续进行改进。这个补丁系列的重点是避免在不必要的情况下发生过多的跨核唤醒(Cross-CPU Wake-up)。这样一来&#xff0c;这…

Unity合批处理

一.静态合批标记为Batching Static的物体&#xff08;标记后物体运行不能移动、旋转、缩放&#xff09;在使用相同材质球的条件下在项目打包的时候unity会自动将这些物体合并到一个大Mesh*缺点打包后体积增大运行时内存占用增大二.动态批处理不超过300个顶点不超过900个属性不包…

手机通讯录--课后程序(Python程序开发案例教程-黑马程序员编著-第5章-课后作业)

实例2&#xff1a;手机通讯录 通讯录是记录了联系人姓名和联系方式的名录&#xff0c;手机通讯录是最常见的通讯录之一&#xff0c;人们可以在通讯录中通过姓名查看相关联系人的联系方式、邮箱、地址等信息&#xff0c;也可以在其中新增联系人&#xff0c;或修改、删除联系人信…

MySQL高级—约束与关系

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; 目录 一、约束 1.约束的基本概念 2.分类 二、关系 1.一对多 2.多对多 3.一对一 三、多表查询 1.多查 2.连接查询 3.子查询 一、约束 1.约束的基本概念 数据库的表示用来存储数据的&#xff0c;为了保证…

PID控制算法详解

1. 前言 PID 即 Proportional&#xff08;比例&#xff09;&#xff0c;Integral&#xff08;积分&#xff09;&#xff0c;Differential&#xff08;微分&#xff09;的英文缩写。顾名思义&#xff0c;PID 控制算法是结合比例&#xff0c;积分和微分三种环节于一体的自动控制…