【Web开发】Python实现Web服务器(Docker下部署Flask)

news2024/12/28 9:35:49

在这里插入图片描述

🍺基于Python的Web服务器系列相关文章编写如下🍺:

  1. 🎈【Web开发】Python实现Web服务器(Flask快速入门)🎈
  2. 🎈【Web开发】Python实现Web服务器(Flask案例测试)🎈
  3. 🎈【Web开发】Python实现Web服务器(Flask部署上线)🎈
  4. 🎈【Web开发】Python实现Web服务器(Flask+Tornado+nginx)🎈
  5. 🎈【Web开发】Python实现Web服务器(Ubuntu下安装Flask)🎈
  6. 🎈【Web开发】Python实现Web服务器(Ubuntu下打包Flask)🎈
  7. 🎈【Web开发】Python实现Web服务器(Ubuntu下调试Flask)🎈
  8. 🎈【Web开发】Python实现Web服务器(Ubuntu下Flask使用MySQL)🎈
  9. 🎈【Web开发】Python实现Web服务器(Docker下部署Flask)🎈

文章目录

  • 1、简介
  • 2、准备工作
    • 2.1 创建虚拟环境
    • 2.2 创建flask项目
    • 2.3 运行flask项目
    • 2.4 修改wsgi server
    • 2.5 安装docker
  • 3、制作docker镜像
    • 3.1 创建requirements.txt文件
    • 3.2 创建dockerfile文件
    • 3.3 配置国内docker镜像加速地址
    • 3.4 构建docker镜像
    • 3.5 查看docker镜像
    • 3.6 临时运行docker镜像
    • 3.7 停止运行docker镜像
    • 3.8 其他docker命令
  • 4、发布docker镜像
    • 4.1 注册docker hub账号
    • 4.2 给docker镜像打标签
    • 4.3 登陆docker hub
    • 4.3 push上docker hub
    • 4.4 pull下载到自己服务器
  • 结语

在这里插入图片描述

1、简介

官网地址:
https://hub.docker.com/
https://docs.docker.com/get-started/

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
在这里插入图片描述

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
在这里插入图片描述
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
在这里插入图片描述

  • Docker 的版本
    Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。

在这里插入图片描述

  • Docker 的应用场景
    Web 应用的自动化打包和发布。
    自动化测试和持续集成、发布。
    在服务型环境中部署和调整数据库或其他的后台应用。
    从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
    在这里插入图片描述
    Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
    在这里插入图片描述

Docker 包括三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
    Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
    Docker容器(container) 和 Docker镜像(Images) 以及 Docker仓库 并称为 Docker 的三大核心概念。
    Docker 容器通过 Docker 镜像来创建。
    在这里插入图片描述

2、准备工作

2.1 创建虚拟环境

新建测试文件夹:

mkdir mytest
cd mytest

在这里插入图片描述
创建虚拟环境:

python3 -m venv myvenv

在这里插入图片描述
激活虚拟环境:

source myvenv/bin/activate

在这里插入图片描述

2.2 创建flask项目

在文件夹mytest下,创建一个demo.py启动文件,代码如下:

  • demo.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'hello docker & flask & 爱看书的小沐.'

if __name__ == '__main__':
    app.run(host="0.0.0.0", debug=True)

在这里插入图片描述
另一个测试脚本文件如下:

from flask import Flask, render_template
import os

app = Flask(__name__)

@app.route('/')
def home():
    return render_template('index.html')

if __name__ == "__main__":
    port = int(os.environ.get('PORT', 5000))
    app.run(debug=True, host='0.0.0.0', port=port)

2.3 运行flask项目

输入下面命令可以测试一下是否能正常跑起来:

python demo.py

在这里插入图片描述
执行报错了,需要安装flask库。

pip install flask

在这里插入图片描述
再执行python demo.py命令,如下:
在这里插入图片描述
flask服务器启动成功,浏览器访问如下:
在这里插入图片描述

2.4 修改wsgi server

guincorn是支持wsgi协议的http server,gevent只是它支持的模式之一 ,是为了解决django、flask这些web框架自带wsgi server性能低下的问题。
安装相关库如下:

pip install gunicorn gevent flask

在这里插入图片描述

同时在mytest目录下新建配置文件gunicorn.conf.py

  • gunicorn.conf.py
