这个小 Python 脚本提高了对低级编程的理解
最初发表于 Medium 上的 Level Up Coding。
Python 的易用性常常掩盖了潜在的复杂性。 许多开发人员对通用库和模式感到满意,从而导致学习停滞不前。 然而,并发和低级编程等高级主题提供了重要的增长机会。
Talk Python To Me 播客是高级 Python 学习的宝贵资源。 他们的课程“使用 async/await 和线程的 Python 并行编程”提供了有关并发和代码优化的重要见解。
传统的计算机科学课程通常涵盖计算机体系结构、C 编程以及互斥体、信号量和指针等概念。然而,对于许多程序员来说,这些概念的实际应用仍然难以捉摸。 例如,了解 CPU 核心利用率通常停留在理论上。
本课程重点介绍 unsync
库,这是一个简化并发和并行编程的强大工具。 unsync
将 async
、线程和多处理统一到单个 API 中,根据任务是 CPU 密集型、I/O 密集型还是异步来自动优化任务。 它通过处理线程管理复杂性来简化并发编程。
以下脚本说明了这些概念:
# source: https://github.com/talkpython/async-techniques-python-course/blob/master/src/09-built-on-asyncio/the_unsync/thesync.py import datetime import math import asyncio import aiohttp import requests from unsync import unsync def main(): start_time = datetime.datetime.now() tasks = [ compute_some(), compute_some(), compute_some(), download_some(), download_some(), download_some_more(), download_some_more(), wait_some(), wait_some(), wait_some(), wait_some(), ] [t.result() for t in tasks] end_time = datetime.datetime.now() elapsed_time = end_time - start_time print(f"Synchronous version completed in {elapsed_time.total_seconds():,.2f} seconds.") @unsync(cpu_bound=True) def compute_some(): print("Performing computation...") for _ in range(1, 10_000_000): math.sqrt(25 ** 25 + .01) @unsync() async def download_some(): print("Downloading...") url = 'https://talkpython.fm/episodes/show/174/coming-into-python-from-another-industry-part-2' async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=False)) as session: async with session.get(url) as resp: resp.raise_for_status() text = await resp.text() print(f"Downloaded (more) {len(text):,} characters.") @unsync() def download_some_more(): print("Downloading more...") url = 'https://pythonbytes.fm/episodes/show/92/will-your-python-be-compiled' resp = requests.get(url) resp.raise_for_status() text = resp.text print(f"Downloaded {len(text):,} characters.") @unsync() async def wait_some(): print("Waiting...") for _ in range(1, 1000): await asyncio.sleep(.001) if __name__ == "__main__": main()
脚本分解
此脚本展示了并发任务执行以提高性能:
-
compute_some
功能: 执行密集计算,展示多线程 CPU 核心利用率。 现实世界的应用包括科学计算和数据处理。 -
download_some
功能: 异步下载数据,利用aiohttp
进行非阻塞 I/O。 非常适合网页抓取和并发 API 调用。 -
download_some_more
功能: 在单独的线程中使用同步请求,适合需要并发而不需要非阻塞 I/O 的简单场景。 -
wait_some
功能: 模拟异步延迟,允许其他任务同时进行。 对于涉及等待外部事件的任务很有用。
学习要点
该脚本强调了并发编程的好处:同时执行任务可以实现更快的处理速度和更高效的资源利用。
高效的应用程序开发需要了解内存 (RAM) 和处理能力 (CPU) 之间的相互作用。 RAM 提供对数据的快速访问,从而在 CPU 执行指令时实现流畅的多任务处理。 充足的内存对于处理大型数据集和多项操作至关重要,而强大的 CPU 可确保快速计算和响应应用程序。 理解这种关系对于优化和高效的任务管理至关重要,从而使高性能应用程序能够处理复杂的任务。
亚历山大·科瓦列夫拍摄
以上是这个小 Python 脚本提高了对低级编程的理解的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

每天学习Python两个小时是否足够?这取决于你的目标和学习方法。1)制定清晰的学习计划,2)选择合适的学习资源和方法,3)动手实践和复习巩固,可以在这段时间内逐步掌握Python的基本知识和高级功能。

Python在开发效率上优于C ,但C 在执行性能上更高。1.Python的简洁语法和丰富库提高开发效率。2.C 的编译型特性和硬件控制提升执行性能。选择时需根据项目需求权衡开发速度与执行效率。

Python和C 各有优势,选择应基于项目需求。1)Python适合快速开发和数据处理,因其简洁语法和动态类型。2)C 适用于高性能和系统编程,因其静态类型和手动内存管理。

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。

Python在科学计算中的应用包括数据分析、机器学习、数值模拟和可视化。1.Numpy提供高效的多维数组和数学函数。2.SciPy扩展Numpy功能,提供优化和线性代数工具。3.Pandas用于数据处理和分析。4.Matplotlib用于生成各种图表和可视化结果。

Python在Web开发中的关键应用包括使用Django和Flask框架、API开发、数据分析与可视化、机器学习与AI、以及性能优化。1.Django和Flask框架:Django适合快速开发复杂应用,Flask适用于小型或高度自定义项目。2.API开发:使用Flask或DjangoRESTFramework构建RESTfulAPI。3.数据分析与可视化:利用Python处理数据并通过Web界面展示。4.机器学习与AI:Python用于构建智能Web应用。5.性能优化:通过异步编程、缓存和代码优
