[ python同步变异步 ]


python中把不修改原来同步的代码,变成异步.

import asyncio
import time
from functools import wraps
from concurrent.futures import ThreadPoolExecutor
from typing import List, Callable, Any

# 创建数据库连接池
pool_executor = ThreadPoolExecutor(max_workers=10)

def to_async(func):
    @wraps(func)
    async def wrapper(*args, **kwargs):
        return await asyncio.get_event_loop().run_in_executor(
            pool_executor, func, *args
        )
    return wrapper

async def run_parallel_queries(queries: List[Callable]) -> List[Any]:
    """并行执行多个查询"""
    tasks = [query() for query in queries]
    return await asyncio.gather(*tasks)

# 使用示例
@to_async
def query_users():
    # 模拟数据库查询
    time.sleep(1)
    return ["user1", "user2"]

@to_async
def query_orders():
    # 模拟数据库查询
    time.sleep(1)
    return ["order1", "order2"]

async def main():
    # 并行执行多个查询
    start_time = time.time()
    users, orders = await run_parallel_queries([
        query_users,
        query_orders
    ])
    print(f"查询用户花费时间: {time.time() - start_time}")
    return users, orders

# 运行示例
if __name__ == "__main__":
    results = asyncio.run(main())