oko*_*oko 10 python python-3.x python-asyncio aiohttp
我正在运行以下代码,通过aiohttp发出5个请求:
import aiohttp
import asyncio
def fetch_page(url, idx):
try:
url = 'http://google.com'
response = yield from aiohttp.request('GET', url)
print(response.status)
except Exception as e:
print(e)
def main():
try:
url = 'http://google.com'
urls = [url] * 5
coros = []
for idx, url in enumerate(urls):
coros.append(asyncio.Task(fetch_page(url, idx)))
yield from asyncio.gather(*coros)
except Exception as e:
print(e)
if __name__ == '__main__':
try:
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
except Exception as e:
print(e)
Run Code Online (Sandbox Code Playgroud)
输出:
200
200
200
200
200
Exception ignored in: Exception ignored in: Exception ignored in: Exception ignored in: Exception ignored in:
Run Code Online (Sandbox Code Playgroud)
注意:没有关于异常的内容/位置的其他信息.
造成这种情况的原因是什么?有任何调试技巧吗?
dan*_*ano 11
我不确定为什么,但似乎让aiohttp.ClientResponse对象打开导致在解释器退出时抛出一个不可注意的异常.在我的系统上,这会产生类似这样的警告,而不是"消息中忽略异常":
sys:1: ResourceWarning: unclosed <socket object at 0x7f44fce557a8>
sys:1: ResourceWarning: unclosed <socket object at 0x7f44fce55718>
sys:1: ResourceWarning: unclosed <socket object at 0x7f44fcc24a78>
sys:1: ResourceWarning: unclosed <socket object at 0x7f44fcc248c8>
sys:1: ResourceWarning: unclosed <socket object at 0x7f44fcc24958>
sys:1: ResourceWarning: unclosed <socket object at 0x7f44fcc249e8>
sys:1: ResourceWarning: unclosed <socket object at 0x7f44fcc24b08>
Run Code Online (Sandbox Code Playgroud)
在任何情况下,您都可以通过调用显式关闭ClientResponse对象来修复它.fetch_objectsresponse.close()