Python实现高并发协程处理

2023-10-16 14:09:03 浏览数 (2)

什么是协程?

进程:程序在启动后,会在操作系统中作为一个进程存在。不同的进程之间互不影响,各自运行任务。

线程:每个进程为了保证多任务运行,会拆分为多个线程,线程共享进程的运行空间;但线程之间要进行切换时,开销比较高,需要保存线程的运行信息以便下次恢复,此时不可避免会影响效率。

协程:协程是线程的进一步划分,一个线程中运行多个协程;在线程不进行切换的前提下,使用协程就可以完成并发运算的操作。相对于线程切换实现的并发,协程更加轻量,且效率更高。

Python协程

python中,协程依靠async 和 await 两个关键字实现。

async 关键词放置在普通函数前,将函数设置为异步执行,交给 asyncio 去调度。

asyncio 在异步调度时,如果发现wait关键词,异步函数就不需要阻塞在这里,可以调度到其它Task中执行。

例如,在python中实现url并发下载:

代码语言:javascript复制
async def download_url(url, session=None) :
    fail = True
    file_name = basename(uri)
    assert session
    try:
        async with session.get(uri) as response:
            if response.status == 404:
                print('404 - Not found'))
                return fail, url
            if not response.status == 200:
				print('Failed')
                return fail, url
            data = await response.read()

此时,可以同时启动 get(url),在 await 的时候,切换 task。

协程使用起来会更加高效,除了Python,在其它编程语言中也有体现,可以提高程序性能。

0 人点赞