Python asyncio编程之异步与非异步模块混合异步实现

今天继续给大家介绍Python相关知识,本文主要内容是Python asyncio编程之异步与非异步模块混合异步实现。

一、异步与非异步模块混合异步编程实现方法

我们在使用asyncio模块进行异步编程时,有时会遇到架构中部分模块不支持协程异步。为了与这样的模块进行对接,那么我们就需要使用线程池的方式来实现异步。这样一来,相比于使用协程的方式,需要耗费更多的资源。

二、异步与非异步模块混合异步编程实现实战

异步与非异步模块混合异步编程代码如下所示:

import requets
import asyncio

async def download_image(url):
    print("Downloading......")
    loop=asyncio.get_event_loop()
    future=loop.run_in_executor(None,requets.get,url)
    response=await future
    print("OK!")
    filename=
    with open(filename,"wb") as file_object:
        file_object.write(response.content)

url_list=[]
tasks=[download_image(url) for url in url_list]
loop=asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))

上述代码中使用的函数作用如下:
1、get_event_loop()
该函数如果在协程中被调用,则会返回当前的事件循环,如果当前没有事件循环,则会创建一个事件循环。
2、run_in_executor()
该函数可以在当前的事件循环中添加新的操作。
3、run_until_complete()
该函数可以执行事件循环队列。
上述代码执行结果如下所示:
Python asyncio编程之异步与非异步模块混合异步实现_第1张图片
从上图中可以看出,在使用线程池方式后,成功实现了request模块(不支持协程的模块)的异步操作。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200

你可能感兴趣的:(Python,协程,异步,并发,Python,asyncio)