0

0

这个小 Python 脚本提高了对低级编程的理解

聖光之護

聖光之護

发布时间:2025-01-12 08:10:22

|

811人浏览过

|

来源于php中文网

原创

这个小 python 脚本提高了对低级编程的理解

最初发布于 Medium 上的 Level Up Coding。


Python 以其简洁易用而闻名,但对于许多开发者来说,在某个阶段,语言本身的学习曲线会趋于平缓。一旦掌握了常用库和技术,解决问题就变得程式化。然而,学习之旅永无止境,尤其是在深入研究并发和底层编程等高级主题时。

对于希望提升 Python 技能的开发者来说,一个宝贵的资源是 Talk Python To Me 播客,它涵盖了 Python 开发的诸多方面。其中一期课程,“使用异步/等待和线程的 Python 并行编程”,深入探讨了处理并发和优化代码执行的关键概念。

传统的计算机科学教育中,会涉及计算机体系结构、C 编程、互斥锁、信号量和指针等内容。然而,许多开发者从未将这些概念与实际编程场景联系起来。例如,对 CPU 内核的理解往往停留在抽象层面,与日常开发任务脱节。

立即学习Python免费学习笔记(深入)”;

本课程的一个重点是 Unsync 库的使用。它将异步、线程和多进程整合到统一的 API 中,简化了并发和并行编程。该库能根据任务是 CPU 密集型、I/O 密集型还是异步型来自动优化任务执行。通过消除线程启动、加入和关闭的复杂性,Unsync 库使得 Python 的并发编程更易于上手且更高效。

以下脚本演示了这些概念:

Shell脚本编写基础 中文WORD版
Shell脚本编写基础 中文WORD版

Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统

下载
# 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():
    t0 = 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]

    dt = datetime.datetime.now() - t0
    print(f"Synchronous version done in {dt.total_seconds():,.2f} seconds.")

@unsync(cpu_bound=True)
def compute_some():
    print("Computing...")
    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()

脚本解析

该脚本展示了不同类型的任务以及如何并发执行它们以提升性能和效率:

  1. compute_some 函数: 模拟密集型计算,通过计算大量数字来演示多线程处理如何利用多个 CPU 核心进行并行计算,从而缩短处理时间,提升效率。实际应用包括数值模拟、数据分析和计算密集型操作。
  2. download_some 函数: 演示异步获取数据(例如,从 API 或网站)。它在 asyncio 事件循环中运行,允许非阻塞 I/O 操作。这使其非常适合处理多个并发 I/O 任务,例如数据抓取或并发 API 请求。
  3. download_some_more 函数: 演示同步 HTTP 请求的使用。虽然是同步的,但它在单独的线程中运行,避免阻塞主线程。此方法适用于不需要非阻塞操作但仍需并发的简单或遗留系统。
  4. wait_some 函数: 模拟异步任务中的非阻塞暂停,允许其他任务在等待时继续运行。这在程序需要等待外部事件、计时器或用户输入而不阻塞其他操作的场景中非常有用。

关键点

通过并发编程,该脚本展示了如何同时执行多个任务,从而加快处理速度并更有效地利用资源。


在编程中,内存 (RAM) 和处理能力 (CPU) 是影响性能的关键因素。RAM 提供对活动数据的快速访问,支持多个任务的顺利执行;CPU 处理指令和计算的执行。在实际应用中,充足的内存确保能同时处理大型数据集或多个操作,强大的 CPU 则带来更快的计算和更灵敏的应用程序。

理解内存、CPU 和并发之间的关系,对开发者进行优化和任务执行至关重要。通过利用多核 CPU 和高效的内存管理,开发者可以创建响应更快、高性能的应用程序,轻松处理复杂的数据密集型任务。


图片来自 Alexander Kovalev

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

502

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

166

2025.12.24

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

10

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

14

2026.01.21

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

166

2025.12.24

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

10

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

14

2026.01.21

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

413

2023.11.09

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.3万人学习

Django 教程
Django 教程

共28课时 | 3.6万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号