python并发编程之协程

发布时间 2023-07-07 18:31:37作者: 凡人半睁眼

一、协程的概念

1、协程是单线程下的并发,它是程序员级别的,我们来控制如何切换。

2、进程的开销 >>>>>> 线程的开销 >>>>>> 协程的开销

3、协程的使用需要借助于第三方模块 gevent 模块或者 asyncio 模块

4、geventasyncio 是两个在 Python 中常用的协程框架,它们都提供了在异步编程中使用协程的能力。

  gevent 是一个基于协程的并发库,它通过 monkey-patching 的方式将标准库中的阻塞式 I/O 操作变为非阻塞的,从而实现协程的调度和并发处理。gevent 提供了自己的协程对象 Greenlet,使用 gevent.spawn() 来创建和管理协程。gevent 还提供了事件循环机

制,允许在协程之间进行切换和调度。它适用于需要高性能网络编程的场景,如服务器开发。

asyncio 是 Python 官方引入的异步编程框架,从 Python 3.4 版本开始引入,并在 Python 3.5 版本引入了 asyncawait 关键字。asyncio 基于事件循环(event loop)的概念,使用协程来实现异步编程。它提供了异步 I/O 操作、定时器、任务调度等功能,并且有丰富

的标准库和第三方库支持。asyncio 适用于编写高效的异步代码,特别是在 Web 开发、网络爬虫等场景下。

下面是一些比较 geventasyncio 的特点:

  • 生态系统和库支持: asyncio 有着更广泛的生态系统和库支持,包括官方标准库和第三方库,可以方便地与其他异步框架集成。gevent 虽然也有一些扩展库,但相对较少。

  • 编程模型和语法: gevent 使用了更传统的基于线程和阻塞 I/O 的编程模型,通过 monkey-patching 来实现协程。而 asyncio 使用了更现代的基于事件循环和异步 I/O 的编程模型,通过 asyncawait 关键字来定义协程。

  • 性能和吞吐量: 由于 gevent 使用了更轻量级的协程对象和调度机制,并且对阻塞 I/O 进行了优化,因此在某些特定的场景下,它可能会比 asyncio 更高效和具有更高的吞吐量。

综上所述,选择使用 gevent 还是 asyncio 取决于具体的需求和场景。如果你需要高性能的网络编程和并发处理,可以选择使用 gevent。而如果你需要一个官方支持、成熟且广泛应用的异步编程框架,并且需要与其他库和框架无缝集成,那么选择 asyncio 是一个不错的选择。

二、gevent的使用

1、服务端

 

 

2、客户端