【问题标题】:request returning "Endpoint request timed out"请求返回“端点请求超时”
【发布时间】:2019-09-10 02:24:29
【问题描述】:

我已经使用 zappa 在 aws lambda 上部署了一个烧瓶应用程序,现在该应用程序在所有端点上都运行良好,除了我的主要端点,当我在它上发出发布请求时它返回 { "message": "端点请求超时" }

真的需要一个修复或想法如何克服这个我需要调用分析路由,部署的 url 是

https://2ixfyfcsik.execute-api.eu-west-2.amazonaws.com/dev

尝试增加我的应用程序超时限制无济于事,似乎 api 网关有 30 秒超时,所以如何绕过它或不如何让我的应用程序在 30 秒内返回结果任何帮助表示赞赏

from flask import Flask, redirect, url_for, request, jsonify
from flask_cors import CORS
import os,json
from hatesonar import Sonar
from profanityfilter import ProfanityFilter


app = Flask(__name__)
CORS(app)



@app.route('/',methods = ['GET'])
def index():
    return jsonify({"message": "Hello World!"})



@app.route('/test',methods = ['GET'])
def test():
    results=[]
    post="Every Day. Narrated by Patch."
    sonar = Sonar()
    offensiveLanguage = sonar.ping(text=post)
    for item in offensiveLanguage['classes']:
        if (item['class_name']=='hate_speech'):
            if(item['confidence']>=0.9):
                hatesonar_hatespeech=item['coinfidence']
            else:
                hatesonar_hatespeech=0
            results.append(hatesonar_hatespeech)
        else:
            pass
        if (item['class_name']=='offensive_language'):
            if(item['confidence']>=0.9):
                hatesonar_swearing=item['coinfidence']
            else:
                hatesonar_swearing=0
            results.append(hatesonar_swearing)
    return jsonify(results)




@app.route('/offensiveLanguage',methods = ['POST', 'GET'])
def login():
   if request.method == 'POST':
      user = request.form['nm']
      return redirect(url_for('success',name = user))
   else:
      sonar = Sonar()
      text = request.args.get('text')
      print("text", text)
      offensiveLanguage = sonar.ping(text=text)
      print("offensiveLanguage", offensiveLanguage)
      return jsonify(offensiveLanguage)


@app.route('/analysis',methods = ['GET','POST'])
def profanity():
    if request.method == 'POST':
        profanitycount=0
        data = request.get_json()
        posts=[]
        for item in data:
            if ('media' in item):
                for x in item['media']:
                    if(x['mediaType']=='post'):
                        if (x['content']):
                            posts.append(x['content'])
                        else:
                            pass
                    else:
                        pass
            else:
                pass
        flat_list = []
        for sublist in posts:
            for item in sublist:
                flat_list.append(item)          
        for post in flat_list:
            pf = ProfanityFilter()
            swearing = pf.is_profane(post)
            if(swearing=='true'):
                profanitycount = profanitycount + 1
            else:
                profanitycount = profanitycount
            sonar = Sonar()
            offensiveLanguage = sonar.ping(text=post)   
    print("profanity", profanitycount)
    return jsonify(profanitycount)


if __name__ == '__main__':
        app.run()



【问题讨论】:

  • 你确定你的 profanity() 确实被调用了,但它只是花费了太长时间才能产生结果?
  • 是的,因为所有结果都来自本地,当我部署了其产生请求超时但在本地正常工作的公正分析时,所有其他路由也能正常工作......
  • 您的 Lambda 是否在 VPC 中?
  • 您的 profanity() 方法看起来相当简单。为什么不向其中添加一些打印语句,然后检查 CloudWatch Logs 以查看代码在做什么?暂时绕过 hatsonar 代码,看看是不是这个原因。
  • 你的意思是它与 for 循环和函数中的所有内容都无关,理想情况下会导致超时。我相信也许函数需要太长时间才能返回结果,这就是它返回请求超时的原因。

标签: python amazon-web-services flask aws-lambda timeout


【解决方案1】:

如果您的请求是同步的,请尝试在 lambda 的基本设置中增加内存。它对我有用(您的函数分配的 CPU 与配置的内存成正比)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    相关资源
    最近更新 更多