我写了以下代码:
import asyncio
loop = asyncio.get_event_loop()
async def get_urls(event):
return {'msg':'Hello World'}
def lambda_handler(event,context):
return loop.run_until_complete(get_urls(event))
我试图完成以下但更快。
def lambda_handler(event, context):
# TODO implement
return {'msg':'Hello World'}
在AWS Lambda环境中编写此代码的正确方法是什么?
答案 0 :(得分:1)
异步执行同时执行许多操作。你只做一件事。你不能比做一件事所花费的时间更快。异步执行允许您执行通常一个接一个地(同步)同时执行的独立任务,然后返回所有任务的结果。本质上,您必须执行多个操作。
答案 1 :(得分:1)
答案 2 :(得分:1)
对于Python 3.7+,您可以使用asyncio.run()
执行协程:
import asyncio
# The AWS Lambda handler
def handler(event, context):
asyncio.run(main())
async def main():
# Here you can await any awaitable
await asyncio.sleep(1)
await asyncio.gather([coroutine_1, coroutine_2])
这是如何在AWS Lambda上使用asyncio,aiohttp和aiobotocore开发,测试和部署异步Python函数的完整示例:https://github.com/geeogi/async-python-lambda-template
答案 3 :(得分:0)
需要将aioboto3作为部署zip软件包的一部分本地安装 `
import (
"fmt"
"math/rand"
"strconv"
"testing"
"time"
)
func TestMap(t *testing.T) {
s1 := rand.NewSource(time.Now().UnixNano())
r1 := rand.New(s1)
data := fill(r1.Intn(100))
timer := time.NewTimer(10 * time.Second)
go func() {
s1 := rand.NewSource(time.Now().UnixNano())
r1 := rand.New(s1)
for {
select {
case <-timer.C:
return
default:
}
p := r1.Intn(100)
v := fill(p)
data = v
fmt.Println("_p=" + strconv.Itoa(p))
}
}()
for range []int{1, 2, 3, 4, 5, 6, 7, 8} {
go func() {
s1 := rand.NewSource(time.Now().UnixNano())
r1 := rand.New(s1)
for {
select {
case <-timer.C:
return
default:
}
n := r1.Intn(100)
s := strconv.Itoa(n)
fmt.Println(data[s])
}
}()
}
<-timer.C
}
func fill(postfix int) map[string][]string {
m := make(map[string][]string)
for i := 0; i < 100; i++ {
s := strconv.Itoa(i)
m[s] = []string{s + "_" + strconv.Itoa(postfix)}
}
return m
}
`