Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用django、gunicorn和threadpool分析api_Python_Django_Amazon Lightsail - Fatal编程技术网

Python 使用django、gunicorn和threadpool分析api

Python 使用django、gunicorn和threadpool分析api,python,django,amazon-lightsail,Python,Django,Amazon Lightsail,我有一个API来执行以下操作。我正在使用python、Django框架和gunicorn/nginx进行部署 API已部署在AWS lightsail中。每2秒就会收到一次请求 从客户端接收数据 在本地SQLite数据库中创建记录并发送响应 在线程中异步运行任务。(在线程中运行)。整个任务平均耗时约1秒 a。获取步骤2中ID为(0秒)的更新记录 b。使用请求将数据发布到另一个API。(.5秒) c。数据库更新(AWS RDS)(0.5秒) 设置: 我有线程池执行器max_workers=1

我有一个API来执行以下操作。我正在使用python、Django框架和gunicorn/nginx进行部署

API已部署在AWS lightsail中。每2秒就会收到一次请求

  • 从客户端接收数据

  • 在本地SQLite数据库中创建记录并发送响应

  • 在线程中异步运行任务。(在线程中运行)。整个任务平均耗时约1秒

    a。获取步骤2中ID为(0秒)的更新记录

    b。使用请求将数据发布到另一个API。(.5秒)

    c。数据库更新(AWS RDS)(0.5秒)

  • 设置:

  • 我有线程池执行器max_workers=12
  • gunicorn有一个worker,因为实例有1vCPU。我不在线程中使用gunicorn workers,因为我必须在api中执行一些其他任务
  • 不使用asyncio的原因是,此操作不支持Django中对db的基本更新。因此,我将post API保留在线程本身中
  • 每个请求都是唯一的。没有同样的要求
  • 即使我将线程池中的max_worker设置为1,在AWS 5$instance中也会突破10%。API仅每2秒接收一次请求

    我无法分析导致CPU使用的这种情况

    我能想到几个原因

  • gunicorn船长经常检查工人
  • 操作系统正在为上下文切换管理线程

  • 任何指针都将有助于分析。

    API具有验证修饰符,用于比较密码哈希。这是导致CPU崩溃的原因。现在我已经用到期的令牌实现了。希望它能为其他类似情况的人提供一些启示或指导。您使用的是Django还是Django Rest框架?我没有使用DRF。这只是纯django.Ok。请访问,您可以在上面的链接中找到答案。API已在其中比较密码哈希的auth decorator。这是导致CPU崩溃的原因。现在我已经用到期的令牌实现了。希望它能为其他类似情况的人提供一些启示或指导。您使用的是Django还是Django Rest框架?我没有使用DRF。这只是纯django.Ok。请访问,您可以在上面的链接中找到答案。