我正在尝试创建一个python3.7lambda,它正确地使用异步进行线程处理。
我尝试过许多不同的代码变体,但这是最新的代码块。我正在使用AWS X射线查看时间,很容易验证异步没有正确工作。所有这些任务和调用都是同步执行的。
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。
发布于 2019-10-02 20:37:37
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的
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会话完成文章的方式
async with session.post(pds_url,
data=populated_template_payload,
headers=PDS_HEADERS,
ssl=ssl_context) as response:
status_code = response.statushttps://stackoverflow.com/questions/58193678
复制相似问题