使用docker部署flask项目

前言

本次部署是把2个项目、mysql、redis、uwsgi封装在一个容器中,ngnix封装在一个容器中

实际应用中最好是:

  • 项目和uwsgi封装在一个容器中
  • mysql单独封装,可能还要读写分离,主从同步等
  • redis单独封装,可能还要读写分离,主从同步等
  • ngnix单独封装

这样才能方便以后增加服务器以提升性能

部署流程主要如下:

1、安装docker,自己找度娘要教程

2、拉取centos7的镜像到本地

3、启动容器,并进入容器

4、拷贝项目代码、数据库备份文件、环境包requirements.txt到容器中

5、在容器中安装mysql,并且创建数据库,恢复备份文件

6、安装redis

7、搭建项目需要运行的环境

8、修改程序的相关配置

9、安装uwsgi并启动

10、新启动一个centos7容器安装ngnix,并配置好

11、提交保存镜像

一、拉取centos镜像到本地

docker pull centos
  • 1

注:镜像直接到https://hub.docker.com/搜索

二、启动容器

docker run -d -it --privileged -p 805:80 -p 5002:5000 -p 8001:8000 -p 10027:22 -p 20002:3306 --name centos-iqiyi -e LANG=zh_CN.utf8 centos /usr/sbin/init
  • 1

说明:

  • –privileged /usr/sbin/init 这两行主要解决容器中使用systemctl去启动服务时出现D_Bus错误的问题

  • -d: 后台运行

  • -it: 组合使用,创建一个伪终端

  • -p: 端口映射,本机端口:容器端口

  • –name: 容器名,(需要注意命名规范,可自己定义 ,only [a-zA-Z0-9][a-zA-Z0-9_.-])

  • -e:防止乱码,编码格式

  • -p 20002:3306 是给mysql数据库的,如果需要外界访问mysql数据库,就映射端口,否则不需要,这里就没有映射redis数据库的端口,因为外界不需要访问

  • 最后跟上下载下来的镜像名

docker常用命令:

# 查看当前docker 中哪些容器正在运行
docker ps
# 查看当前docker 中哪些容器正在运行 包括已经终止的
docker ps -a
# 第一次初始化启动的时候,使用run,后来都是用start
docker start id
# 启动后,再次进入:
docker exec -it id /bin/bash
# 重启
docker restart id
# 停止
docker stop id
# 删除 注意:删除前需要停止镜像
docker rm id
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

进入容器

docker exec -it 7ed9c6fbf986 /bin/bash
  • 1

三、拷贝项目压缩包到容器中

sudo docker cp /Users/liheng/Desktop/iqiyi.zip 7ed9c6fbf986:/  
# /Users/liheng/Desktop/iqiyi.zip:本地文件目录 
# 7ed9c6fbf986:容器id
# /:拷贝到根目录
  • 1
  • 2
  • 3
  • 4
  • 从主机复制到容器sudo docker cp host_path containerID:container_path

  • 从容器复制到主机sudo docker cp containerID:container_path host_path

四、解压缩项目压缩包

1、安装支持ZIP的工具

yum install -y unzip zip
  • 1

2、解压iqiyi.zip

unzip iqiyi.zip
  • 1

注:压缩一个zip文件的方法:zip 文件名.zip 文件夹名称或文件名称

3、解压缩后发现中文乱码,分别执行以下三个命令

yum -y install kde-l10n-Chinese && yum -y reinstall glibc-common
localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
export LC_ALL=zh_CN.utf8
  • 1
  • 2
  • 3
  • 2个项目解压缩后的路径如下
    • /iqiyi/爱奇艺电影/爱奇艺电影.py
    • /iqiyi/iqiyi_backstage/iqiyi_backstage.py

五、安装mysql

依次执行以下语句:

yum install -y wget
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum install -y mysql-server
systemctl start  mysqld.service
systemctl status mysqld.service
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

查看root原始密码:

