首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Asyncio不在我的Python3.7 lambda中工作

Asyncio不在我的Python3.7 lambda中工作
EN

Stack Overflow用户
提问于 2019-10-01 23:57:32
回答 1查看 635关注 0票数 0

我正在尝试创建一个python3.7lambda,它正确地使用异步进行线程处理。

我尝试过许多不同的代码变体,但这是最新的代码块。我正在使用AWS X射线查看时间,很容易验证异步没有正确工作。所有这些任务和调用都是同步执行的。

代码语言:javascript
复制
import json
import boto3
import asyncio
from botocore.exceptions import ClientError
from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.core import patch_all

#xray
patch_all()

def lambda_handler(event, context):  
    tasks = []
    dict_to_populate = {}

    for item in list:
        tasks.append(asyncio.ensure_future(do_work(item, dict_to_populate)))

    loop = asyncio.get_event_loop()
    loop.run_until_complete(asyncio.gather(*tasks))
    loop.close


async def do_work(item, dict_to_populate):
    #assume regions are obtained
    for region in regions:
        response_vpcs = describe_vpcs(obj['Id'], session_assumed, region)

        if 'Vpcs' in response_vpcs:
            for vpc in response_vpcs['Vpcs']:
                #process 

我希望看到do_work函数在本质上同时启动(异步),但根据XRAY,它们都是同步的。它正在同步处理,并正在按预期填充dict_to_populate。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-02 20:37:37

  • --这就是我在aws中所做的工作,我想做4个post请求,然后收集所有的回复。希望这能有所帮助。

代码语言:javascript
复制
    loop = asyncio.get_event_loop()

    if loop.is_closed():
        loop = asyncio.new_event_loop()

    #The perform_traces method i do all the post method
    task = loop.create_task(perform_traces(payloads, message, contact_centre))
    unique_match, error = loop.run_until_complete(task)
    loop.close()

perform_trace方法中,我是如何在会话中使用wait的

代码语言:javascript
复制
    future_dds_responses = []

    async with aiohttp.ClientSession() as session:

        for payload in payloads:
            future_dds_responses.append(dds_async_trace(session, payload, contact_centre))

        dds_responses, pending = await asyncio.wait(future_dds_responses)

dds_async_trace中,这是我使用aiohttp.ClientSession会话完成文章的方式

代码语言:javascript
复制
        async with session.post(pds_url,
                                data=populated_template_payload,
                                headers=PDS_HEADERS,
                                ssl=ssl_context) as response:
            status_code = response.status
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58193678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档