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

Python与Rust的混合编程:结合两者的优势

Python与Rust的混合编程结合两者的优势前言大家好我是第一程序员名字大人很菜。作为一个非科班转码、正在学习Rust和Python的萌新最近我开始学习Python与Rust的混合编程。说实话一开始我对混合编程的概念还很模糊但随着学习的深入我发现结合Python和Rust的优势可以构建出既高效又高性能的应用。今天我想分享一下我对Python与Rust混合编程的学习心得希望能给同样是非科班转码的朋友们一些参考。一、使用Rust扩展Python1.1 使用PyO3PyO3是一个用于在Rust和Python之间进行互操作的库// Cargo.toml [package] name rust_extension version 0.1.0 edition 2021 [lib] crate-type [cdylib] dependencies pyo3 { version 0.19.0, features [extension-module] } // src/lib.rs use pyo3::prelude::*; #[pyfunction] fn add(a: i32, b: i32) - i32 { a b } #[pyfunction] fn fibonacci(n: u32) - u64 { if n 1 { return n as u64; } fibonacci(n - 1) fibonacci(n - 2) } #[pymodule] fn rust_extension(_py: Python, m: PyModule) - PyResult() { m.add_function(wrap_pyfunction!(add, m)?)?; m.add_function(wrap_pyfunction!(fibonacci, m)?)?; Ok(()) }1.2 构建和使用扩展# 构建扩展 cargo build --release # 复制动态库到Python项目目录 cp target/release/librust_extension.so rust_extension.so # 在Python中使用 import rust_extension print(rust_extension.add(1, 2)) # 输出: 3 print(rust_extension.fibonacci(10)) # 输出: 551.3 使用maturinmaturin是一个用于构建和发布Python包的工具# 安装maturin pip install maturin # 初始化项目 maturin init # 构建包 maturin build # 安装包 pip install target/wheels/rust_extension-0.1.0-cp39-cp39-manylinux_2_31_x86_64.whl # 在Python中使用 import rust_extension print(rust_extension.add(1, 2)) # 输出: 3二、使用Python调用Rust代码2.1 使用subprocess使用subprocess模块调用Rust可执行文件// src/main.rs fn main() { let args: VecString std::env::args().collect(); if args.len() 3 { let a: i32 args[1].parse().unwrap(); let b: i32 args[2].parse().unwrap(); println!({}, a b); } }import subprocess # 编译Rust代码 subprocess.run([cargo, build, --release]) # 调用Rust可执行文件 result subprocess.run([./target/release/add, 1, 2], capture_outputTrue, textTrue) print(result.stdout.strip()) # 输出: 32.2 使用Rust Python bindings使用Rust的Python bindings直接调用Python代码// Cargo.toml [dependencies] pyo3 { version 0.19.0, features [auto-initialize] } // src/main.rs use pyo3::prelude::*; fn main() - PyResult() { Python::with_gil(|py| { // 导入Python模块 let sys py.import(sys)?; sys.getattr(path)?.call_method1(append, (/path/to/python/modules,))?; // 导入自定义Python模块 let module py.import(my_module)?; // 调用Python函数 let result module.getattr(add)?.call1((1, 2))?; println!(Result: {:?}, result); Ok(()) }) }三、性能对比3.1 计算密集型任务// Rust代码 fn fibonacci(n: u32) - u64 { if n 1 { return n as u64; } fibonacci(n - 1) fibonacci(n - 2) } fn main() { let start std::time::Instant::now(); let result fibonacci(40); let duration start.elapsed(); println!(Rust: {} in {:?}, result, duration); }# Python代码 import time def fibonacci(n): if n 1: return n return fibonacci(n-1) fibonacci(n-2) start time.time() result fibonacci(40) duration time.time() - start print(fPython: {result} in {duration:.4f} seconds)3.2 内存使用对比// Rust代码 fn main() { let mut vec Vec::new(); for i in 0..1_000_000 { vec.push(i); } println!(Rust: Vector size: {} bytes, std::mem::size_of_val(vec) vec.len() * std::mem::size_of::i32()); }# Python代码 import sys lst [i for i in range(1_000_000)] print(fPython: List size: {sys.getsizeof(lst)} bytes)四、混合编程的优势4.1 Python的优势开发效率高语法简洁生态丰富数据科学有Pandas、NumPy等库Web开发有Django、FastAPI等框架自动化有丰富的自动化工具4.2 Rust的优势性能优异接近C/C的性能内存安全无内存泄漏无空指针并发安全无数据竞争类型安全编译时类型检查4.3 混合编程的优势性能与开发效率兼顾Python负责业务逻辑Rust负责性能关键部分内存安全Rust的内存安全特性可以避免Python中的内存问题跨平台两者都支持跨平台开发生态互补可以利用两者的生态系统五、实践项目5.1 性能关键部分使用Rust# Python代码 import rust_extension # 性能关键部分使用Rust def process_large_data(data): # 使用Rust处理大规模数据 return rust_extension.process_data(data) # 业务逻辑使用Python def main(): data load_large_data() result process_large_data(data) analyze_result(result)5.2 构建高性能Web服务# Python代码FastAPI from fastapi import FastAPI import rust_extension app FastAPI() app.get(/fibonacci/{n}) def get_fibonacci(n: int): # 使用Rust计算斐波那契数列 result rust_extension.fibonacci(n) return {result: result}5.3 构建高性能数据分析工具# Python代码 import pandas as pd import rust_extension # 使用Rust加速数据分析 def analyze_data(df): # 将数据转换为Rust可处理的格式 data df.values.tolist() # 使用Rust进行高性能计算 result rust_extension.analyze_data(data) # 将结果转换回Python格式 return pd.DataFrame(result)六、学习方法和技巧6.1 学习方法循序渐进先学习Python和Rust的基础知识再学习混合编程项目实践通过实际项目来巩固知识文档阅读仔细阅读PyO3、maturin等库的官方文档社区交流加入社区向他人学习6.2 常见问题和解决方法构建问题确保安装了正确的依赖和工具链类型转换注意Python和Rust之间的类型转换内存管理了解Python和Rust的内存管理机制性能优化只在性能关键部分使用Rust七、总结Python与Rust的混合编程是一种强大的开发方式可以结合两者的优势构建出既高效又高性能的应用。作为一个非科班转码者我深刻体会到这种混合编程的重要性。我的学习过程并不是一帆风顺的遇到了很多困难和挫折但通过不断地实践和学习我逐渐掌握了Python与Rust混合编程的各种技巧。保持学习保持输出。虽然现在我还是个菜鸡但我相信只要坚持总有一天能成为真正的「第一程序员」