grep "password" /var/log/mysqld.log
# 如果以上语句无法查看,则打开mysqld.log,直接搜索password查看密码
  • 1
  • 2

在这里插入图片描述

  • 红色框部分即为原始密码
修改root密码

获得初始密码后,第一件事就是要重新设置root密码,否则什么事情也做不了,因为MySQL强制要求必须重新设置root密码。

mysql -uroot -p
# 输入原始密码
  • 1
  • 2
# 修改密码
mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';  # 把MyNewPass4!修改为你要设置的新密码

修改外部访问权限

mysql>use mysql;
mysql>update user set host = ‘%’ where user = ‘root’;
mysql>select host, user from user;
mysql>exit

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 修改sql_mode模式
vi /etc/my.cnf

# 在[mysqld]下面添加:
sql_mode=""

# 重启
systemctl restart mysqld.service

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

六、导入数据库

上传moviespider.sql_.zip到/iqiyi/ 目录下

sudo docker cp /Users/liheng/Downloads/moviespider.sql_.zip 7ed9c6fbf986:/iqiyi
  • 1

解压

unzip moviespider.sql_.zip
  • 1
# 进入mysql,创建数据库:
mysql> create database iqiyi charset=utf8;

use iqiyi
# 导入数据
source /iqiyi/moviespider.sql

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

七、安装redis

参考链接:https://www.cnblogs.com/zuidongfeng/p/8032505.html

注:下载redis时,下载在/usr/local目录下,然后解压安装

八、环境搭建

1、安装python3

  • 安装方法参考:https://www.cnblogs.com/JahanGu/p/7452527.html

2、安装pip3

  • 安装相关依赖
yum install openssl-devel -y 
yum install zlib-devel -y
  • 1
  • 2
  • 安装setuptools
wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz#md5=c607dd118eae682c44ed146367a17e26 

tar -zxvf setuptools-19.6.tar.gz
cd setuptools-19.6
sudo python setup.py build
sudo python setup.py install

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 安装pip
wget --no-check-certificate https://pypi.python.org/packages/source/p/pip/pip-8.0.2.tar.gz#md5=3a73c4188f8dbad6a1e6f6d44d117eeb 

tar -zxvf pip-8.0.2.tar.gz
cd pip-8.0.2
python setup.py build
sudo python setup.py install

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 建立软连接
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
  • 1

3、导入环境包requirements.txt

先拷贝requirements.txt到容器内的iqiyi文件夹,方法同上面拷贝文件的方法

cd /iqiyi
pip3 install -r requirements.txt
  • 1
  • 2

发现报错:

Flask-MySQLdb0.2.0 mysqlclient1.3.14 删除掉以上这2个,才能正确导入

九、修改程序配置

在2个程序中,分别修改config.py中的数据库用户名密码,因为你在你电脑上安装的和在服务器上面的密码是不一致的

然后在程序入口修改app.run(),需要添加host和prot这2个内容,才能指定启动和外网访问

app.run(host=‘0.0.0.0’,prot=8000)

至于设置哪个端口,要看当前这个docker开放了什么映射端口,并且无占用才可以

十、安装uwsgi并进行配置

  • 安装
pip3 install uwsgi

# 注意!安装后使用uwsgi命令会显示无此命令,此时需要建立软连接
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

  • 1
  • 2
  • 3
  • 4
  • 在iqiyi文件夹创建一个flaskconfig文件夹,所有项目的配置文件全在这里面

    创建iqiyi.ini的配置文件

[uwsgi]
#uwisi启动程序所使用的地址和端口
http=0.0.0.0:5000
#记录pid,方便停止和重启服务
pidfile=/tmp/uwsgi.pid
#项目所在路径
chdir=/iqiyi/爱奇艺电影/
#flask程序启动文件
wsgi-file=爱奇艺电影.py
#使用主进程
master=true
#多站点
vhost=true
#flask里面启动Application变量名
callable=app
#进程数
processes=4
#线程数
threads=2
manage-script-name = true
touch-reload = /iqiyi/爱奇艺电影/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

