File size: 2,366 Bytes
6086481 32b35a3 8e1f150 0918613 018537d 6086481 3090328 6086481 32b35a3 6086481 e925a0f 32b35a3 6086481 ba5672b 0918613 ba5672b a3ed2ae ba5672b 5f9624d ba5672b ff284fc 5f9624d 018537d 6086481 32b35a3 001000b 5f9624d ba5672b 6086481 3090328 ba5672b |
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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
from threading import Thread
import redis, time
from flask import Flask, jsonify, send_from_directory, Response, request
from waitress import serve
from flask_cors import CORS, cross_origin
from model import SugoiTranslator
from typing import List
queue_key = "translation_queue"
translated_key = "translated_temp_store"
redis_client = redis.Redis(host='localhost', port=6379, db=0)
def queue_process():
while True:
task_list = []
for _ in range(5):
task = redis_client.rpop(queue_key) # right pop
if task: task_list.append(task)
else: break
if len(task_list): task_process(task_list)
time.sleep(0.5)
def task_process(input_text_list: List[str]):
sugoiTranslator = SugoiTranslator()
translations = sugoiTranslator.translate(input_text_list)
for index, translation in enumerate(translations):
redis_client.hset(translated_key, input_text_list[index], translation)
def query_translation(input_text: str):
for _ in range(30):
translated_text = redis_client.hget(translated_key, input_text)
if translated_text is not None:
redis_client.hdel(translated_key, input_text)
try: return translated_text.decode('utf-8')
except AttributeError: return translated_text
time.sleep(1)
app = Flask(__name__)
CORS(app)
@app.route('/')
def index():
return send_from_directory('dist', "index.html")
@app.route('/<path:filename>')
def download_file(filename):
return send_from_directory('.', filename)
@app.route('/assets/<path:filename>')
def download_assets(filename):
return send_from_directory('dist/assets', filename)
@app.route('/api/translate', methods= ['POST'])
@cross_origin()
def translate_api():
input_text = request.args.get('text')
if isinstance(input_text, str) and len(input_text) > 0:
redis_client.lpush(queue_key, input_text) # left push
result = query_translation(input_text)
if result is not None: return jsonify({ "text": result })
else: return Response(status= 529, response= "Error 529: Server overloaded")
return Response(status= 400)
if __name__ == '__main__':
Thread(target=queue_process, daemon=True).start()
print("Starting server...")
try: serve(app, port= 7860)
except BaseException as e:
print(e)
|