asyncio异步编程与非异步编程代码交叉使用

在异步编程环境中遇到同步代码可能导致性能下降。本文通过示例展示了如何利用`asyncio`和`concurrent.futures`将同步函数转换为异步,以避免阻塞并提升程序效率。主要涉及`run_in_executor`方法,将同步任务放入线程池执行,再通过`await`等待结果,从而保持异步流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在日常开发中,很有可能在一个一直使用异步编程的工程代码中会不得已使用非异步编程的代码,那么这个时候怎么办呢,有什么办法转化吗?下面直接看代码

import asyncio
import concurrent.futures
import time


def func():
    time.sleep(3)
    print("test....")
    return "this is result"


async def main():
    # 获取已经执行的事件循环  get_running_loop是在3.7以后版本中出现的
    # loop = asyncio.get_running_loop()
    loop = asyncio._get_running_loop()
    # 将非异步功能转换(就是使用线程池(默认)或进程池转换为concurrent.futures.Future对象,然后再asyncio的方法转换为future对象)
    fut = loop.run_in_executor(None, func)
    print(type(fut))
    result = await fut
    print("default use threadpool:>>>>>>", result)

loop = asyncio.get_event_loop()
loop.run_until_complete(main())

在我们日常工作中,如果某个异步编程代码因为某个同步程序阻塞,会给程序性能带来不小的影响,所以使用异步asyncio可以将同步转换,以提升效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值