Python并发编程:从回调到协程的全面解析
1. 并发编程概述
在理想情况下,当我们等待已提交的任务完成时,希望能够启动其他新任务。例如,在执行 fetch_square(2) 请求后,可立即开始准备 fetch_square(3) 等操作。这样做能减少CPU等待时间,并在结果可用时立即开始处理。这种策略可行的前提是各个请求相互独立,无需等待前一个任务完成即可启动下一个任务。而且,单个CPU也能轻松处理这种情况。虽然将工作分配到多个CPU上可进一步加快执行速度,但如果等待时间远大于处理时间,提速效果将微乎其微。
要实现并发,需要采用不同的思维和编码方式。接下来,我们将介绍实现健壮并发应用程序的技术和最佳实践。
2. 回调函数(Callbacks)
在之前的代码中,程序执行会被阻塞,直到资源可用,其中 time.sleep 就是导致等待的调用。为了让代码能开始处理其他任务,我们需要避免阻塞程序流程,使程序的其余部分能继续执行其他任务。
实现这一目标的简单方法之一是使用回调函数。这类似于我们叫出租车的场景:在餐厅用餐后,外面下雨不想坐公交,于是叫了出租车并让其到达时打电话通知,这样就不用在雨中等待。这里,我们请求了出租车(即慢速资源),但没有在外面一直等到车来,而是提供了电话号码和指示(回调),以便车到后再出去回家。
下面通过代码展示这种机制,比较 time.sleep 的阻塞代码和 threading.Timer 的非阻塞代码:
Python协程与并发编程详解
超级会员免费看
订阅专栏 解锁全文
1456

被折叠的 条评论
为什么被折叠?



