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

news2024/12/19 6:05:12

文章目录

  • 说个问题
  • 写个方案
  • 一、安装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 server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
     Active: active (running) since Mon 2024-12-16 01:06:56 UTC; 9min ago
       Docs: 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: 11ms
     CGroup: /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 Flask
  Downloading 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 Flask

app = 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 gunicorn
  Downloading 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】基于Python Web应用的Flask Web开发学习笔记

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

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

相关文章

SpringBoot如何实现缓存预热?

缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。 那么问题来了,在 Spring Boot 项目启动之后,在什么时候?在哪里可以将数据加载到缓存系统呢? 实现…

贪心算法 part01

class Solution { public:int maxSubArray(vector<int>& nums) {int result INT32_MIN;int count 0;for (int i 0; i < nums.size(); i) {count nums[i];if (count > result) { // 取区间累计的最大值&#xff08;相当于不断确定最大子序终止位置&#xff…

Redis应用—6.热key探测设计与实践

大纲 1.热key引发的巨大风险 2.以往热key问题怎么解决 3.热key进内存后的优势 4.热key探测关键指标 5.热key探测框架JdHotkey的简介 6.热key探测框架JdHotkey的组成 7.热key探测框架JdHotkey的工作流程 8.热key探测框架JdHotkey的性能表现 9.关于热key探测框架JdHotke…

海外招聘丨卢森堡大学—人工智能和机器学习中的 PI 用于图像分析

雇主简介 卢森堡大学立志成为欧洲最受推崇的大学之一&#xff0c;具有鲜明的国际化、多语言和跨学科特色。 她促进研究和教学的相互影响&#xff0c;与国家息息相关&#xff0c;因其在特定领域的研究和教学而闻名于世&#xff0c;并成为当代欧洲高等教育的创新典范。 她的核…

SSM虾米音乐项目6--后台专辑模块的修改和删除

删除操作 删除的前端界面 删除的前端代码 <button data-toggle"button" class"btn btn-sm btn-warning" aid"${album.aid}" pic"${album.pic}"> 删除 </button></td> 点击删除按钮&#xff0c;会调用JS中的AJAX请…

【潜意识Java】了解并详细分析Java与AIGC的结合应用和使用方式

目录 一、AIGC技术概述 二、Java与AIGC结合的价值 三、实现Java与AIGC结合&#xff1a;基于OpenAI的API进行智能文本生成 1. 环境准备 2. Java代码实现 3. 代码解析 4. 运行效果 四、进一步优化与扩展 五、总结 随着人工智能&#xff08;AI&#xff09;的飞速发展&…

基于容器的云原生,让业务更自由地翱翔云端

无论是要构建一个应用或开发一个更庞大的解决方案&#xff0c;在技术选型时&#xff0c;技术的开放性和可移植性已经成为很多企业优先考虑的问题之一。毕竟没人希望自己未来的发展方向和成长速度被自己若干年前选择使用的某项技术所限制或拖累。 那么当你的业务已经上云&#x…

二叉树_堆

目录 一. 树(非线性结构&#xff09; 1.1 树的概念与结构 1.2 树的表示 二. 二叉树 2.1 二叉树的概念与结构 2.2 特殊的二叉树 2.3 二叉树的存储结构 三. 实现顺序结构的二叉树 3.1 堆的概念与结构 一. 树(非线性结构&#xff09; 1.1 树的概念与结构 概念&#xff…

linux0.11源码分析第一弹——bootset.s内容

&#x1f680;前言 本系列主要参考的《linux源码趣读》&#xff0c;也结合之前《一个64位操作系统的设计与实现》的内容结合起来进行整理成本系列博客。在这一篇博客对应的是《linux源码趣读》第一~四回 目录 &#x1f680;前言&#x1f3c6;启动后的第一步&#x1f4c3;启动区…

设计模式之桥接模式:抽象与实现之间的分离艺术

~犬&#x1f4f0;余~ “我欲贱而贵&#xff0c;愚而智&#xff0c;贫而富&#xff0c;可乎&#xff1f; 曰&#xff1a;其唯学乎” 桥接模式概述与角色组成 想象一下你家里的电视遥控器&#xff0c;无论是索尼还是三星的电视机&#xff0c;遥控器的按键功能都差不多&#xff1…

【从零开始入门unity游戏开发之——C#篇17】C#面向对象的封装——类(Class)和对象、成员变量和访问修饰符、成员方法

文章目录 一、类和对象1、什么是类和对象&#xff1f;2、例子说明2.1 例子1&#xff1a;(1) **类的定义&#xff1a;**(2) **创建对象&#xff1a;**(3) **类和对象的关系&#xff1a;** 2.2 例子2&#xff1a;**类的比喻&#xff1a;****对象的比喻&#xff1a;**代码实例&…

在Ubuntu 22.04 LTS中使用PyTorch深度学习框架并调用多GPU时遇到indexSelectLargeIndex相关的断言失败【笔记】

在Ubuntu 22.04 LTS系统中&#xff0c;已安装配置好CUDA 12.4、cuDNN 9.1.1以及PyTorch环境 export CUDA_VISIBLE_DEVICES0,1,2,3,4,5,6,7 在PyTorch深度学习框架训练调用多GPU时&#xff0c;提示 indexSelectLargeIndex: block: [x, 0, 0], thread: [x, 0, 0] Assertion src…

FutureCompletableFuture实战

1. Callable&Future&FutureTask介绍 直接继承Thread或者实现Runnable接口都可以创建线程&#xff0c;但是这两种方法都有一个问题就是&#xff1a;没有返回值&#xff0c;也就是不能获取执行完的结果。因此java1.5就提供了Callable接口来实现这一场景&#xff0c;而Fu…

[论文阅读笔记]-PalmTree: 学习一个用于指令嵌入的汇编语言模型

深度学习已在众多二进制分析任务中展示了其优势&#xff0c;包括函数边界检测、二进制代码搜索、函数原型推理、值集分析等。现有方案忽略了复杂的指令内结构&#xff0c;主要依赖于控制流&#xff0c;其中上下文信息是嘈杂的&#xff0c;并且可能受到编译器优化的影响。为了解…

CH582F BLE5.3 蓝牙核心板开发板 60MHz RAM:32KB ROM:448KB

CH582F BLE5.3 蓝牙核心板开发板 60MHz RAM:32KB ROM:448KB 是一款基于南京沁恒&#xff08;WCH&#xff09;推出的高性能、低功耗无线通信芯片CH582F的开发板。以下是该开发板的功能和参数详细介绍&#xff1a; 主要特性 双模蓝牙支持&#xff1a; 支持蓝牙5.0标准&#xff0…

数字IC后端设计实现篇之TSMC 12nm TCD cell(Dummy TCD Cell)应该怎么加?

TSMC 12nm A72项目我们需要按照foundary的要求提前在floorplan阶段加好TCD Cell。这个cell是用来做工艺校准的。这个dummy TCD Cell也可以等后续Calibre 插dummy自动插。但咱们项目要求提前在floorplan阶段就先预先规划好位置。 TSCM12nm 1P9M的metal stack结构图如下图所示。…

《网络对抗技术》Exp9 Web安全基础

实验目标 理解常用网络攻击技术的基本原理。 实验内容 Webgoat实践下相关实验。 实验环境 macOS下Parallels Desktop虚拟机中&#xff08;网络源均设置为共享网络模式&#xff09;&#xff1a; Kali Linux - 64bit&#xff08;攻击机&#xff0c;IP为10.211.55.10&#xff09;…

Chrome 132 版本开发者工具(DevTools)更新内容

Chrome 132 版本开发者工具&#xff08;DevTools&#xff09;更新内容 一、使用 Gemini 调试 Network、Source 和 Performance Chrome 131 可以使用 Gemini 调试 CSS&#xff0c;现在可以调试更多模块了 与元素面板中的右键菜单类似&#xff0c;要打开 AI 辅助面板并开始与 …

消息系统之 Kafka

什么是消息系统 消息系统是专用的中间件&#xff0c;负责将数据从一个应用传递到另外一个应用。使应用只需关注于数据&#xff0c;无需关注数据在两个或多个应用间是如何传递的。 消息系统一般基于可靠的消息队列来实现&#xff0c;使用点对点模式或发布订阅模式。数据实时在…

Intel-ECI之Codesys PLC + Ethercat 远端IO + Codesys IDE编程

目录 一、 准备工作 二、安装Codesys 软件 PLC 三、 使用Codesys IDE 编程测试 CODESYS* 是领先的独立于制造商的 IEC 61131-3 自动化软件&#xff0c;适用于工程控制系统。它用于 Intel Edge Controls for Industrial&#xff08;Intel ECI 或 ECI&#xff09;&#xff0c;…