【发布时间】:2019-05-27 11:34:55
【问题描述】:
您好我有以下问题,我想执行 getlastItemFromGivenInterval 方法,让它在不等待请求响应的情况下短暂通过,并为 asyncio.sleep(60) 提供上下文以在 60 秒内再次执行整个过程时间框架。我得到的是在 getLastItemFromGivenInterval() 中等待请求结束。
import aiohttp
import asyncio
loop = asyncio.get_event_loop()
task = loop.create_task(main())
loop.run_forever()
async def main():
async with aiohttp.ClientSession() as session:
while True:
await bc.getLastItemFromGivenInterval(session)
await asyncio.sleep(60)
async def getLastItemFromGivenInterval(session):
async with session.get(BinanceClient.base_endpoint + "/api/v1/time") as currentServerTime:
currentServerTime = await currentServerTime.json()
currentServerTime = currentServerTime['serverTime']
async with session.get(url) as res:
response = await res.json()
array = []
print(response)
return response
getLastItemFromGivenInterval 放在单独的类中。 请给我一个提示,如何在 getLastItem...() 方法中实现不等待效果。
【问题讨论】:
-
我不是 100% 清楚你的问题,但似乎你的问题是
getlastItemFromGivenInterval和sleep是同步的——如果你想同时运行它们,那么你可能希望等待asyncio.gather--await asyncio.gather(bc.getLastItemFromGivenInterval(session), asyncio.sleep(60))的结果,而不是单独等待每个项目。 -
@mgilson 我认为 OP 根本不想等待
getLastItemFromGivenInterval。gather()会将睡眠与协程执行并行化,但如果协程最终花费很长时间,它仍然可能需要任意长的时间才能完成,而这是 OP 正在努力避免的事情。 -
asyncio.gather()中的第一个协程完成后如何获取结果?
标签: python asynchronous python-asyncio aiohttp