1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- # -*- 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)
|