Python并发入门2025年3月3日 | 阅读 5 分钟 提高 Python 程序速度的一个显著方法是使用并发。通过同时完成多个操作,并发可以最大限度地利用系统的资源。Python 提供了多种实现并发的方法和模块,包括线程、多进程和异步编程。本文将解释什么是 Python 并发,如何实现它,提供一些出色的示例,并讨论输出。 理解并发编程它指的是计算机同时处理多个任务的能力。这些任务可以交错执行或在重叠的时间段内执行,但不需要精确地同时完成。处理多个用户输入、管理多个 I/O 操作或处理多个独立任务是并发的主要目标。 什么是并行性?并发是并行计算的一个子集,并行计算是指任务或进程的同时执行。并行计算的目的是通过同时执行任务来加速计算,而并发则是处理许多任务。提高计算效率和加快系统性能是主要目标。
并发 vs. 并行并发:它描述了在重叠的时间段内完成多个活动,但不一定同时进行。它适用于 I/O 密集型进程,并且经常依赖于文件或网络数据等外部资源。 并行:然而,它利用多个 CPU 核心来同时执行多个应用程序。它非常适合涉及大量CPU 功耗的长时处理任务。 在 Python 中实现并发的步骤
Python 并发示例基于线程的并发 导入 threading 和 time 模块。有两个例程 count_down 和 print_colors,它们模拟耗时的任务。这些函数以每秒一次的间隔打印倒计时数字和颜色,以模拟耗时的活动。创建两个 Thread 对象 thread_a 和 thread_b,并使用 target 参数将它们分别分配给 count_down 或 print_colors 函数。使用 start() 方法启动这两个线程。这会启动函数的并行执行。为确保主线程在继续之前等待 thread_a 和 thread_b 线程完成,请对每个线程使用 join() 函数。此同步阶段对于防止主程序过早完成是必要的。最后打印一条消息,表明所有线程都已完成。 输出 Counting down: 1 Printing color: Red Counting down: 2Printing color: Blue Printing color: Green Counting down: 3 All threads have completed. 说明 为了同时执行 count_down 和 print_colors,代码创建了两个线程。每个函数都模拟了一个任务,其中每次操作之间有 1 秒的暂停。主线程使用 Join() 等待两个线程完成,然后报告“所有线程都已完成”。 基于进程的并发 该程序演示了使用 cube(n) 函数对数字进行立方计算的能力。如果运行主进程,则会定义一个值列表 [6, 7, 8, 9, 10]。使用 multiprocessing.Pool() 创建一个多处理器池。使用 map() 方法并行地将 cube 函数应用于列表中的每个值,将任务分配给不同的进程。最后,打印输出。 输出 [216, 343, 512, 729, 1000] 说明 该代码利用 multiprocessing 模块,通过使用工作进程池来并行计算列表中数字的立方。map 方法用于在创建工作进程池的同时,将 cube 函数与列表中的所有值并行应用。收集和打印结果显示了并行处理如何加速计算。 基于协程的并发(使用 asyncio) 以下是代码的细分:导入 asyncio 模块以进行异步编程。使用 asyncio await。使用 await asyncio.sleep(1) 定义的异步函数 say_hello(word) 模拟带有一秒延迟的问候。描述 run_tasks() 异步函数。使用 asyncio.gather() 同时调度每个名称的 say_hello 函数。当 __name__ == "__main__" 时,通过使用 asyncio.run(run_tasks()) 使用 asyncio 运行主异步函数。 输出 Java T Point 说明 运行此代码后,您会注意到 say_hello 函数会在等待一秒后打印每个单词。由于 asyncio.gather() 同时调度了对 say_hello 的所有调用,因此在延迟一秒后,“Java”、“T”和“Point”的问候语几乎同时打印,这证明了 Python 的非阻塞异步编程。 总之,无论您的 Python 程序是 CPU 密集型还是 I/O 密集型,添加并行性都可以显著提高其速度。正确的策略和 asyncio、threading 和 multiprocessing 等库可以使 Python 程序更具响应性和效率。 下一主题Python 项目模板 |
?UNIX 时间戳是一种记录时间的方式,作为自纪元(1970 年 1 月 1 日)以来的秒数的运行标准。在 Python 中,将 datetime 项转换为 UNIX 时间戳可以轻松完成,这要归功于集成库。UNIX 时间戳……
阅读 3 分钟
简介:在本教程中,我们将学习关于……的知识。此软件将对那些不想被任务和重要任务负担的人有所帮助。作为一名编码员,我们知道正在发生哪些竞赛、我们注册了哪些课程、哪些 YouTube……
阅读 15 分钟
Python 中的 re.findall() 方法返回字符串中某个模式的所有出现。您可以将其视为扫描句子以查找具有定义的“格式”的单词。re.findall() 借助正则表达式 (regex) 查找所有匹配项,用于定义……
阅读 4 分钟
在 Python 中,集合是用于存储集合的四种内置数据类型之一,另外还有列表、元组和字典。它是一个无序的唯一项集合。集合被认为是可变的,这允许我们在集合创建后添加或删除元素……
7 分钟阅读
? 理解直方图:直方图是数学数据分布的图形表示。它们提供了数据值在明确范围(通常称为“bins”)内的频率或密度的可视化摘要。直方图广泛用于数据分析和可视化,以探索基本...
阅读9分钟
? Cx_Oracle 是一个强大的包,允许 Python 程序连接到 Oracle 数据库。无论您是开发应用程序还是执行数据库活动,在 Windows 计算机上安装 cx_Oracle 都至关重要。安装过程包括几个基本步骤,包括设置 Python、安装……
阅读 3 分钟
引言:可视化高维数据集可能极具挑战性。绘制二维或三维数据可以揭示数据的底层结构,而相应的高维图可能更难理解。为了促进数据集结构的可视化,需要以某种方式降低维度。最直接的方法是...
阅读 6 分钟
网站监控已成为数字领域的一项基本实践,使个人和组织能够密切关注不断发展的网络世界。这种主动方法涉及数字景观并跟踪网站内的更改、更新或偏差,确保它们保持功能性、安全性且...
阅读9分钟
词性标注是自然语言处理 (NLP) 中的一项基本任务。它涉及为句子中的每个词分配标签或标记,指示其词性 (POS) 或其他句法属性。本文探讨了如何使用各种...
阅读 4 分钟
简介:Quine 是一种生成其代码副本但不接受任何输入的应用程序。在 C 语言中,我们已经讨论过 Quinine。在 Python 中编写最短的 Quine 只需要一行代码!Quine 是一个自我复制的程序,它...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India