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())