Python TypeError:AWS lambda需要一个未来或协同程序

Python TypeError:AWS lambda需要一个未来或协同程序,python,python-asyncio,Python,Python Asyncio,我正在设置一个lambda函数,它使用asyncio和aiohttp发出异步请求。即使代码在本地运行时工作正常,但一旦我将其上传到lambda,它会返回: "errorMessage": "A Future or coroutine is required" 我已经研究了一些已经公开的问题,比如和,但无法使其发挥作用 我不知道为什么在我有一个已定义的协同程序时返回错误消息 base_url = "https://www.reed.co.uk/api/1.0/jobs/" url_list =

我正在设置一个lambda函数,它使用asyncio和aiohttp发出异步请求。即使代码在本地运行时工作正常,但一旦我将其上传到lambda,它会返回:

"errorMessage": "A Future or coroutine is required"
我已经研究了一些已经公开的问题,比如和,但无法使其发挥作用

我不知道为什么在我有一个已定义的协同程序时返回错误消息

base_url = "https://www.reed.co.uk/api/1.0/jobs/"

url_list = [
"38012438",
"38012437",
"38012436"]

def lambda_handler(event, context):
client = boto3.client('s3',
                      aws_access_key_id="aws_access_key_id",
                      aws_secret_access_key="aws_secret_access_key")

async def fetch(session, url):
    auth = aiohttp.BasicAuth(login='login', password='')
    async with aiohttp.ClientSession(auth=auth) as session:
        async with session.get(url) as response:
            return await response.json()

async def fetch_all(urls, loop):
    async with aiohttp.ClientSession(loop=loop) as session:
        results = await asyncio.gather(*[fetch(session, base_url + url) for url in url_list], return_exceptions=True)
        return results

loop = asyncio.get_event_loop()
htmls = loop.run_until_complete(fetch_all(urls, loop))
#I believe this is where the coroutine is 

with open("/tmp/JOBS.json", "w") as f:
    json.dump(htmls, f)
我只想将请求的组合内容上传到json文件


我对自己有限的编码技能表示歉意,因为我是python、lambda等新手。

请查看您的requirements.txt文件。我在requirements.txt中添加asyncio时也遇到了同样的错误。AWS似乎使用了一种特殊版本的python。Asyncio是python的一部分。如果您单独安装,那么它在AWS Lambda中不起作用。

不要将
@asyncio.coroutine
异步def
@dirn一起使用。我尝试过不使用它,但它不起作用。我不是建议作为答案。它们是多余的,如果一起使用,很可能会导致意外行为,因为它们都会导致语法以不同的方式发生变化。但我还没有上传requirements.txt,因为这是AWS控制台上的直接代码。我没有上传它,因为我的代码中使用的所有库都是python的一部分,所以我认为不需要它。这也修复了AWS Glue上的一个问题