How to accept concurrent request using Gunicorn for Flask API? How to accept concurrent request using Gunicorn for Flask API? flask flask

How to accept concurrent request using Gunicorn for Flask API?


Better way - using Job Queue with Redis or something similar.You will can create queues for jobs, get results and organize exchange with frontend via API requests. Every job will be working in separate process without stuck main application. In other case you will need resolving problems with bottlenecks on every step.

Good implementation - RQ lib or flask-rq fo Redis.

http://python-rq.org/

  1. Start instance of Redis (i'm using docker for it)
  2. Write your own worker like this:
import redis        from rq import Worker, Queue, Connection  listen = ['high', 'default', 'low']redis_url = os.getenv('REDISTOGO_URL', 'redis://localhost:6379')conn = redis.from_url(redis_url)if __name__ == '__main__':    with Connection(conn):                                                       worker = Worker(map(Queue, listen))        worker.work()     
  1. Start workers via flask or via console(better for debug process)and create job in queue and controling results.
from redis import Redisfrom rq import Queueq = Queue(connection=Redis())def crawl_end_point():   ... #adding task to queueresult = q.enqueue(crawl_end_point, timeout=3600)#simplest way save id of jobsession['j_id'] = result.get_id()#get job statusjob = Job.fetch(session['j_id'], connection=conn)job.get_status()  #get job resultsjob.result

Also you can check Celery for this purposes:https://stackshare.io/stackups/celery-vs-redis