本文主要是介绍Python 中的异步与同步深度解析(实践记录),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际...
Python中的异步与同步:深度解析与实践
在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键。这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际代码示例来加深理解。
异步与同步的定义
异步
异步意味着多任务处理,任务之间的执行没有严格的先后顺序,甚至可以同时运行。这就好比你一边听音乐,一边浏览网页,听音乐和浏览网页这两个任务之间互不干扰,多条任务的执行路径同时存在,程序有多个“主线”并行处理任务。
同步
同步同样是处理多任务,但任务之间有严格的先后顺序。只有前一个任务执行完成,下一个任务才能开始。这类似于你排队买东西,必须一个人买完,下一个人才能接着买,整个过程只有一条“主线”。
阻塞与非阻塞的概念
阻塞
从调用者的角度来看,如果在调用某个操作时,程序被卡住,无法继续向下执行,必须等待该操作完成,这种情况就是阻塞。比如你打电话叫外卖,在等待外卖送达的这段时间里,你什么其他事都做不了,只能干等着,这就是“阻塞”状态。
非阻塞
当调用某个操作时,程序不会被卡住,能够继续向下执行,无需等待该操作完成,这就是非阻塞。还是以叫外卖为例,你下单后可以继续做自己的事情,不用一直等着外卖,这就是“非阻塞”状态。
同步阻塞与异步非阻塞示例
下面通过Python代码来具体展示异步和同步的工作方式。这里我们使用multiprocessing
模块中的Pool
来创建进程池,实现多任务处理。
from multiprocessing import Poolwww.chinasem.cn impoandroidrt time import os def water(): China编程 """烧水""" print(f"子进程 pid={os.getpid()}") for i in range(5): print("正在烧水中") time.sleep(0.5) return "水烧开了" def handle_water(message): """接收烧开水的信息""" print(f"进程pid={os.getpid()} 收到了异步任务的结束信息: {message}") pool = Pool(3) print(f"主进程 pid={os.getpid()}") for i in range(3): print("打游戏") time.sleep(0.5) # 回调 pool.apply_async(water, callback=handle_water) # 异步添加任务 for i in range(20): print("打游戏") time.sleep(0.5) pool.close() pool.join()
在这段代码中:
- 首先创建了一个进程池
Pool
,最大进程数为3。 - 主进程先执行一段“打游戏”的操作,循环3次,每次间隔0.5秒。
- 然后使用
pool.apply_async
方法异步地添加water
任务到进程池,并设置了回调函数handle_water
。water
任务模拟烧水过程,会打印当前子进程IandroidD并每隔0.5秒输出“正在烧水中”,完成后返回“水烧开了”。handle_water
函数用于接收water
任务完成后的信息并打印。 - 接着主进程继续执行“打游戏”操作,循环20次,每次间隔0.5秒。这期间,
water
任务在后台异步执行。 - 最后,调用
pool.close()
关闭进程池,不再接受新任务,pool.join()
让主进程等待所有子进程完成任务后再结束。
通过这个示例,可以清晰地看到异步任务在后台执行,不会QtYpQYAk阻塞主进程的其他操作,体现了异步非阻塞的特性。如果将pool.apply_async
换成pool.apply
,那么就是同步阻塞的效果,water
任务执行时会阻塞主进程,直到任务完成才会继续执行后续代码。
理解异步、同步、阻塞和非阻塞的概念,能帮助开发者根据实际需求优化程序性能,合理利用系统资源,让程序运行得更加高效和灵活。无论是处理I/O密集型任务,还是CPU密集型任务,选择合适的执行方式都是关键。
到此这篇关于Python 中的异步与同步:解析与实践的文章就介绍到这了,更多相关Python 异步与同步内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!
这篇关于Python 中的异步与同步深度解析(实践记录)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!