Python 带有asyncio和信号量的aiohttp返回一个充满非的列表

Python 带有asyncio和信号量的aiohttp返回一个充满非的列表,python,python-3.x,python-asyncio,aiohttp,Python,Python 3.x,Python Asyncio,Aiohttp,我有一个脚本,用于检查提供的几十万个网站的状态代码,我试图将信号量集成到流中以加快处理速度。问题是,每当我集成一个信号量时,我只会得到一个没有对象的列表,我不完全确定为什么 我主要是从其他源代码复制代码,因为我还没有完全研究异步编程,但似乎在调试时我应该从函数中获得结果,但在收集结果时出现了一些问题。我试着在我的循环、我的聚会、确保未来等方面做些杂耍,但似乎没有任何东西能返回一个有效的清单 async def fetch(会话,url): 尝试: 与session.head(url,allow_

我有一个脚本,用于检查提供的几十万个网站的状态代码,我试图将信号量集成到流中以加快处理速度。问题是,每当我集成一个信号量时,我只会得到一个没有对象的列表,我不完全确定为什么

我主要是从其他源代码复制代码,因为我还没有完全研究异步编程,但似乎在调试时我应该从函数中获得结果,但在收集结果时出现了一些问题。我试着在我的循环、我的聚会、确保未来等方面做些杂耍,但似乎没有任何东西能返回一个有效的清单

async def fetch(会话,url):
尝试:
与session.head(url,allow_redirects=True)异步,分别为:
返回url,resp.real\u url,resp.status,resp.reason
例外情况除外,如e:
返回url,无,e,“错误”
异步def绑定_获取(sem、会话、url):
与sem异步:
等待获取(会话、url)
异步定义运行(URL):
超时=15
任务=[]
sem=asyncio.信号量(100)
conn=aiohttp.TCPConnector(限制=64,ssl=False)
与aiohttp.ClientSession(connector=conn)作为会话异步:
对于url中的url:
task=asyncio.wait\u for(绑定获取(sem、会话、url)、超时)
tasks.append(任务)
响应=等待asyncio.gather(*任务)
#responses=[等待tqdm.tqdm中的f替换f(异步IO.as_完成(任务),总计=len(任务))]
回复
URL=['https://google.com', 'https://yahoo.com']
loop=asyncio.proactReventLoop()
数据=循环。运行直到完成(运行(URL))
我已经注释掉了进度条组件,但是当没有信号量时,该实现会返回所需的结果


任何帮助都将不胜感激。我正在疯狂地阅读异步编程,但我还不能完全理解它。

您应该显式地返回等待协同程序的结果

替换此代码

async def bound_fetch(sem, session, url):
    async with sem:
        await fetch(session, url)
。。。为此:

async def bound_fetch(sem, session, url):
    async with sem:
        return await fetch(session, url)

此函数看起来是从中提取的,它也缺少
返回值