File size: 1,129 Bytes
e2cf778
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
from flask import Flask, request, g
from threading import Thread
from queue import Queue
import requests
import os

app = Flask(__name__)

# Configurable parameter for number of workers
WORKERS = int(os.getenv('WORKERS', 2))

API_ENDPOINT = os.getenv('API_ENDPOINT', 'https://actual-api-endpoint')

class Worker(Thread):
    def __init__(self, queue):
        Thread.__init__(self)
        self.queue = queue

    def run(self):
        while True:
            data, callback = self.queue.get()
            try:
                response = requests.post(API_ENDPOINT, data=data)
                callback(response)
            finally:
                self.queue.task_done()


@app.before_first_request
def initialize_workers():
    g.queue = Queue()

    for _ in range(WORKERS):
        worker = Worker(g.queue)
        worker.daemon = True
        worker.start()


@app.route('/api', methods=['POST'])
def queue_api():
    data = request.get_json()

    def callback(response):
        return response.content

    g.queue.put((data, callback))

    g.queue.join()

    return callback


if __name__ == '__main__':
    app.run()