Node.js开发者的现代Python教程

介绍

Python,作为一种简洁、强大且广泛应用的编程语言,已经成为数据科学、人工智能、网络服务器开发等多个领域的主流语言。本教程旨在为熟悉Node.js的开发者提供一个现代Python的快速入门指南。

环境搭建

uv是一个使用Rust编写的Python项目和包管理工具

安装uv


bash

代码解读

复制代码

curl -LsSf https://astral.sh/uv/install.sh | sh source $HOME/.local/bin/env

使用uv安装Python


bash

代码解读

复制代码

➜ uv python list cpython-3.13.1+freethreaded-macos-aarch64-none <download available> cpython-3.13.1-macos-aarch64-none <download available> cpython-3.9.6-macos-aarch64-none <download available> ...

选择一个版本并安装


bash

代码解读

复制代码

uv python install cpython-3.9.6-macos-aarch64-none

创建项目

初始化一个项目


bash

代码解读

复制代码

uv init demo && cd demo

同步项目依赖


bash

代码解读

复制代码

uv sync

uv会根据 pyproject.toml 和 .python-version 定义的项目依赖和Python版本依赖, 自动生成venv虚拟环境

激活虚拟环境


bash

代码解读

复制代码

➜ uv venv Using CPython 3.9.6 interpreter at: /Library/Developer/CommandLineTools/usr/bin/python3 Creating virtual environment at: .venv Activate with: source .venv/bin/activate

使用当前项目的环境运行代码


bash

代码解读

复制代码

uv run hello.py Hello from demo!

安装依赖

Robyn是一个基于Rustuvloop构建的高性能Web框架,uvloop是一个基于libuv实现Python异步运行时

使用uv安装Robyn


bash

代码解读

复制代码

uv add robyn

安装完成后可以看到项目的pyproject.toml文件中自动增加了对应的依赖项目版本和锁定版本的uv.lock文件


toml

代码解读

复制代码

[project] name = "demo" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.9.6" dependencies = [ "robyn>=0.64.2", ]

要卸载某个依赖项可以执行


bash

代码解读

复制代码

uv remove [依赖项的名称]

Web开发

在项目中创建src目录,并在src目录中创建main.py入口文件


python

代码解读

复制代码

from robyn import Robyn app = Robyn(__file__) @app.get("/") async def h(request): return "Hello, world!" app.start(port=8080)

启动项目


bash

代码解读

复制代码

➜ uv run ./src/main.py --open-browser INFO:robyn.logger:SERVER IS RUNNING IN VERBOSE/DEBUG MODE. Set --log-level to WARN to run in production mode. INFO:robyn.logger:Robyn version: 0.37.0 INFO:robyn.logger:Starting server at 127.0.0.1:8080 INFO:robyn.logger:Press Ctrl + C to stop INFO:actix_server.builder:starting 1 workers INFO:actix_server.server:Actix runtime found; starting in Actix runtime INFO:actix_server.server:starting service: "actix-web-service-127.0.0.1:8080", workers: 1, listening on: 127.0.0.1:8080

可以看到输出了 Hello, world!

命令行参数说明:


css

代码解读

复制代码

--open-browser 启动成功后打开浏览器 --processes PROCESSES 进程数量[默认:1] --workers WORKERS 工作者数量[默认:1] --dev 开发模式,可快速重启

在入口文件旁边创建robyn.env文件可以通过环境变量传递参数


python

代码解读

复制代码

ROBYN_PORT=8888 ROBYN_DEV_MODE=True

中间件


python

代码解读

复制代码

@app.before_request("/") async def hello_before_request(request): print("before_request") return request @app.after_request("/") def hello_after_request(response): print("after_request") return response

依赖注入

应用级依赖注入


python

代码解读

复制代码

from robyn import Robyn, ALLOW_CORS app = Robyn(__file__) GLOBAL_DEPENDENCY = "GLOBAL DEPENDENCY" app.inject_global(GLOBAL_DEPENDENCY=GLOBAL_DEPENDENCY) @app.get("/sync/di") def sync_di(request, global_dependencies): return global_dependencies["GLOBAL_DEPENDENCY"]

路由级依赖注入


python

代码解读

复制代码

from robyn import Robyn, ALLOW_CORS app = Robyn(__file__) ROUTER_DEPENDENCY = "ROUTER DEPENDENCY" app.inject(ROUTER_DEPENDENCY=ROUTER_DEPENDENCY) @app.get("/sync/di") def sync_di(request, router_dependencies): return router_dependencies["ROUTER_DEPENDENCY"]

异常处理

可根据异常的类型进行对应的处理


python

代码解读

复制代码

@app.exception def handle_exception(error): return Response(status_code=500, description=f"error msg: {error}", headers={})

使用Rust

src/rust目录中创建一个Rust文件


bash

代码解读

复制代码

uv run robyn --create-rust-file rust_math


rust

代码解读

复制代码

// rustimport:pyo3 use pyo3::prelude::*; #[pyfunction] fn square(n: i32) -> i32 { n * n }

直接运行依赖Rust包的项目


python

代码解读

复制代码

from robyn import Robyn from rust.rust_math import square app = Robyn(__file__) @app.before_request("/") async def hello_before_request(request): print("before_request") return request @app.after_request("/") def hello_after_request(response): print("after_request") return response @app.get("/") async def h(request): return square(5) app.start()


bash

代码解读

复制代码

uv run ./src/main.py --compile-rust-path="."

性能测试

oha是一个使用Rust编写的HTTP基准测试工具,用于模拟多个客户端同时向服务器发送请求

使用oha测试项目


bash

代码解读

复制代码

oha -z 5s -c 1000 -q 1000 --latency-correction --disable-keepalive http://127.0.0.1:8888/ - `-z` 运行时间 5s 表示持续运行5秒 - `-c` 并发连接数 - `-q` 每秒查询次数(QPS) - `--latency-correction`:开启延迟校正,用于更准确地测量请求的响应时间。 - `--disable-keepalive`:禁用HTTP持久连接(Keep-Alive),这意味着每个请求都会在一个新的连接上发送,而不是复用现有的连接。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值