run_web_server.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Fri Jun 1 18:03:03 2018
  4. @author: DONG
  5. """
  6. import sys
  7. import os
  8. import json
  9. import re
  10. sys.path.append(os.path.abspath(".."))
  11. print(sys.path)
  12. from flask import Flask, jsonify
  13. from flask import abort
  14. from flask import request
  15. import logging
  16. import time
  17. import predictor
  18. import uuid
  19. import redis
  20. import settings
  21. app = Flask(__name__)
  22. app.config['JSON_AS_ASCII'] = False
  23. gunicorn_logger = logging.getLogger('gunicorn.error')
  24. app.logger.handlers = gunicorn_logger.handlers
  25. app.logger.setLevel(gunicorn_logger.level)
  26. db = redis.StrictRedis(host=settings.REDIS_HOST,port=settings.REDIS_PORT,db=settings.REDIS_DB,password=settings.REDIS_PASS)
  27. @app.route('/content_extract', methods=['POST'])
  28. def text_predict():
  29. start_time = time.time()
  30. # 初始化待返回结果
  31. data = {"listpage_url": "","status_code":201}
  32. MAX_CONTENT = 150000
  33. # 确保请求符合要求
  34. if request.method == "POST":
  35. if (not request.json) or ('listpage_url' not in request.json):
  36. abort(400)
  37. else:
  38. try:
  39. k = str(uuid.uuid4())
  40. data["id"] = str(k)
  41. data["listpage_url"] = request.json["listpage_url"]
  42. if re.search("http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+",data["listpage_url"]) is None:
  43. data["status_code"] = 400
  44. abort(400)
  45. db.rpush(settings.CONTENT_QUEUE,json.dumps(data))
  46. while(True):
  47. output = db.get(k)
  48. if output is not None:
  49. output = output.decode("utf-8")
  50. json_output = json.loads(output)
  51. data = json_output
  52. data["listpage_url"] = request.json["listpage_url"]
  53. # 从redis中移除数据并中断循环
  54. db.delete(k)
  55. break
  56. time.sleep(settings.SERVER_SLEEP)
  57. except Exception as e:
  58. app.logger.info(msg="error:"+str(e))
  59. data["error_msg"] = str(e)
  60. # 以json形式返回结果
  61. app.logger.info(" time from receive to send: "+str(time.time()-start_time))
  62. _resp = jsonify(data)
  63. app.logger.info(str(data["flag"])+str(data))
  64. return _resp, 201
  65. if __name__ == '__main__':
  66. handler = logging.FileHandler('flask.log', encoding='UTF-8')
  67. app.logger.addHandler(handler)
  68. app.run(host='0.0.0.0', port=15015, threaded=True, debug=True)