「这是我参与2022首次更文挑战的第22天,活动详情查看:2022首次更文挑战」。
正式的Python专栏第71篇,同学站住,别错过这个从0开始的文章!
前面学委分享了很多Python基础,也包括了线程,多线程的处理,再到队列,处理的问题越来越复杂。
编程除了处理重复反复的事情,也处理同时执行的重复或者不重复的任务。
本篇我们看看concurrent库,字面意思,就是并发。
什么是并发
同时/并行发生的意思,也就是并行运行的程序,这是一个过程。
处理多个线程/进程的协调其实不是一件简单的事情。
比如我们需要进行线程/进程间的数据交换,大量运行任务的调度(起停,分配次序)等等的。
前面学委写了很多篇幅讲解多线程的协调,还用了各种的锁,队列,其他状态携带中间媒介,来让多个线程同时运作,达到实际应用的一些场景。 说实话,多线程对于刚刚接触编程的朋友,确实不够友好。
但在实际生活中,处理这类事情的需求还挺多了,久而久之,就有了并发的代码合集,经过前人总结,凝练,也就有了并发库。
从下面两个记录中,我们可以看到concurrent这个模块在09年被Brian Quinlan提出来了。
Python改进提案: www.python.org/dev/peps/pe…
这是一次Py会议:pyvideo.org/pycon-au-20…
concurrent 库里面有什么
各种并发套件,包括(并不限于):
-
Executor/ ProcessPoolExecutor/ ThreadPoolExecutor
-
Future
-
其他下划线开头的类(库内的私有类)
concurrent库主要是基于threading 和multiprocessing这两个模块之上构建的。
所有学会这个库,我们还需要熟悉前面这两个库。
Future类,是一种未来的结果
Future类代表一个异步处理的任务,在未来某个时间返回的结果(可以有数据,也可以没有)。
取决于异步任务的执行内容。
Executor,异步任务执行器
Executor 是ThreadPoolExecutor(线程池执行器) 和 ProcessPoolExecutor(进程池执行器)的父类,它是一个抽象类。
我们在开发中主要是使用了:
-
在多线程环境下,使用ThreadPoolExecutor类来管理多个线程
-
在多进程环境下,使用ThreadPoolExecutor类来管理多个进程
下篇我们将会看到更多的展示。
喜欢Python的朋友,请关注学委的 Python基础专栏 or Python入门到精通大专栏
持续学习持续开发,我是雷学委!
编程很有趣,关键是把技术搞透彻讲明白。
欢迎关注微信,点赞支持收藏!