【发布时间】:2017-04-20 19:27:17
【问题描述】:
我有一个 Python App Engine 应用程序,每天处理大约 300 万个请求。我正在尝试优化应用程序以节省我可笑地膨胀的托管费用。
November, App Engine Frontend Instances: 12924.391 Hours, $604.22
我将请求处理到一些 memcached 调用,但现在我注意到它通常需要大约 20 毫秒,有时甚至长达 166 毫秒,然后 webapp2 甚至将请求传递给我。
在下图中,您可以看到在 166 毫秒发生的显示“发布”的跟踪。
这是提供此服务的代码。
import logging
logging.info("main.py logging imported")
from imports import *
from handlers import *
logging.info("completed importing others")
class Main(webapp.RequestHandler):
def post(self):
logging.info("Post")
self.get()
...
app = webapp.WSGIApplication(
[
('/.*', Main)
],
debug=False
)
我尝试了什么?
我启用了线程安全,因此在请求得到处理之前不应进行任何导入。可以肯定的是,我还添加了日志记录以查看导入何时发生,并且您可以看到它们并未针对每个请求完成。
更多信息
延迟低并不重要,除了节省托管费用。即使有 1 分钟的响应时间(请求是 API webhook)我也可以,只要它不计入前端实例时间!
如果相关,这里是我的 app.yaml 的开头。
application: coolestsports-hrd
version: 1
runtime: python27
threadsafe: yes
api_version: 1
automatic_scaling:
min_idle_instances: 1
min_pending_latency: 1000ms
【问题讨论】:
-
我不确定您的 url 方案是什么样的,但如果可能的话,它可能有助于从 url 匹配中删除通配符
-
@BRadC 我在 app.yaml 顶部和通配符之前的 WSGIApplication 中添加了 URL 的直接路由,但似乎没有什么不同(每个请求仍然需要 20 多毫秒)。
-
我想知道“前端实例”时间是否包括TCP套接字建立成本(包括往返)?这或许可以解释这一点
-
@DanCornilescu 谢谢,是
标签: python google-app-engine optimization webapp2