import asyncio
import httpx
request_time = 10
limits = httpx.Limits(max_connections=5)
client = httpx.AsyncClient(limits=limits)
async def request_baidu(i):
# async with httpx.AsyncClient(limits=limits) as client:
print(f"===> %d" % i)
r = await client.get("http://www.baidu.com")
# print(r.status_code)
print(f"<=== %d" % i) # 如何保证优先执行此处代码,而不发送新的请求?
async def main():
request_list = [asyncio.create_task(request_baidu(i)) for i in range(request_time)]
await asyncio.gather(*request_list)
if __name__ == '__main__':
asyncio.run(main())
"""
===> 0
===> 1
===> 2
===> 3
===> 4
===> 5
===> 6
===> 7
===> 8
===> 9
<=== 3
<=== 4
<=== 0 # 可以看到发送完所有的网络请求,才开始处理返回的结果
<=== 1
<=== 2
<=== 5
<=== 6
<=== 7
<=== 8
<=== 9
期望的结果:
===> 0
===> 1
<=== 0 # 在前面的请求放回结果的时候优先返回该处继续向下执行,而不是发送新的请求
===> 2
===> 3
<=== 1
<=== 2
===> 4
...
"""
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.