Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Handling concurrent requests with Django API

I'd like to make a create a simple Rest API with DRF (https://www.django-rest-framework.org/). Another service is going to make requests in which it provides a JSON. This json is parsed and some rather simple pandas dataframe operations are going to take place. The result is sent back via JSON.

Is there a way to make this process multi-threaded? Even though the pandas operations are rather simple, they still might take ~0.5s-1s, and I'd like to avoid people waiting for a few secs if there's 3-4 of such requests made in the same moment for some reason.

Thanks!

like image 303
Bishonen_PL Avatar asked Mar 17 '26 07:03

Bishonen_PL


1 Answers

Did you deploy your API using YourAPIScript.py runserver?

As far as I remember, it's single threaded, so it won't be able to start processing one request until it has finished processing another.

Solutions:

  1. If you use a more production-oriented WSGI server, like uwsgi, it can be set up to serve more than one request at a time. Try this tutorial from the Django docs: How to use Djanog with uwsgi
  2. If you use gunicorn you can either increase the number of workers and threads or switch the worker class to a non-blocking one gevent or eventlet (http://docs.gunicorn.org/en/stable/settings.html#id75). For worker count and threads, the defaults are 1 each, meaning that by default you get a concurrency of 1 request.
  3. You can also use a task queue for this. Most people use celery.
like image 131
Karthick Mohanraj Avatar answered Mar 19 '26 22:03

Karthick Mohanraj



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!