当前位置: 首页 > news >正文

【CICID】GitHub-Actions语法

[TOC]

【CICID】GitHub-Actions语法

1 场景

​ 当我们开发过程中,经常需要提交代码,打包,部署新代码到对应的环境,整个过程都是人工手动操作,占据开发人员大量时间,并且很繁琐容易出错。所以需要借助一些CI/CD工具让这整个流程自动化,节约生命。

​ 一般公司都有自己的CICD工具或平台,但如何搭建一个属于自己的一套CICD工作流呢?

​ 常见的CI/CD工具有Jenkins、GitLab、GitHub Actions等,各有优缺点,自行百度吧~

​ 考虑代码都在GitHub托管,也不用额外购买服务器,最终选定GitHub Actions方式

附:推荐参考

  • 如果公司已有完整的代码托管平台,希望尽量少改动已有的工作流程,选 Jenkins
  • 如果是公司使用+新项目,选GitLab,自带代码托管和CICD
  • 如果是个人项目,希望可以使用免费资源,选Github Actions
  • 如果是个人项目+有自己服务器,也可以选GitLab

2 CI/CD

2.1 什么是CI/CD

  • CI/CD 属于DevOps,代表持续集成、持续部署

  • CI/CD自动化上将新代码从提交到生产,配置基础设施所需的大部分或全部手动人工干预流程

  • 借助CI/CD,开发人员可以对代码进行更改,然后自动测试并推出,以进行持续部署

  • 以实现停机时间最小化,代码发布速度更快

2.2 持续集成(CI)

​ 持续集成是在提交或合并代码时,自动测试每个更改,并自动启动构建。可以大大减少开发和运维人员的重复工作,可以在软件开发生命周期的更早阶段更轻松的发现并修复错误和安全问题。

2.3 持续部署(CD)

​ 持续交付是一种软件开发实践,一般与持续集成结合使用,以自动化基础设置供应和应用程序发布过程。

​ 一旦代码作为 CI 流程的一部分进行了测试和构建,持续交付将在最后阶段接管,以确保可以随时部署并将部署所需要的环境打包在一起。

​ 通过持续交付,可以随时将构建的软件部署到生产环境。可以手动触发部署,也可以进行自动化部署。

3 介绍

​ GitHub Actions 是一种持续集成和持续交付 (CI/CD) 平台,可用于自动执行生成、测试和部署管道。 您可以创建工作流程来构建和测试存储库的每个拉取请求,或将合并的拉取请求部署到生产环境。

3.1 优点

  • GitHub直接托管代码

  • Actions直接依赖于Github,不需额外安装任何东西

  • 集成部署常用依赖库

  • 支持Docker

  • 不需要额外购买服务器搭建服务(重点!)

4 工作流常用语法

官网文档:https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions

​ 工作流文件使用 YAML 语法,并且必须具有 .yml.yaml 文件扩展名。

4.1 name : 工作流名称

name: 这是工作流名称        

4.2 on : 触发工作流时机

  • on. .types

    定义将触发工作流运行的事件活动类型

    # 代码push 或者 fork等时触发
    on:# 当向分支进行git push时触发该工作流push:branches:- "main"# 当向分支合并分支时触发该工作流pull_request:branches:- "main"
    • 事件类型:https://docs.github.com/zh/actions/using-workflows/events-that-trigger-workflows
  • on.<push|pull_request>.<branches|tags>

    定义事件筛选器,可让你更好地控制工作流的运行时间,可以指定分支和分支版本

    name: MYCI
    on:push:branches:- master
  • on.<push|pull_request>.paths

    使用 pushpull_request 事件时,指定文件路径生效

    • 指定路径
    on:push:paths:- '**.js'
    • 排除路径

      on:push:paths-ignore:- 'docs/**'
  • on.schedule

    定义触发事件,使用 cron

    on:schedule:# 每天 5:30 和 17:30 UTC 触发工作流程- cron: '30 5,17 * * *'# 每周一至周四 5:30- cron: '30 5 * * 1,3'- cron: '30 5 * * 2,4'

4.3 jobs : 作业

