带有tqdm的asyncio aiohttp进度条
asyncio aiohttp progress bar with tqdm
我正在尝试集成一个 tqdm
进度条来监控 POST 使用 Python 3.5 中的 aiohttp
生成的请求。我有一个工作进度条,但似乎无法使用 as_completed()
收集结果。多谢指点。
我发现的示例建议使用以下模式,它与 Python 3.5 async def
定义不兼容:
for f in tqdm.tqdm(asyncio.as_completed(tasks), total=len(coros)):
yield from f
没有进度条的工作(尽管已编辑)异步代码:
def async_classify(records):
async def fetch(session, name, sequence):
url = 'https://app.example.com/api/v0/search'
payload = {'sequence': str(sequence)}
async with session.post(url, data=payload) as response:
return name, await response.json()
async def loop():
auth = aiohttp.BasicAuth(api_key)
conn = aiohttp.TCPConnector(limit=100)
with aiohttp.ClientSession(auth=auth, connector=conn) as session:
tasks = [fetch(session, record.id, record.seq) for record in records]
responses = await asyncio.gather(*tasks)
return OrderedDict(responses)
这是我修改loop()
失败的尝试:
async def loop():
auth = aiohttp.BasicAuth(api_key)
conn = aiohttp.TCPConnector(limit=100)
with aiohttp.ClientSession(auth=auth, connector=conn) as session:
tasks = [fetch(session, record.id, record.seq) for record in records]
for f in tqdm.tqdm(asyncio.as_completed(tasks), total=len(tasks)):
await f
responses = await asyncio.gather(f)
print(responses)
await f
returns 一个 单个 响应。为什么要将已经完成的 Future
传递给 asyncio.gather(f)
尚不清楚。
尝试:
responses = []
for f in tqdm.tqdm(asyncio.as_completed(tasks), total=len(tasks)):
responses.append(await f)
Python 3.6 实现 PEP 530 -- Asynchronous Comprehensions:
responses = [await f
for f in tqdm.tqdm(asyncio.as_completed(tasks), total=len(tasks))]
现在可以在 async def
函数中使用。
我正在尝试集成一个 tqdm
进度条来监控 POST 使用 Python 3.5 中的 aiohttp
生成的请求。我有一个工作进度条,但似乎无法使用 as_completed()
收集结果。多谢指点。
我发现的示例建议使用以下模式,它与 Python 3.5 async def
定义不兼容:
for f in tqdm.tqdm(asyncio.as_completed(tasks), total=len(coros)):
yield from f
没有进度条的工作(尽管已编辑)异步代码:
def async_classify(records):
async def fetch(session, name, sequence):
url = 'https://app.example.com/api/v0/search'
payload = {'sequence': str(sequence)}
async with session.post(url, data=payload) as response:
return name, await response.json()
async def loop():
auth = aiohttp.BasicAuth(api_key)
conn = aiohttp.TCPConnector(limit=100)
with aiohttp.ClientSession(auth=auth, connector=conn) as session:
tasks = [fetch(session, record.id, record.seq) for record in records]
responses = await asyncio.gather(*tasks)
return OrderedDict(responses)
这是我修改loop()
失败的尝试:
async def loop():
auth = aiohttp.BasicAuth(api_key)
conn = aiohttp.TCPConnector(limit=100)
with aiohttp.ClientSession(auth=auth, connector=conn) as session:
tasks = [fetch(session, record.id, record.seq) for record in records]
for f in tqdm.tqdm(asyncio.as_completed(tasks), total=len(tasks)):
await f
responses = await asyncio.gather(f)
print(responses)
await f
returns 一个 单个 响应。为什么要将已经完成的 Future
传递给 asyncio.gather(f)
尚不清楚。
尝试:
responses = []
for f in tqdm.tqdm(asyncio.as_completed(tasks), total=len(tasks)):
responses.append(await f)
Python 3.6 实现 PEP 530 -- Asynchronous Comprehensions:
responses = [await f
for f in tqdm.tqdm(asyncio.as_completed(tasks), total=len(tasks))]
现在可以在 async def
函数中使用。