httpx:如何访问收集到的请求任务的特定响应?
httpx: How to access specific responses from gathered request tasks?
我想使用 HTTPX(在 FastAPI 中,如果这很重要)向外部发出异步 http 请求 API 并将响应存储为单独的变量,以便以略有不同的方式进行处理,具体取决于在其上获取 URL。我正在修改 Whosebug 答案中的代码。
import asyncio
import httpx
async def perform_request(client, url):
response = await client.get(url)
return response.text
async def gather_tasks(*urls):
async with httpx.AsyncClient() as client:
tasks = [perform_request(client, url) for url in urls]
result = await asyncio.gather(*tasks)
return result
async def f():
url1 = "https://api.com/object=562"
url2 = "https://api.com/object=383"
url3 = "https://api.com/object=167"
url4 = "https://api.com/object=884"
result = await gather_tasks(url1, url2, url3, url4)
# print(result[0])
# print(result[1])
# DO THINGS WITH url2, SOMETHING ELSE WITH url4, ETC.
if __name__ == '__main__':
asyncio.run(f())
访问个人回复的最佳方式是什么? (如果我使用 result[n],我将不知道我正在使用哪个响应。)
一般来说,我对 httpx 和异步操作还很陌生,所以如果您对如何以更好的方式实现它有任何建议,请分享。
不管AsyncIO,我可能会把逻辑放在里面gather_tasks
。在那里你知道响应,你可以定义所有你想要继续正确路径的if else
逻辑。
在我看来你有两个选择:
1 - 立即处理请求
在这种情况下 f
只会初始化 url 并触发处理,其他一切都将在 gather_tasks
内发生。
2 - “丰富”响应
在 gather_tasks
中,您可以了解下一步要执行哪种操作,并将某种代码“附加”到响应以定义它。例如,您可以 return 一个带有两个键的字典:response 和 operation。这将是执行此操作的最明确的方式,但您也可以使用列表或元组,您只需要知道响应和“下一步代码”在其中的位置。
如果必须稍后而不是立即进行进一步处理,这将非常有用。
有道理吗?
我想使用 HTTPX(在 FastAPI 中,如果这很重要)向外部发出异步 http 请求 API 并将响应存储为单独的变量,以便以略有不同的方式进行处理,具体取决于在其上获取 URL。我正在修改
import asyncio
import httpx
async def perform_request(client, url):
response = await client.get(url)
return response.text
async def gather_tasks(*urls):
async with httpx.AsyncClient() as client:
tasks = [perform_request(client, url) for url in urls]
result = await asyncio.gather(*tasks)
return result
async def f():
url1 = "https://api.com/object=562"
url2 = "https://api.com/object=383"
url3 = "https://api.com/object=167"
url4 = "https://api.com/object=884"
result = await gather_tasks(url1, url2, url3, url4)
# print(result[0])
# print(result[1])
# DO THINGS WITH url2, SOMETHING ELSE WITH url4, ETC.
if __name__ == '__main__':
asyncio.run(f())
访问个人回复的最佳方式是什么? (如果我使用 result[n],我将不知道我正在使用哪个响应。)
一般来说,我对 httpx 和异步操作还很陌生,所以如果您对如何以更好的方式实现它有任何建议,请分享。
不管AsyncIO,我可能会把逻辑放在里面gather_tasks
。在那里你知道响应,你可以定义所有你想要继续正确路径的if else
逻辑。
在我看来你有两个选择:
1 - 立即处理请求
在这种情况下 f
只会初始化 url 并触发处理,其他一切都将在 gather_tasks
内发生。
2 - “丰富”响应
在 gather_tasks
中,您可以了解下一步要执行哪种操作,并将某种代码“附加”到响应以定义它。例如,您可以 return 一个带有两个键的字典:response 和 operation。这将是执行此操作的最明确的方式,但您也可以使用列表或元组,您只需要知道响应和“下一步代码”在其中的位置。
如果必须稍后而不是立即进行进一步处理,这将非常有用。
有道理吗?