工作流运行由一个或多个 jobs 组成,默认情况下并行运行。

  • jobs.

    使用 jobs.<job_id> 为作业提供唯一标识符,是一个字符串

    jobs:my_first_job:name: My first jobmy_second_job:name: My second job
  • jobs. .name

    设置作业名称

  • jobs. .needs

    此作业之前必须成功完成的所有作业

    • 要求成功的依赖项作业

      按顺序执行 job1 -> job2 -> job3

    jobs:job1:job2:# 依赖job1完成needs: job1job3:# 依赖job1和job2完成needs: [job1, job2]
    • 无论是否成功,都要执行 always()

      按顺序执行 job1 -> job2 -> job3 ,但job3 无论是否成功,都会执行

    jobs:job1:job2:needs: job1job3:if: ${{ always() }}needs: [job1, job2]
  • jobs. .runs_on

    定义要运行环境

    • 指定操作系统
    runs-on: ubuntu-latest
    • 公共免费GitHub托管的标准运行器

      image-20240609112206015

  • jobs. .steps

    作业包含一系列任务,称为 steps步骤,步骤可以运行命令、运行设置任务,每个步骤在运行器环境中以其自己的进程运行,且可以访问工作区和文件系统,步骤之间不会保留环境变量的更改。

    • jobs. .steps[*].uses

      选择要作为作业中步骤的一部分运行的操作,

      jobs:my-jobname:steps:# checkout出v1版本代码- uses: actions/checkout@v1
  • jobs. .timeout-minutes

    工作执行超时时间,超过则取消,默认 360分钟(6小时)

  • jobs. .strategy

    作业使用的矩阵策略,根据定义数组的笛卡尔积,创建作业

    jobs:example_matrix:strategy:matrix:version: [10, 12]os: [ubuntu-latest, windows-latest]

    根据上述矩阵,按顺序创建作业

    • {version: 10, os: ubuntu-latest}
    • {version: 10, os: windows-latest}
    • {version: 12, os: ubuntu-latest}
    • {version: 12, os: windows-latest}
  • jobs. .container

    注意:如果工作流使用 Docker 容器操作、作业容器或服务容器,则必须使用 Linux 运行器:

            * 如果您要使用 GitHub 托管的运行器,则必须使用 Ubuntu 运行器。* 如果您要使用自托管运行器,则必须使用 Linux 机器作为运行器,并且必须安装 Docker。

    用于运行作业中尚未指定容器的任何步骤的容器

    • 在容器中运行作业

      name: CI
      on:push:branches: [ main ]
      jobs:container-test-job:# 运行的外部环境runs-on: ubuntu-latest# 环境下运行的容器(Docker定义)container:# 容器中使用镜像image: node:18# 容器中定义环境env:NODE_ENV: development# 容器中定义端口ports:- 80# 容器中定义映射位置volumes:- my_docker_volume:/volume_mountoptions: --cpus 1steps:- name: Check for dockerenv filerun: (ls /.dockerenv && echo Found dockerenv) || (echo No dockerenv)
      
    • 只指定容器映像时,可以忽略 image 关键词

      jobs:container-test-job:runs-on: ubuntu-latestcontainer: node:18
  • jobs. .services

    注意:如果工作流使用 Docker 容器操作、作业容器或服务容器,则必须使用 Linux 运行器:

    • 如果您要使用 GitHub 托管的运行器,则必须使用 Ubuntu 运行器。

    • 如果您要使用自托管运行器,则必须使用 Linux 机器作为运行器,并且必须安装 Docker。

    多个服务编排

    services:# 1. nginx服务nginx:image: nginx# ngxin 80 映射 docker 8080端口 ports:- 8080:80# 2. redis服务redis:image: redis# ngxin 6379 映射 docker 6379 ports:- 6379/tcp
  • 单个事件

    # 代码push
    on: push    
  • 多个事件

    # 代码push 或者 fork
    on:[push,fork]
    • 指定分支触发

      name: MYCI
      on:push:branches:- master

​ 时机类型:https://docs.github.com/zh/actions/using-workflows/events-that-trigger-workflows

5 环境变量

Github action 定义变量很多方式,很容易搞混,记录下常用方式

口诀:

  • 普通使用 $xxx,

  • 命令行或字符串拼接使用 ${xxx},

  • 遇到uses则用${{xxxx}}

    使用别人写好的Action,要用两个花括号

5.1 自定义变量

5.1.1 在env中定义变量

定义变量

