一文看懂Python中异步、进程、线程、队列

liftword6个月前 (01-06)技术文章57

Python异步(资源调度者)

异步是一种计算机多任务的处理方法,与同步相反,异步在多任务处理上,不阻塞当前任务执行,允许后续操作,常用于I/O操作(文件读写、网络请求、上传下载),更像一个高效的资源调度者。

简单理解,产生多种任务时,简单的任务执行时间短,复杂的任务执行时间较长,异步就是去协调线程,简单的任务执行完成以后继续执行其他任务,不用等待复杂任务的完成。

Python异步编程的优势:

  1. 能够处理更多任务
  2. 提高用户体验
  3. 提高程序的性能

什么是进程(部门)

进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。进程是线程的容器,就像部门一样,具有独立性(分配资源和调度的独立单位)动态性(进程是一次执行过程,动态产生,动态消亡,表示当前的活动,并不执行具体的内容。

什么是线程(小组)

线程是操作系统能够进行运算调度的最小单位。线程是进程中实际运行线,一个进程可以并发多个进程,每条线程都允许执行不同的任务流。

什么是队列

队列是一种特殊的线性表,允许队列前端删除,末尾添加(先进先出)。队列是单独申请的连续的存储空间,设置头尾两个指针。

Python异步实现

Python异步的实现通过asynico库来实现异步,下面是简单的异步执行操作:

以上只是一个简单的异步操作函数,I/O阻塞用时间限制了,实际过程中是有其他操作。

假如我们现在要将一个拥有5个元素的列表里面的所有元素*2,每次*2需要耗时1s,同步操作我们需要多长时间呢?

我这边test()执行的时间是1.0011s左右,sync_test执行时间是5.0016s。如果采用异步的方式执行时间会是多长呢?

异步操作只用1.0114s,耗时明显减少。

如果是等待某个I/O操作完成,可以将await asynico.sleep(1)改为asynico.wait(func)。

Python进程实现

Python进程实现主要使用的是multiprocessing包。下面是代码的演示。

调用进程的时候可以看到4个子进程,这个就是我们设置的进程池。

但是你会发现,好像每次执行结果都是不同的,这是为什么呢?下篇文章详细解析。

Python线程实现

Python线程实现主要使用的是threading包。下面是代码的演示。

可以发现线程和进程一样,都是导入包,创建进程/线程对象,执行进程/线程,等待进程/线程的结束。

通过打印线程执行列表可以发现每个线程对象的stopped <数字> 都不一样,表示我们用不同的线程去执行了。

Python队列

Python队列实现主要使用的是queque包。下面是代码的演示。

队列遵循先进先出的规则,q.put()添加队列元素的顺序就是q.get()获取元素的顺序,如果获取完,队列就是空的了(empty)

相关文章

不知道学哪种编程语言?Python是首选!

如果编程语言是女生,绝对会让你眼花缭乱,思绪翩翩……有清纯可爱型的,有知性优雅型的,有成熟性感型的,还有如初恋一般甜蜜型的……,那么问题来了,如果你是一个什么都不懂的小白,应该选择哪种语(女)言(人)...

有了python,还需要IFTTT、Zapier这些低代码自动化应用吗?

Claude:在某些情况下,Python编程确实可以取代低代码自动化平台,甚至提供更强大的功能。但两者也有各自的优势,更好的方式是结合使用:Python的优势:1. 更强大的编程能力,可以实现更复杂的...

一文了解:Python对财会从业者的2大帮助!

2024年初级会计考试已经结束,不少同学翘首以盼准备踏入财会行业,但有一个问题是:光凭证书不一定能找到满意的工作。证书是大家踏入会计行业的敲门砖没错,但很多用人的单位除了证书,还会看重你是否具备相关上...

Python的基本概念和语法(超级详细)

Python是一种流行的编程语言,它有很多优点,比如简洁、易读、灵活和丰富的库。Python可以用来开发各种应用,比如网站、数据分析、机器学习、游戏等。在这篇教程中,我将介绍一些python的基本概念...

Python 3.13 获首个 Beta 版更新:改进解释器 / 编译器性能

Python 3.13 beta 1发布了,主要新特性包括禁用全局解释器锁(GIL)以进行自由线程处理的选项,以及一个实验性的即时编译器,两者都可以提高性能。Beta版本的出现也意味着3.13版本已经...