新闻详情

新闻详情

首页 / 资讯中心 / 详情

Python 中的同步\异步

发布时间:2026/9/3 14:58:23来源:尧图网络
Python 中的同步\异步
一、相关概念概念解释区别并发多个任务交替执行看起来像同时逻辑上的同时并行多个任务真正同时执行物理上的同时同步任务按顺序执行一个等一个阻塞等待异步任务不等待做完再通知非阻塞二、并发 vs 并行示例import threading import time # 并发单核CPU快速切换 def concurrency_demo(): def task(name): for i in range(3): print(f{name}: {i}) time.sleep(0.1) t1 threading.Thread(targettask, args(A,)) t2 threading.Thread(targettask, args(B,)) t1.start() t2.start() t1.join() t2.join() # 输出交替出现A0, B0, A1, B1, A2, B2 # 并行多核CPU真正同时执行 # Python 由于 GIL多线程无法真正并行需要用多进程 from multiprocessing import Pool def parallel_demo(): def square(x): return x * x with Pool(4) as p: # 4个进程并行 result p.map(square, range(10)) print(result)区别维度并发并行核心数单核或多核必须多核执行方式交替执行同时执行Python 支持线程、协程多进程GIL 影响线程受 GIL 限制进程不受 GIL 限制三、同步 vs 异步示例import asyncio import time # 同步 def sync_task(): print(开始下载) time.sleep(2) # 模拟耗时 I/O阻塞等待 print(下载完成) return data def sync_demo(): print(同步开始) result sync_task() # 等待 2 秒 print(继续执行) print(f结果: {result}) # 异步 async def async_task(): print(开始下载) await asyncio.sleep(2) # 非阻塞让出控制权 print(下载完成) return data async def async_demo(): print(异步开始) task asyncio.create_task(async_task()) print(继续执行不等待下载完成) result await task # 等结果就绪再获取 print(f结果: {result}) # 运行异步 # asyncio.run(async_demo())同步输出同步开始 开始下载 [等待 2 秒] 下载完成 继续执行 结果: data异步输出异步开始 开始下载 继续执行不等待下载完成 [等待 2 秒后] 下载完成 结果: data区别维度同步异步等待方式阻塞等待非阻塞等待资源利用等待时浪费 CPU等待时可以做其他事编程复杂度简单相对复杂适用场景简单脚本、CPU 密集型I/O 密集型、高并发四、实现方式场景推荐方案说明并发I/O密集型asyncio、threading协程最优线程次之并行CPU密集型multiprocessing绕过 GIL同步普通函数调用最简单异步async/await需要事件循环示例import asyncio import time from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor # 模拟 I/O 操作 async def io_task(name): print(f{name}: 开始 I/O) await asyncio.sleep(1) # 模拟网络请求 print(f{name}: I/O 完成) return f{name} 结果 # 模拟 CPU 密集型任务 def cpu_task(n): return sum(i * i for i in range(n)) # 异步并发协程 async def async_concurrent(): tasks [io_task(f任务{i}) for i in range(5)] results await asyncio.gather(*tasks) print(f异步并发结果: {results}) # 多进程并行 def parallel(): with ProcessPoolExecutor() as executor: results list(executor.map(cpu_task, [10**7] * 4)) print(f并行计算耗时: {time.time() - t:.2f}s)
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

从音频到谱面:游戏音乐扒谱完整实战指南 2026/9/3 16:31:50

从音频到谱面:游戏音乐扒谱完整实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
智能体开发:从Function Calling到结构化回执的工程闭环 2026/9/3 16:31:50

智能体开发:从Function Calling到结构化回执的工程闭环

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
MUSIC/ESPRIT/ROOT-MUSIC算法MATLAB实现与MIMO信号处理仿真 2026/9/3 16:31:50

MUSIC/ESPRIT/ROOT-MUSIC算法MATLAB实现与MIMO信号处理仿真

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
C#事件零基础详解(一):大白话彻底搞懂事件到底是什么 2026/9/3 16:31:50

C#事件零基础详解(一):大白话彻底搞懂事件到底是什么

哈喽,各位小伙伴!最近很多刚学C#的朋友问我:委托和事件到底有啥区别?事件总感觉虚无缥缈,不知道什么时候用、到底是什么原理?很多教程一上来就抛语法、讲源码、背概念,越看越懵。所以我打算出一…

阅读更多 →
python学习笔记12 -- 正则表达式 2026/9/3 16:31:50

python学习笔记12 -- 正则表达式

14 正则表达式 1 什么是正则表达式 正则表达式(regular expression,常简写为regex、regexp或re),是一种用于匹配和操作文本的强大工具,它是由一系列字符和特殊字符组成的模式,用于描述要匹配的文本模式。…

阅读更多 →
自己动手写一个tomcat之8多应用 2026/9/3 16:28:49

自己动手写一个tomcat之8多应用

写在前面 本文看下我们的tomcat如何支持多应用的场景。 1:正文 当多应用时,就不能简单用context容器调用wrapper容器了,因为此时会有多个context容器,需要根据url的上下文信息来确定使用哪个context容器。这相当于是多了一个新…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