jobs:build:runs-on: ubuntu-latestenv:# 端口号Port: 8080# 云服务地址Host_IP: ${{secrets.REMOTE_SERVER01_IP}}  # 云服务密码Host_PWD: ${{secrets.REMOTE_SERVER01_PWD}}# 账号Host_Role: root# 路径Host_Dir: "/cicd"

变量取值

  • 普通使用,$xxx
# 测试环境变量
- name: Use variable from environmentrun: |echo "端口号:$Port"echo "服务器地址: $Host_IP"
  • 有命令行或拼接使用,${xxxx}
 # 上传新的docker镜像
- name: upload new docker image and start-up scriptrun:sshpass -p ${Host_PWD} scp -r -o StrictHostKeyChecking=no ./${FILE_NAME}.tar ${Host_Role}@${Host_IP}:${Host_Dir}
  • 当使用外部uses时,${{env.xxx}}

    run 里面也要用 ${{env.xxx}}

# 加载tar文件,加载docker镜像
- name: Load new docker imageuses: matheusvanzan/sshpass-action@v2with:host: ${{env.Host_IP}}user: ${{env.Host_Role}}pass: ${{env.Host_PWD}}run:docker load -i ${{env.Host_Dir}}/${{env.FILE_NAME}}.tar

5.1.2 Run通过写入到github变量

在run里面定义了变量,需要给后面step使用,一定要写入github环境中echo "key=$xxx" >> "$GITHUB_ENV"

定义

 steps:# 定义环境变量- name: Define environment variablesrun: |# 定义全局变量PROJECT_NAME=$(basename $GITHUB_REPOSITORY | tr '[:upper:]' '[:lower:]')FILE_NAME=${PROJECT_NAME}-backendVERSION=0.1# 写入环境中echo "PROJECT_NAME=$PROJECT_NAME" >> "$GITHUB_ENV"echo "FILE_NAME=$FILE_NAME" >> "$GITHUB_ENV"echo "VERSION=$VERSION" >> "$GITHUB_ENV"

取值

  • 普通使用,$xxx

     # 测试环境变量
    - name: Use variable from environmentrun: |echo "项目名称 (从环境变量): $PROJECT_NAME"echo "文件名称 (从环境变量): $FILE_NAME"echo "项目版本 (从环境变量): $VERSION"
  • 有命令行或拼接使用,${xxxx}

     # 构建镜像
    - name: Build docker imagerun: |docker build -t ${FILE_NAME}:${VERSION} .    # 构建docker镜像,命令最后的点代表Dockerfile所在目录
  • 当使用外部uses时,${{env.xxx}}

    # 删除旧的docker镜像压缩包
    - name: Delete old docker taruses: matheusvanzan/sshpass-action@v2with:host: ${{env.Host_IP}}user: ${{env.Host_Role}}pass: ${{env.Host_PWD}}run: |echo "Attempting to delete ${{env.Host_Dir}}/${{env.FILE_NAME}}.tar"rm -rf ${{env.Host_Dir}}/${{env.FILE_NAME}}.tar

5.2 默认环境变量

  • 地址:

    https://docs.github.com/zh/codespaces/developing-in-a-codespace/default-environment-variables-for-your-codespace#list-of-default-environment-variables

