Flask获取每个API的请求呼叫时间

时间:2017-09-14 06:29:06

标签: python flask

我使用uwsgi启动我的烧瓶服务器,它有15个工人,我想获得每个api的调用时间,并返回结果如下:

{
    "api/students": 10,
    "api/teachers": 20,
    ...
}

我为app添加了before_request句柄:

@app.before_request
def before_request_handler():
    # here to do statistics
    # count += 1

我写了一个api来获取计数值。 但是,我发现每次价值都没有增加,因为有多个工人,每次我只有一个工人的通话时间

那么,我的问题是如何收集Flask中所有工作人员的所有请求呼叫时间?

1 个答案:

答案 0 :(得分:0)

你不能在工人之间跟踪这样的计数器,因为你会遇到如下问题:

  • 假设工作人员在不同的流程中运行,您需要协调您的计数器
  • 假设工作者在线程中运行,您需要确保您的计数器是线程安全的。

在评论部分,建议使用g对象,这不起作用,因为g仅针对每个请求进行全局操作。每次请求后,g都会被删除。

实现计数器的正确方法是使用第三方数据存储。数据库可以完成这项工作(并发可以在事务中处理),但建议使用像Redis或Memcached这样的缓存服务。