You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Win11下Python3.10.5运行asyncio+aiohttp代码报WinError995求助

本地Win11下asyncio+aiohttp请求出现WinError 995错误的解决办法

我用asyncio和aiohttp写的异步请求代码,在云服务器上正常运行,但在本地Win11(Python3.10.5)上跑时出现OSError: [WinError 995]错误。已经重装过Python和依赖库,没找到解决办法,求帮忙。

代码示例

import asyncio
import aiohttp
import time


async def get_tasks(session):
    tasks = []
    for page in range(1, 10):
        url = "https://www.google.com/search?q=" + str(page)
        header = {'User-Agent': 'Mozilla/5.0'}
        task = asyncio.create_task(session.get(url, headers=header))
        tasks.append(task)
    results = await asyncio.gather(*tasks)
    return results


async def main():
    async with aiohttp.ClientSession() as session:
        responses = await get_tasks(session)
        for response in responses:
            await response.text()

if __name__ == "__main__":
    start_time = time.time()
    asyncio.run(main())
    print("--- %s seconds ---" % (time.time() - start_time))

报错信息

Traceback (most recent call last):
  File "c:\Users\Mohamed Anan\GitHub\Web-Scraping\anan\async.py", line 25, in <module>
    asyncio.run(main())
  File "C:\Users\Mohamed Anan\AppData\Local\Programs\Python\Python310\lib\asyncio\runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "C:\Users\Mohamed Anan\AppData\Local\Programs\Python\Python310\lib\asyncio\base_events.py", line 646, in run_until_complete
    return future.result()
  File "c:\Users\Mohamed Anan\GitHub\Web-Scraping\anan\async.py", line 19, in main
    responses = await get_tasks(session)
  File "c:\Users\Mohamed Anan\GitHub\Web-Scraping\anan\async.py", line 13, in get_tasks
    results = await asyncio.gather(*tasks)
  File "C:\Users\Mohamed Anan\AppData\Local\Programs\Python\Python310\lib\site-packages\aiohttp\client.py", line 1122, in send
    return self._coro.send(arg)
  File "C:\Users\Mohamed Anan\AppData\Local\Programs\Python\Python310\lib\site-packages\aiohttp\client.py", line 535, in _request
    conn = await self._connector.connect(
  File "C:\Users\Mohamed Anan\AppData\Local\Programs\Python\Python310\lib\site-packages\aiohttp\connector.py", line 542, in connect
    proto = await self._create_connection(req, traces, timeout)
  File "C:\Users\Mohamed Anan\AppData\Local\Programs\Python\Python310\lib\site-packages\aiohttp\connector.py", line 907, in _create_connection
    _, proto = await self._create_direct_connection(req, traces, timeout)
  File "C:\Users\Mohamed Anan\AppData\Local\Programs\Python\Python310\lib\site-packages\aiohttp\connector.py", line 1175, in _create_direct_connection
    transp, proto = await self._wrap_create_connection(
  File "C:\Users\Mohamed Anan\AppData\Local\Programs\Python\Python310\lib\site-packages\aiohttp\connector.py", line 986, in _wrap_create_connection
    return await self._loop.create_connection(*args, **kwargs)  # type: ignore[return-value]  # noqa
  File "C:\Users\Mohamed Anan\AppData\Local\Programs\Python\Python310\lib\asyncio\base_events.py", line 1049, in create_connection
    sock = await self._connect_sock(
  File "C:\Users\Mohamed Anan\AppData\Local\Programs\Python\Python310\lib\asyncio\base_events.py", line 960, in _connect_sock
    await self.sock_connect(sock, address)
  File "C:\Users\Mohamed Anan\AppData\Local\Programs\Python\Python310\lib\asyncio\proactor_events.py", line 709, in sock_connect
    return await self._proactor.connect(sock, address)
RuntimeError: await wasn't used with future
_OverlappedFuture exception was never retrieved
future: <_OverlappedFuture finished exception=OSError(22, 'The I/O operation has been aborted because of either a thread exit or an application request', None, 995, None)>
Traceback (most recent call last):
  File "C:\Users\Mohamed Anan\AppData\Local\Programs\Python\Python310\lib\asyncio\windows_events.py", line 817, in _poll
    value = callback(transferred, key, ov)
  File "C:\Users\Mohamed Anan\AppData\Local\Programs\Python\Python310\lib\asyncio\windows_events.py", line 604, in finish_connect
    ov.getresult()
OSError: [WinError 995] The I/O operation has been aborted because of either a thread exit or an application request
_OverlappedFuture exception was never retrieved
future: <_OverlappedFuture finished exception=OSError(22, 'The I/O operation has been aborted because of either a thread exit or an application request', None, 995, None)>
Traceback (most recent call last):
  File "C:\Users\Mohamed Anan\AppData\Local\Programs\Python\Python310\lib\asyncio\windows_events.py", line 817, in _poll
    value = callback(transferred, key, ov)
  File "C:\Users\Mohamed Anan\AppData\Local\Programs\Python\Python310\lib\asyncio\windows_events.py", line 604, in finish_connect
    ov.getresult()
OSError: [WinError 995] The I/O operation has been aborted because of either a thread exit or an application request
_OverlappedFuture exception was never retrieved
future: <_OverlappedFuture finished exception=OSError(22, 'The I/O operation has been aborted because of either a thread exit or an application request', None, 995, None)>
Traceback (most recent call last):
  File "C:\Users\Mohamed Anan\AppData\Local\Programs\Python\Python310\lib\asyncio\windows_events.py", line 817, in _poll
    value = callback(transferred, key, ov)
  File "C:\Users\Mohamed Anan\AppData\Local\Programs\Python\Python310\lib\asyncio\windows_events.py", line 604, in finish_connect
    ov.getresult()
OSError: [WinError 995] The I/O operation has been aborted because of either a thread exit or an application request
_OverlappedFuture exception was never retrieved
future: <_OverlappedFuture finished exception=OSError(22, 'The I/O operation has been aborted because of either a thread exit or an application request', None, 995, None)>
Traceback (most recent call last):
  File "C:\Users\Mohamed Anan\AppData\Local\Programs\Python\Python310\lib\asyncio\windows_events.py", line 817, in _poll
    value = callback(transferred, key, ov)
  File "C:\Users\Mohamed Anan\AppData\Local\Programs\Python\Python310\lib\asyncio\windows_events.py", line 604, in finish_connect
    ov.getresult()
OSError: [WinError 995] The I/O operation has been aborted because of either a thread exit or an application request

解决办法

1. 切换asyncio事件循环策略

Windows默认的ProactorEventLoop在处理并发连接时容易触发I/O错误,切换回SelectorEventLoop即可解决。在代码开头添加:

asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())

修改后的完整代码:

import asyncio
import aiohttp
import time

# 切换事件循环策略
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())

async def get_tasks(session):
    tasks = []
    for page in range(1, 10):
        url = "https://www.google.com/search?q=" + str(page)
        header = {'User-Agent': 'Mozilla/5.0'}
        task = asyncio.create_task(session.get(url, headers=header))
        tasks.append(task)
    # 添加return_exceptions避免单个请求失败导致整体崩溃
    results = await asyncio.gather(*tasks, return_exceptions=True)
    return results


async def main():
    async with aiohttp.ClientSession() as session:
        responses = await get_tasks(session)
        for response in responses:
            if isinstance(response, Exception):
                print(f"请求失败: {response}")
                continue
            await response.text()

if __name__ == "__main__":
    start_time = time.time()
    asyncio.run(main())
    print("--- %s seconds ---" % (time.time() - start_time))

2. 限制并发连接数

Windows系统网络资源限制更严格,aiohttp默认并发数可能过高,创建ClientSession时指定连接池大小:

async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(limit=5)) as session:

3. 检查本地网络环境

Win11本地的代理、防火墙或杀毒软件可能拦截异步请求,可暂时关闭这类软件测试;同时确认目标域名(比如谷歌)能正常访问。

内容的提问来源于stack exchange,提问作者Anan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 15:57:19