相关文章:

Python与Rust的混合编程:结合两者的优势

Python与Rust的混合编程:结合两者的优势 前言 大家好,我是第一程序员(名字大,人很菜)。作为一个非科班转码、正在学习Rust和Python的萌新,最近我开始学习Python与Rust的混合编程。说实话,一开始…...

Python安全编程:保护你的代码和数据

Python安全编程:保护你的代码和数据 前言 大家好,我是第一程序员(名字大,人很菜)。作为一个非科班转码、正在学习Rust和Python的萌新,最近我开始关注Python的安全编程。说实话,一开始我对安全编…...

《深入理解Mybatis原理》MyBatis动态SQL原理

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...

《深入理解Mybatis原理》MyBatis数据源与连接池详解

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...

SpringBoot的两种启动方式原理

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...

极客老王说Agent:具备“看屏幕”能力的Agent如何击穿传统接口无法触达的业务荒原?

站在2026年4月这个“智能体元年”的节点回望,人工智能的演进已然完成了一次惊人的范式跃迁。根据最新的行业动态显示,Agent正从单纯依赖文本指令的“对话框”形态,加速向具备多模态感知、尤其是具备“看屏幕”能力的“数字员工”形态进化。在…...

单相级联H桥(CHB)多电平变换器并网仿真,网侧电压220V PR电压外环 ,PI电流内环,有...

单相级联H桥(CHB)多电平变换器并网仿真,网侧电压220V PR电压外环 ,PI电流内环,有独立的电容电压平衡控制,使用三个全桥子模块,可输出7电平,可供参考学习单相级联H桥多电平变换器这…...

西门子S7-200SMART PLC与组态王7.0通信在压铸机控制中的应用:附带完整程序与多媒体资料

