# -*- coding: utf-8 -*- """ Created on Fri Jun 1 18:03:03 2018 @author: DONG """ import sys import os from flask import Flask, jsonify from flask import abort from flask import request sys.path.append(os.path.dirname(__file__)+"/..") os.environ["KERAS_BACKEND"] = "tensorflow" app = Flask(__name__) app.config['JSON_AS_ASCII'] = False limit_num = "4" os.environ["OMP_NUM_THREADS"] = limit_num # 1为一个核,设置为5的时候,系统显示用了10个核,不太清楚之间的具体数量关系 os.environ["OMP_NUM_THREADS"] = limit_num # export OMP_NUM_THREADS=1 os.environ["OPENBLAS_NUM_THREADS"] = limit_num # export OPENBLAS_NUM_THREADS=1 os.environ["MKL_NUM_THREADS"] = limit_num # export MKL_NUM_THREADS=1 os.environ["VECLIB_MAXIMUM_THREADS"] = limit_num # export VECLIB_MAXIMUM_THREADS=1 os.environ["NUMEXPR_NUM_THREADS"] = limit_num # export NUMEXPR_NUM_THREADS=1 import time import uuid import numpy as np import ctypes import inspect from threading import Thread import traceback import json os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" os.environ["CUDA_VISIBLE_DEVICES"] = "-1" sys.path.append(os.path.abspath(".")) from nltk.address.district_extractor import DistrictExtractor dist_extractr = DistrictExtractor() #自定义jsonEncoder class MyEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, np.ndarray): return obj.tolist() elif isinstance(obj, bytes): return str(obj, encoding='utf-8') elif isinstance(obj, (np.float_, np.float16, np.float32, np.float64)): return float(obj) return json.JSONEncoder.default(self, obj) def _async_raise(tid, exctype): """raises the exception, performs cleanup if needed""" tid = ctypes.c_long(tid) if not inspect.isclass(exctype): exctype = type(exctype) res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype)) if res == 0: raise ValueError("invalid thread id") elif res != 1: ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None) raise SystemError("PyThreadState_SetAsyncExc failed") def stop_thread(thread): _async_raise(thread.ident, SystemExit) @app.route("/address_extractor",methods=['POST']) def address_extractor(): text = '浙江省杭州市余杭区崇贤街道运河路5-4号13幢312室' _time = time.time() content = request.form.get("content") _result = dist_extractr.predict(content) return json.dumps(_result,ensure_ascii=False),201 def getPort(argv): port = 15030 print(argv) for item in argv: _l = str(item).split("port=") if len(_l)>1: port = int(_l[-1]) break return port def getWorkers(argv): worker = 15 for item in argv: _l = str(item).split("worker=") if len(_l)>1: worker = int(_l[-1]) break return worker def start_with_tornado(port,process_num): from tornado.wsgi import WSGIContainer from tornado.httpserver import HTTPServer from tornado.ioloop import IOLoop print("import ") http_server = HTTPServer(WSGIContainer(app)) # http_server.listen(port) #shortcut for bind and start http_server.bind(port) http_server.start(process_num) IOLoop.instance().start() def start_with_flask(): port = getPort(argv=sys.argv) app.run(host='0.0.0.0', port=port, threaded=True, debug=False) print("ContentExtractor running") # app.run() if __name__ == '__main__': # port = getPort(argv=sys.argv) # workers = getWorkers(argv=sys.argv) # start_with_tornado(port,workers) # pass start_with_flask()