​ 创建iqiyi_backstage.ini的配置文件

[uwsgi]
#uwisi启动程序所使用的地址和端口
http=0.0.0.0:8000
#记录pid,方便停止和重启服务
pidfile=/tmp/uwsgi.pid
#项目所在路径
chdir=/iqiyi/iqiyi_backstage/
#flask程序启动文件
wsgi-file=iqiyi_backstage.py
#使用主进程
master=true
#多站点
vhost=true
#flask里面启动Application变量名
callable=app
#进程数
processes=4
#线程数
threads=2
manage-script-name = true
touch-reload = /iqiyi/iqiyi_backstage/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

​ 编写一下停止uwsgi的脚本stop.sh,如果不用停止脚本,就要一个个的查杀进程,很麻烦

#!/bin/sh
NAME="uwsgi"
if [ ! -n "$NAME" ];thenecho "no arguments"exit;
fi

echo NAME</span>ID<spanclass="tokenoperator">=</span><spanclass="tokenvariable"><spanclass="tokenvariable">‘</span><spanclass="tokenfunction">ps</span>−ef<spanclass="tokenoperator">∣</span><spanclass="tokenfunction">grep</span><spanclass="tokenstring">"<spanclass="tokenvariable">NAME</span> ID<span class="token operator">=</span><span class="token variable"><span class="token variable">`</span><span class="token function">ps</span> -ef <span class="token operator">|</span> <span class="token function">grep</span> <span class="token string">"<span class="token variable">NAME</span>ID<spanclass="tokenoperator">=</span><spanclass="tokenvariable"><spanclass="tokenvariable"></span><spanclass="tokenfunction">ps</span>ef<spanclass="tokenoperator"></span><spanclass="tokenfunction">grep</span><spanclass="tokenstring">"<spanclass="tokenvariable">NAME" | grep -v $0 | grep -v “grep” | awk '{print KaTeX parse error: Expected 'EOF', got '}' at position 9: 2</span>}̲'</span><span c…ID
echo “#############杀死已存在进程#####################”
for id in ID</span><spanclass="tokenkeyword">do</span><spanclass="tokenfunction">kill</span>−9<spanclass="tokenvariable">ID</span> <span class="token keyword">do</span> <span class="token function">kill</span> -9 <span class="token variable">ID</span><spanclass="tokenkeyword">do</span><spanclass="tokenfunction">kill</span>9<spanclass="tokenvariable">id
echo “kill $id
done
echo “#############################################”

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

对stop.sh进行赋值权限

chmod 777 stop.sh
  • 1

十一、启动uwsgi

# 使用uwsgi的Emperor —— 多应用部署
uwsgi --emperor /iqiyi/flaskconfig/ -d my.log

# 也可以每个应用依次启动,依次启动时可以再ini配置文件中配置log文件,参考美多商城部署
uwsgi --ini /iqiyi/flaskconfig/iqiyi_backstage.ini
uwsgi --ini /iqiyi/flaskconfig/iqiyi.ini

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

十二、配置ngnix

启动容器

docker run -d -it --privileged -p 806:806 -p 808:808 --name centos-iqiyi-ngnix -e LANG=zh_CN.utf8 centos /usr/sbin/init
  • 1

进入容器

docker exec -it fcd4c8ad55dc /bin/bash
  • 1

安装ngnix,参考:https://www.cnblogs.com/kaid/p/7640723.html

注:

# 在/usr/local目录下执行下载,否则可能无法编译
# 使用wget命令下载前要先安装wget
yum install -y wget
  • 1
  • 2
  • 3

打开ngnix的配置文件

vi /usr/local/nginx/conf/nginx.conf
  • 1

修改配置文件:

······此处省略······

http {

······此处省略······upstream iqiyi_backstage <span class="token punctuation">{<!-- --></span><span class="token comment"># 此处需为uwsgi服务器所在ip地址</span>server 192.168.0.107:8001<span class="token punctuation">;</span><span class="token punctuation">}</span>upstream iqiyi <span class="token punctuation">{<!-- --></span><span class="token comment"># 此处需为uwsgi服务器所在ip地址</span>server 192.168.0.107:5002<span class="token punctuation">;</span><span class="token punctuation">}</span>······此处省略······server <span class="token punctuation">{<!-- --></span>listen  808<span class="token punctuation">;</span>server_name localhost<span class="token punctuation">;</span>location / <span class="token punctuation">{<!-- --></span><span class="token comment"># 请求转发到多个uwsgi服务器</span>proxy_pass http://iqiyi<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token punctuation">}</span>server <span class="token punctuation">{<!-- --></span>listen       806<span class="token punctuation">;</span>server_name  localhost<span class="token punctuation">;</span><span class="token comment">#charset koi8-r;</span><span class="token comment">#access_log  logs/host.access.log  main;</span>location / <span class="token punctuation">{<!-- --></span><span class="token comment">#root   html;</span><span class="token comment">#index  index.html index.htm;</span><span class="token comment"># 请求转发到多个uwsgi服务器</span>proxy_pass http://iqiyi_backstage<span class="token punctuation">;</span><span class="token punctuation">}</span>······此处省略······        
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

启动ngnix

cd /usr/local/nginx/sbin
./nginx
  • 1
  • 2

修改配置文件后重新启动ngnix

./nginx -s reload
  • 1

Upstream 主要用来做负载均衡

负载均衡其实就是在upstream 当中加入多一条server信息,nginx会自动进行选择转发,上面只加一条。

其中 location 是定义路由,如果使用location = / 是属于精准匹配,不加 = 就相当于正则匹配 proxy_pass 转发服务到哪里, 后面拼接一定要加上http:// 否则也是不成功的,这里要注意,缩进无所谓,能看明白就行,但语法千万不能错,一个单词错就没法启动了。

十三、docker提交保存镜像

1、保存:docker commit 容器id 自定命名,保存自定义名时最好保存格式为:账户名/镜像名 ,方便上传时不需要再更改

docker commit 7ed9c6fbf986 nengliudian/centos-iqiyi-uwsgi
docker commit fcd4c8ad55dc nengliudian/centos-iqiyi-ngnix
  • 1
  • 2

2、登录docker login

一般如果在软件中已经登录,这里可以不用登录了,可以当成验证是否成功登录check一下

3、如果是第一次准备上传镜像需要先到 hub.docker.com中登录创建一个镜像仓库

4、上传自定镜像

首先查看一下本地的镜像有哪些

docker images
  • 1

5、上传镜像

# docker push 镜像名:tags
docker push nengliudian/centos-iqiyi-ngnix:latest
docker push nengliudian/centos-iqiyi-uwsgi:latest
  • 1
  • 2
  • 3

出现进度条,就成功了,等待就可以

十四、镜像备份与迁移

我们可以通过save命令将镜像打包成文件,拷贝给别人使用

  • docker save -o 保存的文件名 镜像名
docker save -o ./centos-iqiyi-uwsgi.tar nengliudian/centos-iqiyi-uwsgi
  • 1

在拿到镜像文件后,可以通过load方法,将镜像加载到本地

docker load -i ./centos-iqiyi-uwsgi.tar
  • 1

以后项目迁移到任何操作系统下通吃

原文链接:[https://blog.csdn.net/liudian_cz/article/details/88850773?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.channel_param](https://blog.csdn.net/liudian_cz/article/details/88850773?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.channel_param)

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

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

相关文章

论文浅尝 | DRUM:一种端到端的可微的知识图谱上的规则学习方法

论文笔记整理&#xff1a;张文&#xff0c;浙江大学在读博士&#xff0c;研究方向为知识图谱的表示学习&#xff0c;推理和可解释。现有的多数链接预测方法都不能处理新的实体&#xff0c;并且多为黑盒方法&#xff0c;使得其预测结果无法解释。本文提出了一种新的端到端的可微…

WSDM Cup 2019自然语言推理任务获奖解题思路

WSDM&#xff08;Web Search and Data Mining&#xff0c;读音为Wisdom&#xff09;是业界公认的高质量学术会议&#xff0c;注重前沿技术在工业界的落地应用&#xff0c;与SIGIR一起被称为信息检索领域的Top2。 刚刚在墨尔本结束的第12届WSDM大会传来一个好消息&#xff0c;由…

LeetCode 637. 二叉树的层平均值(层次遍历queue)

1. 题目 给定一个非空二叉树, 返回一个由每层节点平均值组成的数组. 输入:3/ \9 20/ \15 7 输出: [3, 14.5, 11] 解释: 第0层的平均值是 3, 第1层是 14.5, 第2层是 11. 因此返回 [3, 14.5, 11].2. 解题 queue按层遍历&#xff0c;每次进入循环记录队列长度n class So…

AI框架你只会调包,这种想法很危险!

深度学习神经网络正步入成熟&#xff0c;而深度学习框架目前众多&#xff0c;大都可以在图像识别、手写识别、视频识别、语音识别、目标识别和自然语言处理等诸多领域大显身手。深度学习框架平台占据人工智能产业生态的核心地位&#xff0c;具有统领产业进步节奏、带动终端场景…

Docker镜像大小

都说容器大法好&#xff0c;可是假设没有Docker镜像&#xff0c;Docker该是多无趣啊。 是否还记得第一个接触Docker的时候&#xff0c;你从Docker Hub下拉的那个镜像呢&#xff1f;在那个处女镜像的基础上。你执行了容器生涯的处女容器。镜像的基石作用已经非常明显。在Docker…

论文浅尝 | 机器阅读理解中常识知识的显式利用

论文笔记整理&#xff1a;吴林娟&#xff0c;天津大学硕士&#xff0c;自然语言处理方向。链接&#xff1a;https://arxiv.org/pdf/1809.03449.pdf动机机器阅读理解(MRC)和人类进行阅读理解之间还存在差距&#xff0c;作者认为主要体现在对于数据的需求和噪声鲁棒性上&#xff…

深度学习在美团配送ETA预估中的探索与实践

1.背景 ETA&#xff08;Estimated Time of Arrival&#xff0c;“预计送达时间”&#xff09;&#xff0c;即用户下单后&#xff0c;配送人员在多长时间内将外卖送达到用户手中。送达时间预测的结果&#xff0c;将会以”预计送达时间”的形式&#xff0c;展现在用户的客户端页面…

在AndroidStudio中配置Gradle进行 “动态编译期间,根据远程服务器地址 ,生成多类安装包”

原文地址&#xff1a;http://www.cnblogs.com/vir56k/p/4763810.html 需求&#xff1a; 在产品开发中&#xff0c;经常需要发布各个版本&#xff0c;每个版本的服务器地址有不同的服务器地址。比如 开发 服务器使用 192.168.1.232服务器&#xff0c;测试 服务器使用 192.168.1.…

中科院博士整理的机器学习算法知识手册,完整 PDF 开放下载!

分享一份中科院博士总结的机器学习算法知识手册&#xff0c;文章已打包成压缩文件&#xff0c;感兴趣的同学可下载交流。文件包含了&#xff1a;机器学习基础&#xff0c;监督学习方法、非监督学习方法&#xff0c;Python数据科学和深度学习等相关知识&#xff0c;若初学者在自…

论文浅尝 | 通过共享表示和结构化预测进行事件和事件时序关系的联合抽取

论文笔记整理&#xff1a;邓淑敏&#xff0c;浙江大学在读博士&#xff0c;研究方向为低资源条件下知识图谱自动化构建关键技术研究。Rujun Han, Qiang Ning, Nanyun Peng. Joint Event and Temporal Relation Extractionwith Shared Representations and Structured Predictio…

研发团队资源成本优化实践

背景 工程师主要面对的是技术挑战&#xff0c;更关注技术层面的目标。研发团队的管理者则会把实现项目成果和业务需求作为核心目标。实际项目中&#xff0c;研发团队所需资源&#xff08;比如物理机器、内存、硬盘、网络带宽等&#xff09;的成本&#xff0c;很容易被忽略&…

抖音算法推荐机制详解(科普向)

本文转载自公众号“夕小瑶的卖萌屋”&#xff0c;专业带逛互联网算法圈的神操作 -----》我是传送门 关注后&#xff0c;回复以下口令&#xff1a; 回复【789】 &#xff1a;领取深度学习全栈手册&#xff08;含NLP、CV海量综述、必刷论文解读&#xff09; 回复【入群】&#xf…

论文浅尝 | 融合多粒度信息和外部语言知识的中文关系抽取

论文笔记整理&#xff1a;吴涵&#xff0c;天津大学硕士&#xff0c;研究方向&#xff1a;自然语言处理Paper:https://www.aclweb.org/anthology/P19-1430/Code:https://github.com/thunlp/Chinese_NRE引入中文NER问题在很大程度上取决于分词的效果&#xff0c;所以在中文NER问…

智能写作

6.2万字报告剖析「智能写作」全貌&#xff0c;从落地产品看NLP商业化突破&#xff1a;

论文拒稿的评价可以有多狠?

文 | 自然卷知乎自古严师出高徒&#xff0c;“天将降大任于是人也&#xff0c;必先苦其心志&#xff0c;劳其筋骨……”。然而&#xff0c;这并不能作为审稿人走向“键盘侠”之路的理由&#xff01;让我们这些卑微投稿人心里真是好凉凉&#xff01;ಥ_ಥ 大家来看看&#xff0c…

全链路压测自动化实践

背景与意义 境内度假是一个低频、与节假日典型相关的业务&#xff0c;流量在节假日较平日会上涨五到十几倍&#xff0c;会给生产系统带来非常大的风险。因此&#xff0c;在2018年春节前&#xff0c;我们把整个境内度假业务接入了全链路压测&#xff0c;来系统性地评估容量和发现…

论文浅尝 | GMNN: Graph Markov Neural Networks

论文笔记整理&#xff1a;吴锐&#xff0c;东南大学硕士研究生&#xff0c;研究方向为自然语言处理来源&#xff1a;ICML 2019链接&#xff1a;http://proceedings.mlr.press/v97/qu19a/qu19a.pdf问题定义弱监督下的在关系数据中的对象分类。形式化地来说&#xff0c;给定一个图…

五笔字根表口诀的通俗易懂讲解

五笔字根表口诀的通俗易懂讲解 从上面五笔学习导图&#xff0c;我们不难看出&#xff0c;五笔只包含两个部分&#xff0c;一是独立字。二是字根字。 &#xff11; 先来讲解独立字。 独立字就是不用字根就可以输出的汉字&#xff0c;独立字包含一级简码&#xff0c;按键字两种。…

论文浅尝 | 基于知识图谱难度可控的多跳问题生成

论文笔记整理&#xff1a;谭亦鸣&#xff0c;东南大学博士生&#xff0c;研究兴趣&#xff1a;知识图谱问答。来源&#xff1a;ISWC 2019链接&#xff1a;https://link.springer.com/content/pdf/10.1007%2F978-3-030-30793-6_22.pdf本文提出一个end2end神经网络模型以知识图谱…

LeetCode 933. 最近的请求次数(queue)

1. 题目 写一个 RecentCounter 类来计算最近的请求。 它只有一个方法&#xff1a;ping(int t)&#xff0c;其中 t 代表以毫秒为单位的某个时间。 返回从 3000 毫秒前到现在的 ping 数。 任何处于 [t - 3000, t] 时间范围之内的 ping 都将会被计算在内&#xff0c;包括当前&…