multimodalart HF Staff commited on
Commit
879fdec
·
1 Parent(s): d87c92c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +52 -49
app.py CHANGED
@@ -1,54 +1,57 @@
1
- from flask import Flask, request, g
2
- from threading import Thread
3
  from queue import Queue
4
- import requests
5
  import os
 
 
6
 
7
  app = Flask(__name__)
8
 
9
- # Configurable parameter for number of workers
10
- WORKERS = int(os.getenv('WORKERS', 2))
11
-
12
- API_ENDPOINT = os.getenv('API_ENDPOINT', 'https://actual-api-endpoint')
13
-
14
- class Worker(Thread):
15
- def __init__(self, queue):
16
- Thread.__init__(self)
17
- self.queue = queue
18
-
19
- def run(self):
20
- while True:
21
- data, callback = self.queue.get()
22
- try:
23
- response = requests.post(API_ENDPOINT, data=data)
24
- callback(response)
25
- finally:
26
- self.queue.task_done()
27
-
28
-
29
- @app.before_first_request
30
- def initialize_workers():
31
- g.queue = Queue()
32
-
33
- for _ in range(WORKERS):
34
- worker = Worker(g.queue)
35
- worker.daemon = True
36
- worker.start()
37
-
38
-
39
- @app.route('/api', methods=['POST'])
40
- def queue_api():
41
- data = request.get_json()
42
-
43
- def callback(response):
44
- return response.content
45
-
46
- g.queue.put((data, callback))
47
-
48
- g.queue.join()
49
-
50
- return callback
51
-
52
-
53
- if __name__ == '__main__':
54
- app.run()
 
 
 
1
+ from flask import Flask, request, jsonify
 
2
  from queue import Queue
3
+ from threading import Thread
4
  import os
5
+ import time
6
+ import requests
7
 
8
  app = Flask(__name__)
9
 
10
+ queue = Queue()
11
+ API_ENDPOINT = os.environ.get("API_ENDPOINT", "")
12
+ WORKERS = int(os.environ.get("WORKERS", "1"))
13
+
14
+ def worker():
15
+ while True:
16
+ req = queue.get()
17
+ if req is None:
18
+ break
19
+
20
+ # Forward the request to the API endpoint
21
+ response = requests.request(req['method'], API_ENDPOINT, headers=req['headers'], data=req['data'])
22
+ req['result'] = response.json()
23
+ queue.task_done()
24
+
25
+ @app.route('/api', methods=['GET', 'POST'])
26
+ def handle_request():
27
+ headers = {key: value for key, value in request.headers}
28
+ data = request.get_data()
29
+ method = request.method
30
+
31
+ # Add the request to the queue
32
+ req = {'headers': headers, 'data': data, 'method': method, 'result': None}
33
+ queue.put(req)
34
+
35
+ # Wait until the request has been processed
36
+ while req['result'] is None:
37
+ time.sleep(0.1)
38
+
39
+ return jsonify(req['result']), 200
40
+
41
+
42
+ if __name__ == "__main__":
43
+ # Start the worker threads
44
+ threads = []
45
+ for i in range(WORKERS):
46
+ t = Thread(target=worker)
47
+ t.start()
48
+ threads.append(t)
49
+
50
+ # Start the Flask app
51
+ app.run(host='0.0.0.0', port=5000)
52
+
53
+ # Stop the worker threads
54
+ for i in range(WORKERS):
55
+ queue.put(None)
56
+ for t in threads:
57
+ t.join()