繁体   English   中英

使用 Django API 处理并发请求

[英]Handling concurrent requests with Django API

我想用 DRF ( https://www.django-rest-framework.org/ ) 创建一个简单的 Rest API。 另一个服务将发出请求,并在其中提供 JSON。 这个 json 被解析,一些相当简单的 Pandas 数据框操作将发生。 结果通过 JSON 发回。

有没有办法使这个过程成为多线程的? 尽管 Pandas 操作相当简单,但它们仍然可能需要大约 0.5s-1s,如果由于某种原因在同一时刻发出 3-4 个这样的请求,我想避免人们等待几秒钟。

谢谢!

您是否使用YourAPIScript.py runserver部署了您的 API?

据我所知,它是单线程的,因此在完成处理另一个请求之前,它无法开始处理一个请求。

解决方案:

  1. 如果您使用更面向生产的 WSGI 服务器,例如 uwsgi,则可以将其设置为一次处理多个请求。 试试 Django 文档中的这个教程: How to use Djanog with uwsgi
  2. 如果您使用 gunicorn,您可以增加工作线程和线程的数量,或者将工作线程类切换为非阻塞的单geventeventlet ( http://docs.gunicorn.org/en/stable/settings.html#id75 )。 对于工作线程数和线程数,默认值为 1,这意味着默认情况下您会获得 1 个请求的并发性。
  3. 您也可以为此使用任务队列。 大多数人使用芹菜

在我看来,避免用多线程解决这个问题可能是个好主意。 这样做可能会更好:

  1. 客户端向 API 发送 JSON;
  2. API 创建Celery 任务来处理 JSON,然后返回某种 id 或 URL 来存储结果;
  3. Celery 任务在后台处理 JSON;
  4. 当结果准备好时,外部服务可以使用第 2 步中的 id 或 URL 获取它。

在我看来,在请求-响应过程中使用 Pandas 处理 JSON 不是您想要做的事情,它更适合异步任务架构。 今天可能需要 0.5-1 秒,但明天可能需要 10 秒并挂起您的应用程序

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM