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

【SH】Ubuntu Server 24搭建Web服务器访问Python程序研发笔记

文章目录

  • 说个问题
  • 写个方案
  • 一、安装Ubuntu Server
  • 二、安装Web服务器
    • 采用Nginx服务器
  • 三、安装Python及依赖
    • 创建项目虚拟环境
  • 四、安装Python Web框架
    • 采用Flask框架
    • 创建和运行Flask应用(以后的重点)
  • 五、安装WSGI服务器
    • 采用Gunicorn
  • 六、配置Nginx
  • 七、验证部署
  • 八、扩展
    • 编写POST请求

说个问题

自己写了一个Python小程序,传入一定参数就有一定的输出,现在想开放给所有人在线使用,如何搭建服务器以及如何处理用户的请求和响应???

写个方案

存在多种方案,作者采用的是Gunicorn配合Nginx,用户访问Nginx服务器,Nginx反向代理将请求传给Gunicorn,Gunicorn调用Python应用程序,应用程序处理后将结果回传Gunicorn,Gunicorn传递给Nginx,Nginx最后响应给用户。

Nginx
Gunicorn
Flask
动态处理
反向代理
请求响应
用户请求
Web服务器
Python Web框架
Python 脚本

一、安装Ubuntu Server

参考文章:【SH】VMware虚拟机安装Ubuntu Server 24系统研发笔记

二、安装Web服务器

采用Nginx服务器

在线文档和支持:http://nginx.org/
也可以采用Apache,作者经过详细了解和异同点比较之后选择了Nginx,Nginx更加轻量级,资源消耗更少,静态文件(如HTML、图片、CSS等直接从磁盘读取的内容)处理更加高效,配置更加简单。而动态文件可以反向代理将动态请求转发给后端的应用程序服务器处理(如uWSGI)。

  1. 更新软件包索引,确保索引是最新的,sudo apt update
sh@sheephero:~$ sudo apt update
[sudo] password for sh:
Hit:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu noble InRelease
Get:2 http://mirrors.tuna.tsinghua.edu.cn/ubuntu noble-updates InRelease [126 kB]
Get:3 http://mirrors.tuna.tsinghua.edu.cn/ubuntu noble-backports InRelease [126 kB]
Hit:4 http://security.ubuntu.com/ubuntu noble-security InRelease
Fetched 252 kB in 1s (189 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
66 packages can be upgraded. Run 'apt list --upgradable' to see them.
N: Missing Signed-By in the sources.list(5) entry for 'http://mirrors.tuna.tsinghua.edu.cn/ubuntu'
N: Missing Signed-By in the sources.list(5) entry for 'http://mirrors.tuna.tsinghua.edu.cn/ubuntu'
  1. 用apt包管理器安装Nginx,sudo apt install nginx
sh@sheephero:~$ sudo apt install nginx
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:nginx-common
Suggested packages:fcgiwrap nginx-doc ssl-cert
The following NEW packages will be installed:nginx nginx-common
0 upgraded, 2 newly installed, 0 to remove and 66 not upgraded.
Need to get 552 kB of archives.
After this operation, 1,596 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu noble-updates/main amd64 nginx-common all 1.24.0-2ubuntu7.1 [31.2 kB]
Get:2 http://mirrors.tuna.tsinghua.edu.cn/ubuntu noble-updates/main amd64 nginx amd64 1.24.0-2ubuntu7.1 [521 kB]
Fetched 552 kB in 1s (1,071 kB/s)
Preconfiguring packages ...
Selecting previously unselected package nginx-common.
(Reading database ... 83751 files and directories currently installed.)
Preparing to unpack .../nginx-common_1.24.0-2ubuntu7.1_all.deb ...
Unpacking nginx-common (1.24.0-2ubuntu7.1) ...
Selecting previously unselected package nginx.
Preparing to unpack .../nginx_1.24.0-2ubuntu7.1_amd64.deb ...
Unpacking nginx (1.24.0-2ubuntu7.1) ...
Setting up nginx (1.24.0-2ubuntu7.1) ...
Setting up nginx-common (1.24.0-2ubuntu7.1) ...
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
Processing triggers for ufw (0.36.2-6) ...
Processing triggers for man-db (2.12.0-4build2) ...
Scanning processes...
Scanning linux images...Running kernel seems to be up-to-date.
No services need to be restarted.
No containers need to be restarted.
No user sessions are running outdated binaries.
No VM guests are running outdated hypervisor (qemu) binaries on this host.
  1. 启动Nginx服务并检查其状态,启动:sudo systemctl start nginx 查看状态:sudo systemctl status nginx
sh@sheephero:~$ sudo systemctl start nginx
sh@sheephero:~$ sudo systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy serverLoaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)Active: active (running) since Mon 2024-12-16 01:06:56 UTC; 9min agoDocs: man:nginx(8)Process: 3273 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)Process: 3275 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)Main PID: 3276 (nginx)Tasks: 3 (limit: 4556)Memory: 2.4M (peak: 2.5M)CPU: 11msCGroup: /system.slice/nginx.service├─3276 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"├─3277 "nginx: worker process"└─3279 "nginx: worker process"Dec 16 01:06:56 sheephero systemd[1]: Starting nginx.service - A high performance web server and a reverse proxy server...
Dec 16 01:06:56 sheephero systemd[1]: Started nginx.service - A high performance web server and a reverse proxy server.
  1. 打开浏览器,输入服务器的IP地址和端口(端口默认80),如果看见Nginx的欢迎界面,说明安装成功!😀🎉

测试Nginx

三、安装Python及依赖

Ubuntu Server 24系统自带Python3,查看安装版本:python3 --version

sh@sheephero:~$ python3 --version
Python 3.12.3

但是没有安装venv依赖,需要安装: apt install python3.12-venv

sh@sheephero:~$ sudo apt install python3.12-venv
[sudo] password for sh:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:python3-pip-whl python3-setuptools-whl
The following NEW packages will be installed:python3-pip-whl python3-setuptools-whl python3.12-venv
0 upgraded, 3 newly installed, 0 to remove and 66 not upgraded.
Need to get 2,424 kB of archives.
After this operation, 2,771 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu noble-updates/universe amd64 python3-pip-whl all 24.0+dfsg-1ubuntu1.1 [1,703 kB]
Get:2 http://mirrors.tuna.tsinghua.edu.cn/ubuntu noble-updates/universe amd64 python3-setuptools-whl all 68.1.2-2ubuntu1.1 [716 kB]
Get:3 http://mirrors.tuna.tsinghua.edu.cn/ubuntu noble-updates/universe amd64 python3.12-venv amd64 3.12.3-1ubuntu0.3 [5,678 B]
Fetched 2,424 kB in 1s (3,600 kB/s)
Selecting previously unselected package python3-pip-whl.
(Reading database ... 83799 files and directories currently installed.)
Preparing to unpack .../python3-pip-whl_24.0+dfsg-1ubuntu1.1_all.deb ...
Unpacking python3-pip-whl (24.0+dfsg-1ubuntu1.1) ...
Selecting previously unselected package python3-setuptools-whl.
Preparing to unpack .../python3-setuptools-whl_68.1.2-2ubuntu1.1_all.deb ...
Unpacking python3-setuptools-whl (68.1.2-2ubuntu1.1) ...
Selecting previously unselected package python3.12-venv.
Preparing to unpack .../python3.12-venv_3.12.3-1ubuntu0.3_amd64.deb ...
Unpacking python3.12-venv (3.12.3-1ubuntu0.3) ...
Setting up python3-setuptools-whl (68.1.2-2ubuntu1.1) ...
Setting up python3-pip-whl (24.0+dfsg-1ubuntu1.1) ...
Setting up python3.12-venv (3.12.3-1ubuntu0.3) ...
Scanning processes...
Scanning linux images...Running kernel seems to be up-to-date.
No services need to be restarted.
No containers need to be restarted.
No user sessions are running outdated binaries.
No VM guests are running outdated hypervisor (qemu) binaries on this host.

安装Python及依赖(已安装可省略)

sudo apt install python3 python3-pip python3-venv

创建项目虚拟环境

  1. 选择一个合适的目录用于存放项目文件,并在该目录中创建Python虚拟环境
mkdir dip_project && cd dip_project 

项目文件夹

  1. 为了管理项目的依赖,很有必要每个项目创建一个虚拟环境:python3 -m venv dipenv

项目虚拟环境

  1. 激活Python虚拟环境 source dipenv/bin/activate
    激活后,终端提示符会变为(dipenv),表示当前正在使用虚拟环境。source命令是Ubuntu中bash shell的一个内置命令,用于在当前shell环境中读取并执行某个文件中的命令。退出虚拟环境:deactivate
sh@sheephero:~/dip_project$ source dipenv/bin/activate
(dipenv) sh@sheephero:~/dip_project$

四、安装Python Web框架

采用Flask框架

参考文档:https://pypi.org/project/Flask/
也可以采用Django框架,作者经过详细了解和异同点比较之后选择了Flask,Flask更加轻量级且灵活,适合初学者和开发小型应用程序,核心功能简单,但也可以通过扩展实现强大功能。

  1. 在激活的虚拟环境中,使用pip安装Flask,pip install flask
(dipenv) sh@sheephero:~/dip_project$ pip install Flask
Collecting FlaskDownloading flask-3.1.0-py3-none-any.whl.metadata (2.7 kB)
Collecting Werkzeug>=3.1 (from Flask)Downloading werkzeug-3.1.3-py3-none-any.whl.metadata (3.7 kB)
Collecting Jinja2>=3.1.2 (from Flask)Downloading jinja2-3.1.4-py3-none-any.whl.metadata (2.6 kB)
Collecting itsdangerous>=2.2 (from Flask)Downloading itsdangerous-2.2.0-py3-none-any.whl.metadata (1.9 kB)
Collecting click>=8.1.3 (from Flask)Downloading click-8.1.7-py3-none-any.whl.metadata (3.0 kB)
Collecting blinker>=1.9 (from Flask)Downloading blinker-1.9.0-py3-none-any.whl.metadata (1.6 kB)
Collecting MarkupSafe>=2.0 (from Jinja2>=3.1.2->Flask)Downloading MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)
Downloading flask-3.1.0-py3-none-any.whl (102 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 103.0/103.0 kB 352.3 kB/s eta 0:00:00
Downloading blinker-1.9.0-py3-none-any.whl (8.5 kB)
Downloading click-8.1.7-py3-none-any.whl (97 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 97.9/97.9 kB 1.6 MB/s eta 0:00:00
Downloading itsdangerous-2.2.0-py3-none-any.whl (16 kB)
Downloading jinja2-3.1.4-py3-none-any.whl (133 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.3/133.3 kB 2.1 MB/s eta 0:00:00
Downloading werkzeug-3.1.3-py3-none-any.whl (224 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 224.5/224.5 kB 2.8 MB/s eta 0:00:00
Downloading MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (23 kB)
Installing collected packages: MarkupSafe, itsdangerous, click, blinker, Werkzeug, Jinja2, Flask
Successfully installed Flask-3.1.0 Jinja2-3.1.4 MarkupSafe-3.0.2 Werkzeug-3.1.3 blinker-1.9.0 click-8.1.7 itsdangerous-2.2.0
(dipenv) sh@sheephero:~/dip_project$
  1. 验证安装:python -m flask --version 如果安装成功,会显示Flask的版本信息
(dipenv) sh@sheephero:~/dip_project$ python -m flask --version
Python 3.12.3
Flask 3.1.0
Werkzeug 3.1.3

创建和运行Flask应用(以后的重点)

  1. 创建和运行Flask应用,在项目目录里面新建一个【app.py】文件vim app.py,写入如下内容(IP地址就是Ubuntu的地址):
# save this as app.py
from flask import Flaskapp = Flask(__name__)@app.route("/")
def hello():return "Hello, World!"if __name__ == '__main__':app.run(host='172.16.37.37', port=5000)

保存后,运行如下命令:python app.py,使之处于监听状态。

(dipenv) sh@sheephero:~/dip_project$ python app.py* Serving Flask app 'app'* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.* Running on http://172.16.37.37:5000
Press CTRL+C to quit

运行情况
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.警告:这是一个开发服务器。不要用于生产环境。请使用生产WSGI服务器代替。

  1. 打开客户机的浏览器,访问虚拟机的服务器,在浏览器中输入http://172.16.37.37:5000来查看Flask应用的输出

应用输出

五、安装WSGI服务器

WSGI服务器,用于Web服务器反向代理Python程序。
uWSGI和Gunicorn都是Web服务器,实现了WSGI(Web Server Gateway Interface)协议,用于接收请求并分发给后端应用(如Django或Flask)。

采用Gunicorn

也可以安装uWSGI,作者经过详细了解和异同点比较之后选择了Gunicorn,Gunicorn配置相对简单,易于上手。它遵循“Keep it simple and stupid”(KISS)的设计理念,提供了一个稳定且易于维护的Web服务器环境。

  1. 在项目虚拟环境中安装gunicorn,
(dipenv) sh@sheephero:~/dip_project$ pip install gunicorn
Collecting gunicornDownloading gunicorn-23.0.0-py3-none-any.whl.metadata (4.4 kB)
Collecting packaging (from gunicorn)Downloading packaging-24.2-py3-none-any.whl.metadata (3.2 kB)
Downloading gunicorn-23.0.0-py3-none-any.whl (85 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 85.0/85.0 kB 305.7 kB/s eta 0:00:00
Downloading packaging-24.2-py3-none-any.whl (65 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 65.5/65.5 kB 1.2 MB/s eta 0:00:00
Installing collected packages: packaging, gunicorn
Successfully installed gunicorn-23.0.0 packaging-24.2
  1. 重新使用Gunicorn运行Flask应用(假设Flask应用名为app.py,且应用实例名为app),根据上文编写的app.py文件来输入命令gunicorn --workers 4 --bind 0.0.0.0:6758 app:app,这条命令会启动Gunicorn,并监听所有网络接口上的6758端口。
    【–workers 4】这个选项指定了Gunicorn应该启动的工作进程数量。在这个例子中,它被设置为4。工作进程是实际处理请求的Python进程。增加工作进程的数量可以提高你的应用处理并发请求的能力,但是也会增加内存和CPU的使用。
    【–bind 0.0.0.0:6758】这个选项告诉Gunicorn监听哪个IP地址和端口上的连接。0.0.0.0是一个特殊的IP地址,表示监听所有可用的网络接口。这意味着,如果你的服务器有多个IP地址(例如,一个内网地址和一个外网地址),你的应用将能够在所有这些地址上接受连接。6758是端口号,是应用将监听以接受连接的TCP端口。
    【app:app】这部分指定了要运行的WSGI应用。它通常遵循模块名:应用对象名的格式。在这个例子中,app是Python模块的名字,而第二个app是该模块中定义的WSGI应用对象的名字。这意味着你的应用应该有一个名为app.py的文件,里面有一个名为app的Flask(或其他WSGI兼容框架)应用实例。
(dipenv) sh@sheephero:~/dip_project$ gunicorn --workers 4 --bind 0.0.0.0:6758 app:app
[2024-12-16 13:28:27 +0000] [25695] [INFO] Starting gunicorn 23.0.0
[2024-12-16 13:28:27 +0000] [25695] [INFO] Listening at: http://0.0.0.0:8000 (25695)
[2024-12-16 13:28:27 +0000] [25695] [INFO] Using worker: sync
[2024-12-16 13:28:27 +0000] [25696] [INFO] Booting worker with pid: 25696
[2024-12-16 13:28:27 +0000] [25697] [INFO] Booting worker with pid: 25697
[2024-12-16 13:28:27 +0000] [25698] [INFO] Booting worker with pid: 25698
[2024-12-16 13:28:28 +0000] [25699] [INFO] Booting worker with pid: 25699

六、配置Nginx

配置Nginx以转发请求给Gunicorn

  1. 备份Nginx的默认配置文件:
(dipenv) sh@sheephero:/etc/nginx/sites-available$ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak
(dipenv) sh@sheephero:/etc/nginx/sites-available$ tree -L 3
.
├── default
└── default.bak
1 directory, 2 files
  1. 编辑Nginx的配置文件:
sudo vim /etc/nginx/sites-available/default
  1. 在配置文件中添加或修改以下内容,以将请求转发给Gunicorn,your_server_ip_or_domain替换为你的服务器IP地址或域名:
server {listen 80;server_name your_server_ip_or_domain;location / {proxy_pass http://127.0.0.1:6758;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}
  1. 测试Nginx配置文件的正确性:
sudo nginx -t
(dipenv) sh@sheephero:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
  1. 重启Nginx服务以应用更改:
sudo systemctl restart nginx

七、验证部署

启动Gunicorn保持监听,启动Nginx服务,然后通过浏览器输入http://172.16.37.37 访问服务:

验证部署

八、扩展

编写POST请求

请看下一篇文章:【SH】Ubuntu Server 24搭建Web服务器访问Python程序研发笔记

相关文章:

【SH】Ubuntu Server 24搭建Web服务器访问Python程序研发笔记

文章目录 说个问题写个方案一、安装Ubuntu Server二、安装Web服务器采用Nginx服务器 三、安装Python及依赖创建项目虚拟环境 四、安装Python Web框架采用Flask框架创建和运行Flask应用(以后的重点) 五、安装WSGI服务器采用Gunicorn 六、配置Nginx七、验证…...

创建项目以及本地仓库和远程仓库并上传项目

创建项目以及本地仓库和远程仓库并上传项目 其详细流程如下: 1、本地创建项目 2、创建本地仓库(若使用idea在创建项目时选择了创建.git本地仓库,则此步骤省略) 进入到你需要上传的项目的目录下,右键找到Git Bah He…...

代码开发相关操作

使用Vue项目管理器创建项目:(vue脚手架安装一次就可以全局使用) windowR打开命令窗口,输入vue ui,进入GUI页面,点击创建-> 设置项目名称,在初始化git下面输入:init project&…...

ElasticSearch系列:利用runtime field实现日期字符串实现日期范围查询

在Elasticsearch中,如果你有一个时间字符串字段,并且你希望在查询时将其转换为date类型以便进行日期范围查询或其他日期相关的操作,你可以使用runtime_fields来实现这一转换。不过,与转换为UNIX时间戳不同,Elasticsear…...

前端:如何在静态目录下显示一张图片

假设已经配置(或默认配置好)public文件夹是静态资源文件夹,public文件夹中的资源会直接映射到根URL。 1. 我的前端图片保存路径是: F:\front\public\icon-favo.png 前端地址是:http://localhost:20002 我想要访问…...

Java设计模式 —— 【结构型模式】桥接模式详解

前言 现在有一个需求,需要创建不同的图形,并且每个图形都有可能会有不同的颜色。 首先我们看看用继承来实现: 我们可以发现有很多的类,假如我们再增加一个形状或再增加一种颜色,就需要创建更多的类。 试想&#xf…...

Qt同步读取串口

头文件 #include "InsScpi.h" #include <QObject> #include <QSerialPort>class TestSerial : public QObject {Q_OBJECT public:explicit TestSerial(QObject *parent nullptr);//打开设备bool openDevice(const QString &portName);//关闭设备…...

MySQL高可用

MySQL主从复制的过程是怎么样的 分为3个阶段&#xff1a; 写入binlog&#xff1a;主库修改数据后&#xff0c;会写入binlog日志&#xff0c;从库连接到主库后&#xff0c;主库会创建一个log dump线程&#xff0c;用于发送bin log的内容同步binlog&#xff1a;从库会专门创建一…...

OpenHarmony-3.HDF Display子系统(6)

Display 子系统 1.Display驱动模型介绍 当前操作系统和 SOC 种类繁多&#xff0c;各厂商的显示屏器件也各有不同&#xff0c;随之针对器件的驱动代码也不尽相同&#xff0c;往往是某一款器件驱动&#xff0c;只适用于某单一内核系统或 SOC&#xff0c;如果要迁移到其他内核或者…...

第10章:CSS最佳实践 --[CSS零基础入门]

代码组织 在CSS开发中&#xff0c;良好的代码组织和最佳实践对于项目的可维护性和扩展性至关重要。以下是两个示例&#xff0c;展示了如何遵循CSS最佳实践来组织代码。 示例 1: 使用 BEM&#xff08;Block Element Modifier&#xff09;命名法 BEM 是一种用于提高 CSS 可读性…...

备战美赛!2025美赛数学建模C题模拟预测!用于大家练手模拟!

完整的思路代码模型见文末 2025 美赛数学建模 C 题 模拟题&#xff1a;城市交通拥堵指数的预测与管理策略 背景 随着全球城市化进程的加快&#xff0c;交通拥堵问题成为城市发展的重要挑战之一。交通拥堵不仅影响居民出行效率&#xff0c;还增加了能源消耗和碳排放。近年来&…...

ESP8266 Ubuntu 安装

文章参考&#xff1a;https://blog.csdn.net/AUST_129/article/details/119406722文章浏览阅读1.8k次&#xff0c;点赞4次&#xff0c;收藏19次。参考&#xff1a;https://docs.espressif.com/projects/esp8266-rtos-sdk/en/latest/get-started/linux-setup.htmlhttp://aicloud…...

tryhackme-Pre Security-Defensive Security Intro(防御安全简介)

任务一&#xff1a;Introduction to Defensive Security防御安全简介 此room的两个要点&#xff1a; Preventing intrusions from occurring 防止入侵发生Detecting intrusions when they occur and responding properly 检测发生的入侵并正确响应 防御安全还有更多内容。 除上…...

单片机:实现倒计时(附带源码)

使用单片机实现倒计时功能是一个常见的嵌入式应用&#xff0c;它能帮助你更好地理解如何进行时间控制和如何通过定时器实现精确的倒计时。通过该项目&#xff0c;你将学习如何使用单片机的定时器来进行时间计算&#xff0c;并通过LED或LCD显示倒计时的结果。 1. 项目概述 倒计…...

安全防御之可信计算技术

可信计算技术是一种计算机安全体系结构&#xff0c;旨在提高计算机系统在面临各种攻击和威胁时的安全性和保密性。它通过包括硬件加密、受限访问以及计算机系统本身的完整性验证等技术手段&#xff0c;确保计算机系统在各种攻击和威胁下保持高度安全和保密性。 一、可信计算基…...

视频生成缩略图

文章目录 视频生成缩略图使用ffmpeg 视频生成缩略图 最近有个需求&#xff0c;视频上传之后在列表和详情页需要展示缩略图 使用ffmpeg 首先引入jar包 <dependency><groupId>org.bytedeco</groupId><artifactId>javacpp</artifactId><vers…...

PySide6程序框架设计

pyside6有一个优点自动适配高分辨ui pyqt5需要自己写这部分逻辑 1、主程序代码 DINGSHI01Main.py # -*- coding: utf-8 -*- import sys,time,copy from PySide6.QtWidgets import QWidget,QApplication from PySide6.QtCore import Qt from PySide6 import QtCore, QtGui, Q…...

WebSocket入门与结合redis

WebSocket是什么 WebSocket 是一种用于在客户端和服务器之间建立双向通信的协议&#xff0c;它能实现实时、持久的连接。与传统的 HTTP 请求响应模式不同&#xff0c;WebSocket 在建立连接后允许客户端和服务器之间相互发送消息&#xff0c;直到连接关闭。由于 WebSocket 具有…...

锂电池SOH预测 | 基于BiGRU双向门控循环单元的锂电池SOH预测,附锂电池最新文章汇集

锂电池SOH预测 | 基于BiGRU双向门控循环单元的锂电池SOH预测&#xff0c;附锂电池最新文章汇集 目录 锂电池SOH预测 | 基于BiGRU双向门控循环单元的锂电池SOH预测&#xff0c;附锂电池最新文章汇集预测效果基本描述程序设计参考资料 预测效果 基本描述 锂电池SOH预测 | 基于Bi…...

C# 结构体和类

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、类&#xff08;Class&#xff09;二、结构体&#xff08;Struct&#xff09;示例代码&#xff08;定义类和结构体&#xff09;类的继承代码示例&#xff08…...

C语言中的内存管理:理解指针、动态内存分配与内存泄漏

在C语言中&#xff0c;内存管理是一个至关重要的主题。与许多高级语言不同&#xff0c;C语言要求程序员显式地管理内存的分配与释放。虽然这种做法提供了更高的灵活性和控制权&#xff0c;但也容易导致内存泄漏、越界访问等问题。正确地管理内存对于编写高效、稳定的C程序至关重…...

web:pc端企业微信登录-vue版

官方文档&#xff1a;developer.work.weixin.qq.com/document/pa… 不需要调用ww.register&#xff0c;直接调用ww.createWWLoginPanel即可创建企业微信登录面板 - 文档 - 企业微信开发者中心 (qq.com) 引入 //通过 npm 引入 npm install wecom/jssdk import * as ww from we…...

GC.2015.四年级

GC.2015.四年级.01.奖励 题目描述 晨晨班主任想奖励班里面的每个学生一只圆珠笔和铅笔&#xff0c;已知每只圆珠笔和铅笔的价格&#xff0c;以及班里面的学生人数n&#xff0c;你能帮助老师算出总价吗&#xff1f; 输入格式 第一行&#xff1a;一个整数n&#xff0c;代表班里…...

一篇文章掌握WebService服务、工作原理、核心组件、主流框架

目录 1、WebService定义 解决问题&#xff1a; 2、WebService的工作原理 2.1 实现一个完整的Web服务包括以下步骤 2.2 调用方式 3、Web Service的核心组件 3.1 XML 3.2 SOAP 3.3 WSDL 3.4 UDDI 4、主流框架 4.1 AXIS(已淘汰) 4.2 XFire 4.3 CXF 5、Soap协议详解…...

中软高科身份证云解码金融(银行)解决方案介绍

多年来&#xff0c;中软高科一直深耕身份证云解码领域&#xff0c;对身份证云解码应用于金融&#xff08;银行&#xff09;&#xff0c;进行了大量且深入的研究。从长期调研来看&#xff0c;金融&#xff08;银行&#xff09;的痛点需求主要有&#xff1a; 传统身份证解码设备…...

Linux NVIDIA GPU linpack 测试

前言 多节点多GPU测试有点坑,这篇文章有解决方法。 环境 操作系统信息 lsb_release -aNo LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.3 LTS Release: 22.04 Codename: jammycpu 信息 lscpuArchitecture: x86_64CPU op-mod…...

LiteFlow决策系统的策略模式,顺序、最坏、投票、权重

个人博客&#xff1a;无奈何杨&#xff08;wnhyang&#xff09; 个人语雀&#xff1a;wnhyang 共享语雀&#xff1a;在线知识共享 Github&#xff1a;wnhyang - Overview 想必大家都有听过或做过职业和性格测试吧&#xff0c;尤其是现在的毕业生&#xff0c;在投了简历之后经…...

“AI换脸”骗过人脸识别?黑产攻击新手段应如何防御?

在著名美剧《权力的游戏》中&#xff0c;有一个神秘的刺客组织叫“无面者”&#xff0c;这个组织中的人可以通过某种神秘手段切换无数种不同的面孔&#xff0c;实现“一人千面”。 电视剧毕竟魔幻。但如今&#xff0c;基于人工智能的深度合成伪造技术正在让“一人千面”成为现…...

面试题整理6----什么是进程最大数、最大线程数、进程打开的文件数,怎么调整

什么是进程最大数、最大线程数、进程打开的文件数&#xff0c;怎么调整 1. 进程最大数1.1 调整方法&#xff1a; 2. 最大线程数2.1 调整方法&#xff1a; 3. 注意事项 #linux 1. 进程最大数 进程最大数是指操作系统允许同时运行的进程数量上限。这个限制通常由内核参数 ulimi…...

android RadioButton + ViewPager+fragment

RadioGroup viewpage fragment 组合显示导航栏 1、首先主界面的布局控件就是RadioGroup viewpage <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools…...

Zabbix6.0升级为6.4

为了体验一些新的功能&#xff0c;比如 Webhook 和问题抑制等&#xff0c;升级个小版本。 一、环境信息 1. 版本要求 一定要事先查看官方文档&#xff0c;确认组件要求的版本&#xff0c;否则版本过高或者过低都会出现问题。 2. 升级前后信息 环境升级前升级后操作系统CentOS…...

Unity 根据文本宽度自动移动图像位置

游戏中有时候需要变动的显示一个物品的数量&#xff0c;变化的文本宽度不停的变化&#xff0c;这时候需要将物品的icon随着文本的长度而改变位置。 实现思路&#xff1a;使用Content Size Fitter来动态改变内容的大小。 首先建立一个文本组件&#xff0c;添加Content Size Fi…...

spring @Mapper Converter转换泛型异常

spring Mapper Converter转换泛型异常 需要在每个list类型转换上面加Named 注解&#xff0c;否则会影响page生成的类型转换 比如&#xff1a; import org.mapstruct.Mapper; import org.mapstruct.Named;import com.baomidou.mybatisplus.core.metadata.IPage; import com.b…...

如何设计一个秒杀系统

开局一张图 结局要说清 对于设计一个秒杀系统&#xff0c;结合图片分层结构&#xff0c;根据每一层从访问层&#xff0c;负载层&#xff0c;服务层&#xff0c;业务层&#xff0c;支撑层&#xff0c;数据层&#xff0c;详细说明每一层应该怎么设计。 应该注意那些事项。比如访…...

SPL06 基于stm32F103 HAL库驱动(软件模拟IIC)

talk is cheap, show you my code SPL06.c #include "SPL06.h"//*************全局变量*************// Factor_List* b_list; //存储过采样率对应的系数KP&#xff0c;KT COEF_ValueStruct Coefficient { 0 }; //存储校准系数…...

arcgisPro将面要素转成CAD多段线

1、说明&#xff1a;正常使用【导出为CAD】工具&#xff0c;则导出的是CAD三维多线段&#xff0c;无法进行编辑操作、读取面积等。这是因为要素面中包含Z值&#xff0c;导出则为三维多线段数据。需要利用【复制要素】工具禁用M值和Z值&#xff0c;再导出为CAD&#xff0c;则得到…...

Cocos Creator 试玩广告开发

之前主要是使用Unity,这次刚好项目是试玩游戏的开发&#xff0c;所以临时学了Cocos来开发。所以这篇文章&#xff0c;更加关注从Unity转到Cocos开发的经历以及试玩的基本开发。 首先&#xff0c;我是没有使用过Cocos的&#xff0c;也没有接触过Ts语言&#xff0c;对于Ts的开发开…...

【Linux】解锁文件描述符奥秘,高效缓存区的实战技巧

fd和缓冲区 1. 文件描述符fd1.1. 概念与本质1.2. 打开文件的管理1.3. 一切皆文件的理解1.4. 分配规则1.5. 重定向的本质1.5.1. dup2 2. FILE中的缓冲区2.1. 概念2.2. 存在的原因2.3. 类型(刷新方案)2.4. 存放的位置2.4.1. 代码证明、现象解释 2.5. 模拟C标准库中的方法 1. 文件…...

MySQL基础笔记(五)

在此特别感谢尚硅谷-康师傅的MySQL精品教程 获取更好的阅读体验请前往我的博客主站! 如果本文对你的学习有帮助&#xff0c;请多多点赞、评论、收藏&#xff0c;你们的反馈是我更新最大的动力&#xff01; 约束 1. 约束(constraint)概述 1.1 为什么需要约束 数据完整性&…...

夯实数字技术,培育创新人才:数据科学与大数据技术专业人才培养实践

近年来&#xff0c;得益于全球各国家和地区对大数据产业的政策扶持以及数字经济的蓬勃发展&#xff0c;大数据市场在全球范围内展现出了迅猛的增长态势。国家层面相继出台了诸如《“数据要素 ” 三年行动计划&#xff08;2024—2026 年&#xff09;》《数字中国建设整体布局规划…...

Java爬虫大冒险:如何征服1688商品搜索之巅

在这个信息爆炸的时代&#xff0c;数据就是力量。对于电商平台而言&#xff0c;数据更是金矿。今天&#xff0c;我们要踏上一场Java爬虫的冒险之旅&#xff0c;目标是征服1688这个B2B电商巨头&#xff0c;获取按关键字搜索的商品信息。这不仅是技术的挑战&#xff0c;更是智慧的…...

IEC 101/104 中为什么我们需要单点和双点信号

REDISANT 提供互联网与物联网开发测试套件 # 互联网与中间件&#xff1a; Redis AssistantZooKeeper AssistantKafka AssistantRocketMQ AssistantRabbitMQ AssistantPulsar AssistantHBase AssistantNoSql AssistantEtcd AssistantGarnet Assistant 工业与物联网&#xff1…...

01、NodeJS学习笔记,第一节:Node.js初识与内置模块

一、初识Node.js与内置模块 ##网址 https://nodejs.org##npm包 https://www.npmjs.com/ &#xff08;搜索&#xff09;https://registry.npmjs.org/ &#xff08;下载&#xff09;1、初识Node.js ##思考&#xff1a;为什么JavaScript可以在浏览器中被执行因为浏览器…...

ElasticSearch 自动补全

1、前言 当用户在搜索框输入字符时&#xff0c;我们应该提示出与该字符有关的搜索项&#xff0c;根据用户输入的字母&#xff0c;提示完整词条的功能&#xff0c;就是自动补全。 2、安装拼音分词器 Github地址&#xff1a;https://github.com/infinilabs/analysis-pinyin 插件…...

整点(枚举)

Hello&#xff01;大家好&#xff01;我是学霸小羊&#xff0c;今天分享一道c枚举题&#xff1a; 题目描述 在二维坐标系, 有一个圆&#xff0c;圆心在(0,0)&#xff0c;圆的半径是r。问圆内有多少个整点(所谓的整点就是横坐标和纵坐标都是整数的点)。若点P的横坐标是整数a&a…...

【WRF安装】WRF编译错误:problems building executables look for error in the build log

WRF编译错误 错误内容&#xff1a;problems building executables, look for error in the build log原因1&#xff1a;gcc版本过低安装高版本gcc 原因2&#xff1a;netcdf版本和配置有误原因3&#xff1a;库冲突原因4&#xff1a;export NETCDF_classic1终极手段&#xff1a;重…...

2024年12月陪玩系统-仿东郊到家约玩系统是一种新兴的线上预约线下社交、陪伴系统分享-优雅草央千澈-附带搭建教程

2024年12月陪玩系统-仿东郊到家约玩系统是一种新兴的线上预约线下社交、陪伴系统分享-优雅草央千澈-附带搭建教程 产品介绍 仿东郊到家约玩系统是一种新兴的线上预约&#xff0c;线下社交、陪伴、助娱、助攻、分享、解答、指导等服务模式&#xff0c;范围涉及电竞、运动、音乐…...

社区版 IDEA 开发webapp 配置tomcat

1.安装tomcat 参考Tomcat配置_tomcat怎么配置成功-CSDN博客 2.构建webapp项目结构 新建一个普通项目 然后添加webapp的目录结构&#xff1a; main目录下新建 webapp 文件夹 webapp文件夹下新建WEB_INF文件夹 *WEB_INF目录下新建web.xml wenapp文件夹下再新建index.html …...

IDEA中解决Edit Configurations中没有tomcat Server选项的问题

今天使用IDEA2024专业版的时候,发现Edit Configurations里面没有tomcat Server,最终找到解决方案。 一、解决办法 1、打开Settings 2、搜索tomcat插件 搜索tomcat插件之后,找到tomcat 发现tomcat插件处于未勾选状态,然后我们将其勾选保存即可。 二、结果展示 最后,再次编…...

【Python】主成分分析PCA - 算法、问题与Python实现

【Python】主成分分析PCA - 算法、问题与Python实现 一、PCA 算法简介&#xff08;一&#xff09;概念及作用&#xff08;二&#xff09;基本原理&#xff08;三&#xff09;算法步骤1.数据预处理2.计算协方差矩阵3.进行特征值分解4.选择主成分5.完成数据降维 二、PCA 常见问题…...