workers = 5    # 定义同时开启的处理请求的进程数量,根据网站流量适当调整
worker_class = "gevent"   # 采用gevent库,支持异步处理请求,提高吞吐量
bind = "0.0.0.0:5000"   #端口随便写,但是注意是否已经被占用。netstap -lntp

在这里插入图片描述
启动gunicorn,测试如下:

gunicorn demo:app -c gunicorn.conf.py

在这里插入图片描述
运行成功如上。

2.5 安装docker

在这里插入图片描述

  • (1)使用官方安装脚本自动安装
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# or
curl -sSL https://get.daocloud.io/docker | sh

在这里插入图片描述

  • (2)手动安装
    卸载旧版本。Docker 的旧版本被称为 docker,docker.io 或 docker-engine 。如果已安装,请卸载它们:
sudo apt-get remove docker docker-engine docker.io containerd runc

当前称为 Docker Engine-Community 软件包 docker-ce 。
安装 Docker Engine-Community,以下介绍两种方式。
在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker 。

# 更新 apt 包索引
sudo apt-get update
# 添加 Docker 的官方 GPG 密钥
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 验证您现在是否拥有带有指纹的密钥
sudo apt-key fingerprint 0EBFCD88
# 使用以下指令设置稳定版仓库
sudo add-apt-repository \
   "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \
  $(lsb_release -cs) \
  stable"

sudo apt-get install docker-ce docker-ce-cli containerd.io
apt-cache madison docker-ce
  • (3)使用 Shell 脚本进行安装
    Docker 在 get.docker.com 和 test.docker.com 上提供了方便脚本,用于将快速安装 Docker Engine-Community 的边缘版本和测试版本。
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh

卸载 docker:

# 删除安装包:
sudo apt-get purge docker-ce
# 删除镜像、容器、配置文件等内容:
sudo rm -rf /var/lib/docker

在这里插入图片描述

# 查看Docker服务状态
sudo systemctl status docker

# 停止Docker服务
sudo systemctl stop docker

# 启动Docker服务
sudo systemctl start docker

# 重启Docker服务
sudo systemctl restart docker

# 搜索Docker镜像hello-world
sudo docker search hello-world

# 拉取Docker镜像(Images)
sudo docker image pull docker.io/hello-world

# 查看Docker镜像(Images)
sudo docker image ls

# 启动Docker镜像(Images)
sudo docker run hello-world

3、制作docker镜像

3.1 创建requirements.txt文件

用来构建项目所需要的运行环境依赖:
通过命令pip freeze生成依赖文件:

pip freeze > requirements.txt
  • requirements.txt
gunicorn
gevent
flask

在这里插入图片描述

3.2 创建dockerfile文件

新建一个文件dockerfile。

  • dockerfile
FROM python:3.8

WORKDIR /xiaomu/project/

COPY requirements.txt ./
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

COPY . .

CMD ["gunicorn", "demo:app", "-c", "./gunicorn.conf.py"]  #用于指定默认的容器主进程的启动命令

在这里插入图片描述
另一个dockerfile文件例子如下:

# start by pulling the python image
FROM python:3.8-alpine

# copy the requirements file into the image
COPY ./requirements.txt /app/requirements.txt

# switch working directory
WORKDIR /app

# install the dependencies and packages in the requirements file
RUN pip install -r requirements.txt

# copy every content from the local file to the image
COPY . /app

# configure the container to run in an executed manner
ENTRYPOINT [ "python" ]

CMD ["demo.py" ]

参数解释如下:

FROM python:3.8-alpine: Since Docker allows us to inherit existing images, we install a Python image and install it in our Docker image. Alpine is a lightweight Linux distro that will serve as the OS on which we install our image
COPY ./requirements.txt /app/requirements.txt: Here, we copy the requirements file and its content (the generated packages and dependencies) into the app folder of the image
WORKDIR /app: We proceed to set the working directory as /app, which will be the root directory of our application in the container
RUN pip install -r requirements.txt: This command installs all the dependencies defined in the requirements.txt file into our application within the container
COPY . /app: This copies every other file and its respective contents into the app folder that is the root directory of our application within the container
ENTRYPOINT [ "python" ]: This is the command that runs the application in the container
CMD [ "demo.py" ]: Finally, this appends the list of parameters to the EntryPoint parameter to perform the command that runs the application. This is similar to how you would run the Python app on your terminal using the python view.py command