西门子S7-200SMART PLC和组态王7.0通信 控制压铸机 附带PLC程序组态王程序组态王运行视频组态王运行图片 最近在折腾压铸机自动化改造项目,用西门子S7-200 SMART PLC配合组态王7.0做上位监控。这个组合在中小型设备上还挺常见,但实际调试时通信配置这块…...

Redis 实战篇1.4 (Redis优化秒杀)

Redis优化秒杀原流程思路Redis优化秒杀在Redis中库存用String数据类型存储,为了确保一人一单,则订单id存储用Set数据类型保证数据的唯一性lua脚本保证原子性异步秒杀方案案例:需求创建订单(还没完成明天继续)// 解锁的…...

收藏!前端打工人破局指南:转AI Agent,告别重复劳动,薪资翻倍

作为前端打工人,那种深陷内耗的痛,真的只有自己懂👇 每天围着页面布局、接口联调死磕,需求堆成山,兼容问题调不停,看似忙碌的日子,全是机械的重复劳动,没有一点成长空间。 干得越久越…...

LeetCode 二叉树高频双题绝杀!第 k 小元素 + 右视图,小白一遍学会

目录 前言 第一题:二叉搜索树中第 K 小的元素 🎯 题目要求 💡 小白秒懂核心思路 ✅ 完整解题代码 📝 通俗代码解析 第二题:二叉树的右视图 🎯 题目要求 💡 小白秒懂核心思路 ✅ 完整解…...

如何从视频中高效提取幻灯片:智能工具应用指南

如何从视频中高效提取幻灯片:智能工具应用指南 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 你是否曾遇到这样的困扰:参加线上会议后想整理演示文稿&#x…...

短视频 SEO 优化对于新手有什么建议_如何分析短视频的 SEO 效果

短视频 SEO 优化对于新手有什么建议 在当今数字化时代,短视频平台已经成为了人们获取信息和娱乐的重要途径。无论是抖音、快手,还是TikTok,短视频内容的迅速增长引发了广大创作者对SEO(搜索引擎优化)的关注。对于新手…...

贾子 Kucius 的证伪主义批判与学术评价体系重构:文明持续运行的新范式

贾子 Kucius 的证伪主义批判与学术评价体系重构:文明持续运行的新范式摘要 贾子 Kucius 系统批判了波普尔证伪主义作为西方中心论话语霸权的“证死你,证伟我”双标本质,揭示其逻辑悖论与认知殖民机制。他提出以“文明持续运行能力”替代“可证…...

使用 SEO 搜索引擎营销工具需要多长时间见效

SEO 搜索引擎营销工具需要多长时间见效 随着互联网的普及和数字营销的迅速发展,越来越多的企业开始重视SEO(搜索引擎优化)工具的使用。SEO工具不仅能帮助企业提升网站在搜索引擎中的排名,还能带来更多的流量和潜在客户。许多人在…...

国内大模型托管平台推荐:四大平台选型指南

随着大模型技术加速落地,模型托管平台已成为开发者不可或缺的基础设施。本文梳理了2025年国内主流的四大大模型托管平台,从核心优势、适用场景到选型建议,为你提供一份实用的选型指南。一、模力方舟:国产开源生态的“基石”推荐指…...

从‘滋滋’声到过认证:一个Buck电源的EMI实战整改笔记(附PCB布局优化技巧)

从‘滋滋’声到过认证:一个Buck电源的EMI实战整改笔记(附PCB布局优化技巧) 1. 问题浮现:EMI测试中的异常现象 那是一个周五的下午,实验室的EMI测试仪屏幕上跳动的红色曲线格外刺眼。我们团队开发的IoT设备在CE认证测试…...

齿轮基础参数

基于传统势能法含裂纹斜齿轮时变啮合刚度(裂纹斜齿轮),代码保证运行无问题,出图效果如页面简介齿轮传动系统里最怕遇到啥?裂纹呗!尤其是斜齿轮这种接触线斜着走的家伙,一旦出现裂纹整个时变刚度曲线直接抽风…...

三菱FX5U ModbusTCP从站配置避坑指南:从IP冲突到通讯成功的完整流程

