我正在尝试使用Asyncio和aiohttp库进行大量请求(约1000个),但我遇到了一个问题,找不到太多关于它的资料。
当我使用10个网址运行此代码时,它可以正常运行。但是当我使用100个以上的网址运行它时,它会出现错误并显示 RuntimeError: Event loop is closed
。
import asyncio
import aiohttp
@asyncio.coroutine
def get_status(url):
code = '000'
try:
res = yield from asyncio.wait_for(aiohttp.request('GET', url), 4)
code = res.status
res.close()
except Exception as e:
print(e)
print(code)
if __name__ == "__main__":
urls = ['https://google.com/'] * 100
coros = [asyncio.Task(get_status(url)) for url in urls]
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(coros))
loop.close()
堆栈跟踪可以在这里找到。
非常感谢任何帮助或见解,因为我已经为此烦恼了几个小时。显然,这表明应该仍然开启的事件循环已关闭,但我不知道这是如何可能的。
Asyncio
错误。Python 递归错误,已达到限制。需要为所有非类函数使用线程... - dsgdfgloop.close()
之前插入loop.run_until_complete(asyncio.sleep(0))
。 - Andrew Svetlovrun_in_executor
... - Vincentrun_in_executor
执行的--但应在完成get_status
任务之前完成。 - Andrew Svetlovawait sio.wait()
。 - LeoDog896