run_dist_extract_server.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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. from flask import Flask, jsonify
  9. from flask import abort
  10. from flask import request
  11. sys.path.append(os.path.dirname(__file__)+"/..")
  12. os.environ["KERAS_BACKEND"] = "tensorflow"
  13. app = Flask(__name__)
  14. app.config['JSON_AS_ASCII'] = False
  15. limit_num = "4"
  16. os.environ["OMP_NUM_THREADS"] = limit_num # 1为一个核,设置为5的时候,系统显示用了10个核,不太清楚之间的具体数量关系
  17. os.environ["OMP_NUM_THREADS"] = limit_num # export OMP_NUM_THREADS=1
  18. os.environ["OPENBLAS_NUM_THREADS"] = limit_num # export OPENBLAS_NUM_THREADS=1
  19. os.environ["MKL_NUM_THREADS"] = limit_num # export MKL_NUM_THREADS=1
  20. os.environ["VECLIB_MAXIMUM_THREADS"] = limit_num # export VECLIB_MAXIMUM_THREADS=1
  21. os.environ["NUMEXPR_NUM_THREADS"] = limit_num # export NUMEXPR_NUM_THREADS=1
  22. import time
  23. import uuid
  24. import numpy as np
  25. import ctypes
  26. import inspect
  27. from threading import Thread
  28. import traceback
  29. import json
  30. os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
  31. os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
  32. sys.path.append(os.path.abspath("."))
  33. from nltk.address.district_extractor import DistrictExtractor
  34. dist_extractr = DistrictExtractor()
  35. #自定义jsonEncoder
  36. class MyEncoder(json.JSONEncoder):
  37. def default(self, obj):
  38. if isinstance(obj, np.ndarray):
  39. return obj.tolist()
  40. elif isinstance(obj, bytes):
  41. return str(obj, encoding='utf-8')
  42. elif isinstance(obj, (np.float_, np.float16, np.float32,
  43. np.float64)):
  44. return float(obj)
  45. return json.JSONEncoder.default(self, obj)
  46. def _async_raise(tid, exctype):
  47. """raises the exception, performs cleanup if needed"""
  48. tid = ctypes.c_long(tid)
  49. if not inspect.isclass(exctype):
  50. exctype = type(exctype)
  51. res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype))
  52. if res == 0:
  53. raise ValueError("invalid thread id")
  54. elif res != 1:
  55. ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None)
  56. raise SystemError("PyThreadState_SetAsyncExc failed")
  57. def stop_thread(thread):
  58. _async_raise(thread.ident, SystemExit)
  59. @app.route("/address_extractor",methods=['POST'])
  60. def address_extractor():
  61. text = '浙江省杭州市余杭区崇贤街道运河路5-4号13幢312室'
  62. _time = time.time()
  63. content = request.form.get("content")
  64. _result = dist_extractr.predict(content)
  65. return json.dumps(_result,ensure_ascii=False),201
  66. def getPort(argv):
  67. port = 15030
  68. print(argv)
  69. for item in argv:
  70. _l = str(item).split("port=")
  71. if len(_l)>1:
  72. port = int(_l[-1])
  73. break
  74. return port
  75. def getWorkers(argv):
  76. worker = 15
  77. for item in argv:
  78. _l = str(item).split("worker=")
  79. if len(_l)>1:
  80. worker = int(_l[-1])
  81. break
  82. return worker
  83. def start_with_tornado(port,process_num):
  84. from tornado.wsgi import WSGIContainer
  85. from tornado.httpserver import HTTPServer
  86. from tornado.ioloop import IOLoop
  87. print("import ")
  88. http_server = HTTPServer(WSGIContainer(app))
  89. # http_server.listen(port) #shortcut for bind and start
  90. http_server.bind(port)
  91. http_server.start(process_num)
  92. IOLoop.instance().start()
  93. def start_with_flask():
  94. port = getPort(argv=sys.argv)
  95. app.run(host='0.0.0.0', port=port, threaded=True, debug=False)
  96. print("ContentExtractor running")
  97. # app.run()
  98. if __name__ == '__main__':
  99. # port = getPort(argv=sys.argv)
  100. # workers = getWorkers(argv=sys.argv)
  101. # start_with_tornado(port,workers)
  102. # pass
  103. start_with_flask()