三菱FX5U ModbusTCP从站配置避坑指南:从IP冲突到通讯成功的完整流程 工业自动化领域中,ModbusTCP通讯协议因其简单高效的特点,成为PLC与上位机交互的常用方式。三菱FX5U系列PLC作为一款高性价比的可编程控制器,在中小型自动化项目…...

中航迈特光束整形金属3D打印技术取得重要进展,多种材料已成功验证

中航迈特在金属3D打印装备研发方面持续发力,尤其是光束整形技术近期取得重要进展。在本届TCT亚洲展,它推出的MT280搭载了无级点环光斑能量智调系统,是光束整形金属3D打印当前较新的看点。据3D打印技术参考了解,无级点环光斑能量智…...

CSDN首页发布文章意见反馈

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

如何利用爬虫技术快速精准地抓取目标数据?

1. 爬虫策略:从"无脑抓"到"精准狙击" 我刚入行时犯过一个典型错误——用单线程脚本无差别抓取整站数据,结果不仅触发反爬机制被封IP,还浪费三天时间清洗90%的无用数据。现在回头看,合理的爬虫策略就像狙击手…...

并联型有源电力滤波器APF的三相三线制模型及其Simulink仿真研究——基于瞬时无功功率理论...

并联型有源电力滤波器APF三相三线模型都包括,simulink仿真利用基于瞬时无功功率理论的ip-iq谐波检测算法,对三相三线制并联型APF控制系统进行建模与Matlab仿真最近在搞三相三线制并联型APF的仿真,发现基于ip-iq谐波检测的方案确实挺有意思。这…...

Three.js实战:打造交互式3D中国地图可视化

1. 从零开始搭建3D中国地图 第一次接触Three.js时,我被它强大的3D渲染能力震撼到了。作为一个长期从事数据可视化的开发者,我一直在寻找能够将地理数据以更生动方式呈现的工具。Three.js配合D3.js的组合,完美解决了这个问题。 1.1 数据准备与…...

水产养殖自动控制系统:远程操控,鱼塘24小时在线守护

在我国水产养殖产业快速发展的今天,“产量高、品质优、成本低、更环保”已成为养殖从业者的核心追求。但传统养殖模式中,人工巡检效率低、水质调控凭经验、投喂施肥不精准等问题,不仅增加了劳动强度,还易导致养殖生物应激、病害频…...

实战指南:用Python的pyttsx3库打造你的专属语音助手

1. 从零认识pyttsx3:你的代码会说话 第一次听到电脑用标准播音腔朗读出我写的文字时,那种感觉就像小时候收到会说话的生日贺卡。pyttsx3这个神奇的Python库,能让任何文本通过声卡变成人声。不同于需要联网的语音合成服务,它完全离…...

OpenClaw学习助手:Qwen3.5-9B自动整理学术PDF笔记

OpenClaw学习助手:Qwen3.5-9B自动整理学术PDF笔记 1. 为什么需要自动化文献整理 作为一名每天需要阅读大量文献的研究者,我长期被两个问题困扰:一是PDF里的关键信息需要手动复制粘贴到笔记软件,二是不同文献的结论难以横向对比。…...

Windows下IDEA远程开发全离线配置指南(含JetBrainsClient避坑)

Windows下IDEA远程开发全离线配置实战指南 最近在给某金融机构做内部开发环境迁移时,遇到了一个棘手问题:他们的生产网络完全隔离外网,但开发团队又急需使用IDEA的远程开发功能。经过两周的反复试验,终于摸索出一套完整的离线配置…...

Go语言的网络编程:从TCP到WebSocket

Go语言的网络编程:从TCP到WebSocket 网络编程的重要性 在现代软件开发中,网络编程是一项基本技能。通过网络编程,我们可以: 构建客户端-服务器应用程序实现分布式系统开发 Web 应用和 API实现实时通信功能与其他服务进行集成 Go 语…...

Edge/Chrome用户必看:3种免费工具批量清理失效书签(2023实测)

Edge/Chrome用户必备:2023年高效清理失效书签的3种解决方案 每次打开浏览器,看到密密麻麻的书签栏却找不到真正可用的链接?这可能是大多数互联网用户的日常困扰。根据2023年用户调研数据显示,平均每位浏览器用户拥有超过200个书签…...