在python中组合异步和同步请求?

在python中组合异步和同步请求?,python,http,asynchronous,request,Python,Http,Asynchronous,Request,我试图向服务器a发出请求,其中的响应将是一个请求列表,我将向服务器B发出请求 当前对服务器A的请求只是一个简单的同步请求,如下所示: import requests req = requests.get('https://server-a.com') data = req.json() list_of_requests = data['requests'] # requests for server B 由于list\u of_requests的长度可能只有几千项,因此我想使用async来

我试图向服务器a发出请求,其中的响应将是一个请求列表,我将向服务器B发出请求

当前对服务器A的请求只是一个简单的同步请求,如下所示:

import requests

req = requests.get('https://server-a.com')
data = req.json()

list_of_requests = data['requests'] # requests for server B
由于
list\u of_requests
的长度可能只有几千项,因此我想使用async来加速对B的请求

我已经看过几个使用aiohttp的异步HTTP请求示例,例如

然而,我看到的所有示例都是从已经定义的请求列表开始的。我的问题是,组合单个同步请求,然后使用该请求“生成”异步任务的正确python方式/模式是什么

非常感谢

import aiohttp
import asyncio
import os

from aiohttp import ClientSession


GOOGLE_BOOKS_URL = "https://www.googleapis.com/books/v1/volumes?q=isbn:"
LIST_ISBN = [
    '9780002005883',
    '9780002238304',
    '9780002261982',
    '9780006163831',
    '9780006178736',
    '9780006280897',
    '9780006280934',
    '9780006353287',
    '9780006380832',
    '9780006470229',
]


def extract_fields_from_response(response):
    """Extract fields from API's response"""
    item = response.get("items", [{}])[0]
    volume_info = item.get("volumeInfo", {})
    title = volume_info.get("title", None)
    subtitle = volume_info.get("subtitle", None)
    description = volume_info.get("description", None)
    published_date = volume_info.get("publishedDate", None)
    return (
        title,
        subtitle,
        description,
        published_date,
    )


async def get_book_details_async(isbn, session):
    """Get book details using Google Books API (asynchronously)"""
    url = GOOGLE_BOOKS_URL + isbn
    try:
        response = await session.request(method='GET', url=url)
        response.raise_for_status()
        print(f"Response status ({url}): {response.status}")
    except HTTPError as http_err:
        print(f"HTTP error occurred: {http_err}")
    except Exception as err:
        print(f"An error ocurred: {err}")
    response_json = await response.json()
    return response_json


async def run_program(isbn, session):
    """Wrapper for running program in an asynchronous manner"""
    try:
        response = await get_book_details_async(isbn, session)
        parsed_response = extract_fields_from_response(response)
        print(f"Response: {json.dumps(parsed_response, indent=2)}")
    except Exception as err:
        print(f"Exception occured: {err}")
        pass

async with ClientSession() as session:
    await asyncio.gather(*[run_program(isbn, session) for isbn in LIST_ISBN])