环境变量说明
CODESPACE_NAME代码空间的名称 例如,octocat-literate-space-parakeet-mld5
CODESPACES在代码空间中始终为 true
GIT_COMMITTER_EMAIL未来 git 提交的“作者”字段的电子邮件。
GIT_COMMITTER_NAME未来 git 提交的“提交者”字段的名称。
GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN返回 GitHub Codespaces 转发端口的域。 例如 app.github.dev
GITHUB_API_URL返回 API URL。 例如 https://api.github.com
GITHUB_GRAPHQL_URL返回 GraphQL API URL。 例如 https://api.github.com/graphql
GITHUB_REPOSITORY所有者和仓库名称。 例如,octocat/Hello-World
GITHUB_SERVER_URL返回 GitHub 服务器的 URL。 例如,https://github.com
GITHUB_TOKEN代表代码空间中用户的签名身份验证令牌。 您可以使用它对 GitHub API 进行经过身份验证的调用。 有关详细信息,请参阅“GitHub Codespaces 中的安全性”。
GITHUB_USER启动代码空间的用户的名称。 例如,octocat
  • 使用方式

    • 项目名称: ${GITHUB_REPOSITORY}

    • 分支名称:${GITHUB_REF##*/}

      • refs/heads/main -> main

      • refs/tags/v1.0.0 -> v1.0.0

    示例

    
    - name: Print Environmentrun: | echo $GITHUB_REPOSITORY   # 仓库全名echo ${GITHUB_REF##*/}

6 常用示例

  • 定义环境变量

     - name: Define environment variablesrun: |# 定义全局变量# 当前项目名(小写)PROJECT_NAME=$(basename $GITHUB_REPOSITORY | tr '[:upper:]' '[:lower:]')# 文件名FILE_NAME=${PROJECT_NAME}-backend# 常量VERSION=0.1# 写入环境中echo "PROJECT_NAME=$PROJECT_NAME" >> "$GITHUB_ENV"echo "FILE_NAME=$FILE_NAME" >> "$GITHUB_ENV"echo "VERSION=$VERSION" >> "$GITHUB_ENV"
  • 拉取代码

    # 拉取最新代码
    - name: Pull latest codeuses: actions/checkout@v3       # 使用官方的checkout action,用于将仓库中的最新代码检查并拉取到工作目录中
  • 连接远程服务器操作

    # 连接远程服务器操作
    - name: SSH Commondsuses: matheusvanzan/sshpass-action@v2with:host: "远程主机IP"user: rootpass: "远程主机密码"run: |# 命令行pwdls
  • 传输文件

    # 上传新的docker镜像
    - name: upload new docker image and start-up scriptrun:# sshpass -p 远程服务器密码 scp -r -o StrictHostKeyChecking=no 当前文件 账号@远程服务器地址:目标目录sshpass -p ${Host_PWD} scp -r -o StrictHostKeyChecking=no ./${FILE_NAME}.tar ${Host_Role}@${Host_IP}:${Host_Dir}

7 参考资料

  • 【CICD】github新功能actions全方位讲解!!

    https://www.bilibili.com/video/BV1RE411R7Uy/?spm_id_from=333.337.search-card.all.click&vd_source=1d31e698afb74bb3222db3bb76f9b408

  • GitHub文档-Actions

    https://docs.github.com/zh/actions/learn-github-actions/understanding-github-actions

  • GitHub Actions 的工作流语法

​ https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions

  • Github Actions 的一份不完全指南

    https://ucaskernel.com/d/822-github-actions

遇到问题

  • run 报错: bash: -c: line 1: syntax error: unexpected end of file

    如下图所示:

    - name: xxxxwith:run: | echo "只有一条命令会报错"

    image-20240615183702798

    原因:run后面的 |: 运行执行多个命令,但一条命令时会报错

    解决方法:

    # 单条命令,去掉run后面的 `|`
    - name: xxxxwith:run: echo "只有一条命令会报错"# 多条命令
    - name: xxxxwith:run: | echo "只有一条命令会报错"echo "两条命令就不会报语法错误"

相关文章:

【CICID】GitHub-Actions语法

[TOC] 【CICID】GitHub-Actions语法 1 场景 ​ 当我们开发过程中&#xff0c;经常需要提交代码&#xff0c;打包&#xff0c;部署新代码到对应的环境&#xff0c;整个过程都是人工手动操作&#xff0c;占据开发人员大量时间&#xff0c;并且很繁琐容易出错。所以需要借助一些…...

Ionic 创建 APP

Ionic 创建 APP Ionic 是一个强大的开源框架,用于构建高性能、高质量的移动和网页应用程序。它结合了 Angular、React 或 Vue 的强大功能,以及 Capacitor 或 Cordova 的原生功能,使得开发者可以轻松地创建跨平台的应用程序。本篇文章将指导您如何使用 Ionic 创建一个基本的…...

【数学代码】幂

Hello!大家好&#xff0c;我是学霸小羊&#xff0c;今天来讲讲幂。 求几个相同因数的积的运算&#xff0c;叫做乘方&#xff0c;乘方的结果叫做幂。 a^n&#xff0c;读作 “ a的n次方 ” 或 “ a的n次方幂”&#xff0c;a叫做底数&#xff0c;n叫做指数。 对于底数、指数和幂…...

os.system() 函数

os.system() 是 Python 标准库 os 模块中的一个函数&#xff0c;用于在子终端中运行系统命令。它可以在 Python 脚本中调用外部命令或程序。具体来说&#xff0c;它通过执行命令字符串并返回执行状态来实现这一点。下面是对 os.system() 函数的详细解释&#xff1a; import os…...

Spring Boot中的RESTful API详细介绍及使用

在Spring Boot中&#xff0c;RESTful API的实现通过控制器类中的方法和特定的注解来完成。每个注解对应不同的HTTP请求方法&#xff0c;并通过处理请求参数和返回响应来实现不同的操作。 下面将详细解释RESTful API中的各个方面&#xff0c;包括GetMapping, PostMapping, PutMa…...

nlp学习笔记

目录 很多入门例子 bert chinese 很多入门例子 https://github.com/lansinuote/Huggingface_Toturials bert chinese import torch import torch.nn as nn from transformers import AutoTokenizer, AutoModel, BertModel, TFBertModel, BertTokenizer# youpath = D:/bert-…...

使用python获取内存信息

#!/usr/bin/python # -*- coding:utf-8 -*- psutil模块是一个跨平台的获取进程和系统应用情况&#xff08;CPU&#xff0c;内存&#xff0c;磁盘&#xff0c;网络&#xff0c;传感器&#xff09;的库。 该模块用于系统监控、限制进程资源和运行进程的管理等方面。 内存信息&am…...

外包公司泛滥,这些常识你应该提前知道?

今年大环境确实很不好 很多985,211的应届生都在网上大吐苦水&#xff0c;很多大龄离职大厂的技术人也好&#xff0c;业务人也好&#xff0c;都纷纷转向短视频平台做起了自媒体。而找工作的人普遍发现&#xff0c;某最火的招聘平台几乎都被外包公司刷屏了。大大小小的外包公司如…...

Linux下的抓包工具使用介绍

应用层 传输层 网络层 数据链路层 物理层 1&#xff09;tcpdump&#xff08;传输&#xff0f;网络层&#xff09; tcpdump -i eth0 tcpdump -i eth0 -vnn -v&#xff1a;显示包含有TTL&#xff0c;TOS值等等更详细的信息 -n&#xff1a;不要做IP解析为主机名 -nn&#xff1a;…...

centos环境上:k8s 简单安装教程

本次演示安装3节点k8s环境&#xff0c;无需多言&#xff0c;直接上操作步骤&#xff1a; 1、环境准备 k8s部署前&#xff0c;首先需要准备好环境&#xff0c;除了1.4 步骤&#xff0c;其他步骤在所有&#xff08;3个&#xff09;节点上都要执行&#xff1a; 1.1 关闭防火墙 s…...

短视频矩阵系统/源码搭建---拆解热门视频功能开发上线

短视频矩阵系统/源码搭建 一、短视频矩阵系统源码开发需要用到以下技术&#xff1a; 1.前端技术&#xff1a;HTML、CSS、JavaScript、Vue.js等前端框架。 2.后端技术&#xff1a;Java、Python、PHP等后端语言及相关框架&#xff0c;如Spring Boot、Django、Laravel等。 3.移…...

手机和模拟器的 Frida 环境配置

目录 一、配置 JDK 和 android 环境 二、连接设备和查看权限 1、连接设备 2、查看手机权限 三、手机配置 Frida 1、frida-server下载 2、验证 四、模拟器配置 Frida 1、下载模拟器并调节成手机版&#xff1a; 2、连接并查看架构 3、配置并开启 x86 的 frida-serve…...

力扣1385.两个数组间的距离值

力扣1385.两个数组间的距离值 二分判断答案是否正确 class Solution {public:int findTheDistanceValue(vector<int>& arr1, vector<int>& arr2, int d) {ranges::sort(arr2);ranges::sort(arr1);int m arr2.size();auto check [&](int low,int h…...

[C++] 小游戏 斗破苍穹 2.11.6 版本 zty出品

大家好&#xff0c;今天zty带来的是斗破苍穹的 2.11.6 版本&#xff0c;这个版本主要更新了&#xff1a;1、背包 2、将退出游戏改到了设置里面 3、如果不逃跑不会停止战斗。废话不多说&#xff0c; 先赞后看 养成习惯 code #include<stdio.h> #include<iostrea…...

认识与学习JSP

JSP核心技术 什么是JSP JSP全称是Java Server Pages&#xff0c;它和servle技术一样&#xff0c;都是SUN公司定义的一种用于开发动态web资源的技术。JSP/Servlet规范。JSP实际上就是Servlet JSP这门技术的最大的特点在于&#xff0c;写jsp就像在写html&#xff0c;但它相比htm…...

MySql 各种 join

MySql 定义了很多join的方式&#xff0c;接下来我们用一个例子来讲解。 用到的表 本文用到了两个表s1,s2&#xff1a; 内外连接 测试 1 1 1.select * from s1 inner join s2 on(s1.id s2.id);&#xff1a; -------- | id | id | -------- | 3 | 3 | | 4 | 4 | --------2…...

【Android面试八股文】Android中操作多线程的方式有哪些?

文章目录 1. 使用 `Thread` 和 `Runnable`2. `AsyncTask`3. `Handler` 和 `Looper`4. `HandlerThread`5. `ThreadPoolExecutor`6. `IntentService`7. `RxJava`8. `Coroutine`(协程)9. `WorkManager`在Android开发中,有多种方式可以进行多线程操作。以下是主要的几种方式: 1…...

语义分割和目标检测的关系

目录 1.语义分割的目标 2.目标检测的目标 3.两种任务的异同之处 从大方向的任务特点上来说 &#xff08;1&#xff09;物体的位置 &#xff08;2&#xff09;物体的分类 从数据格式来说 (1&#xff09;语义分割的数据格式 (2&#xff09;目标检测的数据格式 1.语义分…...

SpringBoot 大文件基于md5实现分片上传、断点续传、秒传

SpringBoot 大文件基于md5实现分片上传、断点续传、秒传 SpringBoot 大文件基于md5实现分片上传、断点续传、秒传前言1. 基本概念1.1 分片上传1.2 断点续传1.3 秒传1.4 分片上传的实现 2. 分片上传前端实现2.1 什么是WebUploader&#xff1f;功能特点接口说明事件APIHook 机制 …...

数据资产治理与数据质量提升:构建完善的数据治理体系,确保数据资产的高质量与准确性

一、引言 随着信息技术的迅猛发展&#xff0c;数据已经成为企业和社会发展的重要资产。然而&#xff0c;数据资产的有效治理与数据质量的提升&#xff0c;是企业实现数字化转型、提升竞争力的关键。本文旨在探讨数据资产治理与数据质量提升的重要性&#xff0c;并提出构建完善…...

SylixOS下UDP组播测试程序

SylixOS下UDP组播测试 测试效果截图如下: udp组播发送测试程序。 /********************************************************************************************************* ** ** 中国软件开源组织 ** ** …...

Web前端快速开发平台:革命性工具,提升开发效率的新篇章

Web前端快速开发平台&#xff1a;革命性工具&#xff0c;提升开发效率的新篇章 在数字化时代的浪潮中&#xff0c;Web前端技术的快速发展与变革正在重塑我们的数字世界。为了应对这种快速变化&#xff0c;Web前端快速开发平台应运而生&#xff0c;为开发者们提供了更加高效、便…...

内窥镜系统设计简介

内窥镜系统设计简介 1. 源由2. 系统组成2.1 光学系统2.2 机械结构2.3 电子系统2.4 软件系统2.5 安全性和合规性2.6 研发与测试2.7 用户培训与支持 3. 研发过程3.1 光学系统Step 1&#xff1a;镜头设计Step 2&#xff1a;光源Step 3&#xff1a;成像传感器 3.2 机械结构Step 1&a…...

使用Spring Boot实现Redis多数据库缓存

Redis多数据库存储实现用户行为缓存 在我的系统中&#xff0c;为了优化用户行为数据的存储与访问效率&#xff0c;我引入了Redis缓存&#xff0c;并将数据分布在不同的Redis数据库中。通过这种方式&#xff0c;可以减少单一数据库的负载&#xff0c;提高系统的整体性能。 主要…...

揭秘newSingleThreadExecutor:深度解析与源码探秘

1. 概述 newSingleThreadExecutor是Java线程池框架中Executors类的一个静态方法,它返回一个线程池实例,该线程池维护一个单一的工作线程来执行任务。这个线程池的特性在于它保证了所有提交的任务会按照它们在队列中的顺序依次执行,而不会并发执行。它适用于需要保证任务顺序…...

使用python绘制三维散点图

使用python绘制三维散点图 三维散点图三维散点图的用途效果代码 三维散点图 三维散点图&#xff08;3D Scatter Plot&#xff09;是一种用于展示三维数据的图表。与二维散点图类似&#xff0c;三维散点图通过点在三维空间中的位置来表示数据点的三个特征。每个点在 x、y 和 z …...

Vue51-插件

一、插件的定义 vue里面的插件&#xff0c;类似于游戏的外挂。 vue中插件的本质&#xff1a;一个对象&#xff0c;里面必须包含install方法。 二、插件的使用 2-1、创建一个插件js文件&#xff08;写在src中plugins.js&#xff09; 2-2、应用插件&#xff1a;Vue.use(插件) …...

python将一个整数转为字符串列表

如果你想要将一个整数转换为字符串列表&#xff0c;其中每个数字&#xff08;0-9&#xff09;都是列表中的一个元素&#xff0c;你可以先将整数转换为字符串&#xff0c;然后遍历这个字符串&#xff0c;将每个字符添加到列表中。这里是一个简单的示例&#xff1a; # 假设你有一…...

PTA 6 - 20 汉诺塔问题(py 递归)

这道题是一道比较典型的递归问题&#xff0c;他跟斐波那契数列的本质是一样的&#xff0c;大家自己动手推理一下&#xff0c;非常好推 参考代码&#xff1a; def hanoi(n,a,b,c):global stepif n 1:print(a,"->",c)step 1else:hanoi(n-1,a,c,b)print(a,"…...

深度学习Day-20:DenseNet算法实战 乳腺癌识别

&#x1f368; 本文为&#xff1a;[&#x1f517;365天深度学习训练营] 中的学习记录博客 &#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制] 一、 基础配置 语言环境&#xff1a;Python3.8编译器选择&#xff1a;Pycharm深度学习环境&#xff1a; torch1.12.1c…...

福州网站制作计划/守游网络推广平台登陆

【下载一键安装软件包】 百度云地址&#xff1a;https://pan.baidu.com/s/1TZqGKtE-46gxW96Ptfp4gA 网址&#xff1a;https://lnmp.org/ 【步骤】 通过第三方远程工具将软件包传入后,使用tar命令解压,进入解压后的文件夹,执行install.sh,如果是无人值守的请在官网生成无人值守脚…...

网站建设的构思/推广软文范例大全500

一提到iPhone很自然而然的就会想到流畅&#xff0c;顺滑如斯&#xff0c;虽然近几年安卓手机也不卡&#xff0c;但是和iOS的流畅还是有很大差别的&#xff0c;说道这里使用安卓的小伙伴肯定会说&#xff0c;安卓现在比iOS都要流畅&#xff0c;安卓早已不是原来的安卓。但是我想…...

网站建设推广怎么做/网站流量统计分析的维度包括

原文链接&#xff1a;http://www.phpweblog.net/AngelLee2009/archive/2009/08/16/6848.html 1&#xff0e;什么是模式&#xff1f; 模式&#xff0c;即pattern。其实就是解决某一类问题的方法论。你把解决某类问题的方法总结归纳到理论高度&#xff0c;那就是模式。 Alexand…...

凡科的网站做seo比较难/新网站怎么做优化

java Scirpt基础介绍 JavaScript基础第01天 1 - 编程语言 1.1 编程 编程&#xff1a; 就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码&#xff0c;并最终得到结果的过程。 计算机程序&#xff1a; 就是计算机所执行的一系列的指令集合&#xff0c;而程序全…...

企业有域名怎么做网站/建站优化推广

基本演练操作 1.下载 Fantasy Skybox FREE&#xff0c; 构建自己的游戏场景 建立天空盒 制作一个 6 面体材料 &#xff0c;点击菜单 Assets - create - Material&#xff0c;再点击Inspector - shader - skybox - 6 sided &#xff0c;按前后、上下、左右拖入 6 个图片 - 制作…...

网站显示备案号/深圳百度网站排名优化

首先声明&#xff0c;我是一个菜鸟。一下文章中出现技术误导情况盖不负责 1、删除原有的yum: rpm -aq | grep yum | xargs rpm -e –nodeps 2、安装新的yum 《1》rpm –ivh http://mirrors.163.com/centos/6/os/x86_64/Packages/python-iniparse-0.3.1-2.1.el6.noarch.rpm 注&…...