并发取一批的总大小
(每道题开头都有同一段:fetch(url) 是个协程,本机「请求」、不连网,交回 url 的长度当「响应大小」;total_size(urls) 用 gather 并发取、求和;sizes(urls) 交回每个大小的列表(按提交顺序)。)
并发「请求」 "ab"、"cde"、"f",打印响应大小之和:
import asyncio
async def fetch(url):
"""本机"请求":不真连网,交回 url 的长度当作"响应大小"。await 让出控制。"""
await asyncio.sleep(0)
return len(url)
async def _gather_fetch(urls):
return await asyncio.gather(*[fetch(u) for u in urls])
def total_size(urls):
"""并发"请求"一批 url,交回响应大小之和(确定)。"""
return sum(asyncio.run(_gather_fetch(urls)))
def sizes(urls):
"""并发"请求"一批 url,交回每个响应大小的列表(按提交顺序,确定)。"""
return asyncio.run(_gather_fetch(urls))
print(total_size(["ab", "cde", "f"]))
全部评论