3.3 配置国内docker镜像加速地址

docker拉取镜像过慢,Docker国内镜像加速地址,docker下载镜像太慢。
可以通过修改 daemon 配置文件 /etc/docker/daemon.json 来使用加速器。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://o6ul5754.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

创建或修改/etc/docker/daemon.json文件
默认没有daemon文件,先创建。

sudo cd /etc
sudo mkdir docker
sudo cd docker
sudo vim /etc/docker/daemon.json
  • daemon.json
{
"registry-mirrors": [
"https://ung2thfc.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
}

另外vim的相关操作命令如下:

:w 保存文件但不退出vi
:w file 将修改另外保存到file中,不退出vi
:w! 强制保存,不推出vi
:wq 保存文件并退出vi
:wq! 强制保存文件,并退出vi
:q 不保存文件,退出vi
:q! 不保存文件,强制退出vi
:e! 放弃所有修改,从上次保存文件开始再编辑命令历史

加载重启docker:

systemctl daemon-reload
systemctl restart docker

验证是否成功:

docker info

在这里插入图片描述
在这里插入图片描述

测试发现拉取镜像,速度极快。

3.4 构建docker镜像

构建docker镜像(镜像它的名字随意取)。

sudo docker build -t 'xiaomu_docker' .  

在这里插入图片描述
在这里插入图片描述

3.5 查看docker镜像

sudo docker images

在这里插入图片描述

3.6 临时运行docker镜像

Docker容器运行方式总结:

# Docker单次运行的语法为:
docker run IMAGE [COMMAND] [ARG]

# Docker交互式运行的语法为:
docker run -i -t IMAGE [COMMAND] [ARG]

# Docker后台运行的语法为:
docker run -d IMAGE [COMMAND] [ARG]

执行如下命令,启动一个容器。

# docker run --name flask_container -p 80:80 flask_image
# docker run -p 5000:5000 -d flask_docker
sudo docker run -it --rm -p 5000:5000 xiaomu_docker
--name gives the container a name that can be found in docker ps output
-p instructs to publish port 80. Second 80 after semicolons tells what port nginx inside the container listens on
-d runs container detached from terminal. Logs then can be viewed by issuing docker logs command

docker run 加上–rm退出容器以后,这个容器就被删除了,方便在临时测试使用。
不加–rm 退出容器后,容器只是停止运行,数据任然被保留。 不过容器内数据卷的内容不会被删除。

-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
--volume , -v: 绑定一个卷

在这里插入图片描述
可以看到Docker镜像成功地运行起来了,并处于阻塞状态。Flask 项目已经成功部署。
在这里插入图片描述

3.7 停止运行docker镜像

sudo docker stop 830f852308af

在这里插入图片描述

3.8 其他docker命令

列出本地实例:   					docker images
删除镜像 :  					docker image rm 镜像名:标签名
查看容器:   					docker container ls -a
查看当前运行容器:   				docker ps
显示出所有容器,包括没有启动的:   docker ps -a
停止容器:   					docker stop $CONTAINER_ID
启动容器:   					docker start $CONTAINER_ID
用于查看 docker 容器的版本信息:  docker version
用于查看 docker 容器的基本信息:   docker info
删除本地一个或多个 Docker镜像:    docker rmi
用于删除本地一个或多个Docker容器: docker rm
杀掉一个或者多个正在运行的 Docker容器: docker kill
用来重新启动一个或者多个 Docker容器:   docker restart
暂停 Docker容器 中所有的进程:			docker pause
用来恢复 Docker容器 中所有的进程:		docker unpause
运行的 Docker容器 中执行命令:         docker exec
创建一个新的 Docker容器,类似 docker run -d: docker create

docker run 只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start 即可。

4、发布docker镜像

Publish your image on Docker Hub。

4.1 注册docker hub账号

在这里插入图片描述
https://hub.docker.com/

Docker Hub is the world’s largest library and community for container images。
Docker Hub is the world’s easiest way to create, manage, and deliver your team’s container applications.
在这里插入图片描述

4.2 给docker镜像打标签

在docker中,tag是一个用于给镜像打标签的命令;tag命令可以标记本地镜像,并且将其归入某一仓库,语法为“docker tag [OPTIONS] IMAGE [:TAG] [REGISTRYHOST/] [USERNAME/]NAME [:TAG]”

sudo docker tag  xiaomu_docker:latest hifisher/xiaomu_docker:latest

4.3 登陆docker hub

登录docker,输入账号密码:

sudo docker login

在这里插入图片描述
在这里插入图片描述
在docker hub网站上新建一个仓库xiaomu_docker。要创建存储库,请执行以下操作:

  • 登录Docker Hub。
  • 单击Docker Hub欢迎页面上的创建存储库:
  • 把它命名为/my private repo。
  • 将可见性设置为Private。
  • 单击“创建”。

您已经创建了第一个存储库。您应该看到:
在这里插入图片描述

4.3 push上docker hub

push上docker hub,成功之后可以登录docker网站查看是否已经存在。
将镜像推送到docker

# docker push hifisher/xiaomu_docker:tagname
sudo docker push hifisher/xiaomu_docker:latest

在这里插入图片描述

4.4 pull下载到自己服务器

docker pull 账号名/线上名称:latest

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

在这里插入图片描述

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

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

相关文章

分享112个PHP源码,总有一款适合您

PHP源码 分享112个PHP源码&#xff0c;总有一款适合您 链接&#xff1a;https://pan.baidu.com/s/1MaBtjYZk08o0eJT5_E79aQ?pwduldm 提取码&#xff1a;uldm 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c;大家下载…

实战丨从0到1搭建结算平台

一、概述我们最开始分享了O2O电商支付清结算体系&#xff0c;接着分享了如何从0-1搭建计费体系&#xff0c;接下来我们分享&#xff1a;各方的钱算完之后怎么付出去&#xff0c;也即结算平台建设的实操与设计思路。1.什么是结算&#xff1f;说结算平台之前&#xff0c;先说一下…

22年 | 年前总结 | 主业谋生存,副业谋发展

22年关键词 复盘 | 极简 | 长期主义 | 阅读 | 斜杠青年 | 一事无成 | … 当然了&#xff0c;2023也会继续延续某些关键词。 一壶清酒&#xff0c;敬这红尘也敬我 很多人都在说&#xff0c;疫情存在的时间比任何一段恋情还要长。 而我想说&#xff0c;我失败的次数还超过了做…

Java设计模式中策略模式是怎么回事/怎么替代繁琐if-else语句/如何优化条件选择语句

继续整理记录这段时间来的收获&#xff0c;详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用&#xff01; 6.3 策略模式 6.3.1 概述 定义了一系列算法&#xff0c;并将每个算法封装起来&#xff0c;使它们可以相互替代&#xff0c;且算法的变化不会影响使用算法的用户属…

【自学Python】Python注释

文章来源嗨客网&#xff08;www.haicoder.net&#xff09; Python注释 Python注释教程 用于注解说明解释程序的文字就是注释&#xff0c;注释提高了代码的阅读性。一旦程序中某部分内容被注释掉&#xff0c;则该内容将会被 Python 解释器忽略&#xff0c;换句话说&#xff0c…

一般颜色直方图

颜色直方图是一种用于图像处理和分析的图表&#xff0c;它可以显示图像中不同颜色的数量。通常&#xff0c;颜色直方图会将颜色分成几个色调区间&#xff0c;每个区间对应一个条形图&#xff0c;其中条形图的高度表示该色调区间中的像素数量。通过颜色直方图&#xff0c;你可以…

Mask RCNN网络源码解读(Ⅰ) --- 语义分割前言与转置卷积

目录 1.什么是语义分割 2.语义分割常见的数据集格式 3.常见的语义分割评价指标 4.转置卷积 1.什么是语义分割 常见分割任务&#xff1a;语义分割、实例分割、全景分割 图一 原始图片图二 语义分割图三 实例分割语义分割&#xff08;例如FCN网络&#xff09;可以理解为一个…

开发与项目经理之间的打情骂俏——数据库篇

&#x1f466;&#x1f466;一个帅气的boy&#xff0c;你可以叫我Love And Program &#x1f5b1; ⌨个人主页&#xff1a;Love And Program的个人主页 &#x1f496;&#x1f496;如果对你有帮助的话希望三连&#x1f4a8;&#x1f4a8;支持一下博主 由数据库引发的一系列探…

小论文写作指南(AI类)

参考b站沃恩智慧课程 论文结构 标题:不要太长或太短,抓住重点,简明扼要。 作者:你的作品一定力争一作,通讯作者是导师/大老板/出资人。 摘要Abstract:点明大背景(如为什么研究微表情识别,对社会有什么价值,拔高立意层次),阐述目标(我们提出模型为了在什么问题上达…

9个时间序列交叉验证方法的介绍和对比

评估性能对预测模型的开发至关重要。交叉验证是一种流行的技术。但是在处理时间序列时&#xff0c;应该确保交叉验证处理了数据的时间依赖性质。在之前的文章中&#xff0c;我们也做过相应的介绍。 在本文中&#xff0c;我们收集了时间序列的常用的9种交叉验证方法。这些包括样…

【博客578】LVS NAT配合MASQUERADE实现FULLNAT的场景,及此场景下net.ipv4.vs.conntrack参数的重要作用

LVS NAT配合MASQUERADE实现FULLNAT的场景&#xff0c;及此场景下net.ipv4.vs.conntrack参数的重要作用 1、LVS基本原理&#xff1a; 流程&#xff1a; 当用户向负载均衡调度器&#xff08;Director Server&#xff09;发起请求&#xff0c;调度器将请求发往至内核空间 PREROU…

第6章 线程通信

6.2.1 管道 管道是一个线性字节数组,类似文件,使用文件读写进行访问&#xff1b;在程序里面,创建管道需要使用popen()或者pipe(); 管道的一个重要特点是使用管道的两个线程之间必须存在某种关系, 例如,使用popen需要提供另一端进程的文件名,使用pipe的两个线程分别隶属于父子进…

Linux常用命令——fgrep命令

在线Linux命令查询工具 fgrep 为文件搜索文字字符串 补充说明 fgrep命令是用来搜索 file 参数指定的输入文件&#xff08;缺省为标准输入&#xff09;中的匹配模式的行。fgrep 命令特别搜索 Pattern 参数&#xff0c;它们是固定的字符串。如果在 File 参数中指定一个以上的…

dp刷题(三)编辑距离(Hard)

编辑距离_牛客题霸_牛客网 描述 给定两个单词word1和word2&#xff0c;请计算将word1转换为word2至少需要多少步操作。 你可以对一个单词执行以下3种操作&#xff1a; a&#xff09;在单词中插入一个字符 b&#xff09;删除单词中的一个字符 c&#xff09;替换单词中的一个字…

C#,图像二值化(14)——全局阈值的最佳迭代算法(Iterate Thresholding)及源代码

1、图像二值化 图像二值化是将彩色图像转换为黑白图像。大多数计算机视觉应用程序将图片转换为二进制表示。图像越是未经处理&#xff0c;计算机就越容易解释其基本特征。 二值化过程 在计算机存储器中&#xff0c;所有文件通常以灰度级的形式存储&#xff0c;灰度级具有从0…

Vue基础入门小demo——记事本

文章目录 &#x1f4cb;前言 &#x1f3af;demo介绍 &#x1f3af;完整代码 &#x1f3af;最终效果 &#x1f3af;案例分析 &#x1f4cb;前言 记事本&#xff08;不是操作系统的那个记事本&#xff0c;是一个简单的网页版本记事本&#xff09;是一个较全面的Vue指令集合案…

迁移学习简要

什么是迁移学习 迁移学习是一种机器学习方法&#xff0c;就是把任务为A的开发模型作为其的初始点&#xff0c;重新使用在任务为B的开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务。虽然大多数机器学习的新 算法都是为了解决单个任务而设计的…

Exynos_4412——IIC控制器和MPU6050

目录 一、Exynos_4412下的IIC控制器 二、IIC寄存器 三、MPU6050原理 MPU6050 MPU6050的主要参数 MPU6050通信接口 MPU6050官方芯片手册 MPU6050寄存器 四、MPU6050寄存器读写时序 向MPU6050写一个字节数据 向MPU6050读一个字节数据 五、IIC编程 六、小项目 Exynos…

Linux内核中断子系统

查看中断控制相关的设备树节点 *********************gpiof控制器*************************pinctrl: pin-controller50002000 {#address-cells <1>;#size-cells <1>;compatible "st,stm32mp157-pinctrl";interrupt-parent <&exti>;gpiof…

数据结构与算法三【树】

二叉树性质 满二叉树 深度为k&#xff0c;有2k−12^{k}-12k−1个结点的二叉树&#xff0c;为满二叉树。 完全二叉树 完全二叉树的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面…