# -*- coding: utf-8 -*- """ Created on Fri Jun 1 18:03:03 2018 @author: DONG """ import sys import os import json import re sys.path.append(os.path.abspath("..")) print(sys.path) from flask import Flask, jsonify from flask import abort from flask import request import logging import time import predictor import uuid import redis import settings app = Flask(__name__) app.config['JSON_AS_ASCII'] = False gunicorn_logger = logging.getLogger('gunicorn.error') app.logger.handlers = gunicorn_logger.handlers app.logger.setLevel(gunicorn_logger.level) db = redis.StrictRedis(host=settings.REDIS_HOST,port=settings.REDIS_PORT,db=settings.REDIS_DB,password=settings.REDIS_PASS) @app.route('/content_extract', methods=['POST']) def text_predict(): start_time = time.time() # 初始化待返回结果 data = {"listpage_url": "","status_code":201} MAX_CONTENT = 150000 # 确保请求符合要求 if request.method == "POST": if (not request.json) or ('listpage_url' not in request.json): abort(400) else: try: k = str(uuid.uuid4()) data["id"] = str(k) data["listpage_url"] = request.json["listpage_url"] if re.search("http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+",data["listpage_url"]) is None: data["status_code"] = 400 abort(400) db.rpush(settings.CONTENT_QUEUE,json.dumps(data)) while(True): output = db.get(k) if output is not None: output = output.decode("utf-8") json_output = json.loads(output) data = json_output data["listpage_url"] = request.json["listpage_url"] # 从redis中移除数据并中断循环 db.delete(k) break time.sleep(settings.SERVER_SLEEP) except Exception as e: app.logger.info(msg="error:"+str(e)) data["error_msg"] = str(e) # 以json形式返回结果 app.logger.info(" time from receive to send: "+str(time.time()-start_time)) _resp = jsonify(data) app.logger.info(str(data["flag"])+str(data)) return _resp, 201 if __name__ == '__main__': handler = logging.FileHandler('flask.log', encoding='UTF-8') app.logger.addHandler(handler) app.run(host='0.0.0.0', port=15015, threaded=True, debug=True)