import random import os import logging import json import time import traceback import ast from gevent import monkey, pool monkey.patch_all() from flask import Flask, request from log import Log from config import set_config from ad_predict import get_creative_id_with_thompson, get_creative_id_with_thompson_weight app = Flask(__name__) log_ = Log() config_ = set_config() # 限制协程最大并发数:100 gevent_pool = pool.Pool(100) # log_.info(f"server start...") @app.route('/healthcheck') def health_check(): return 'ok!' @app.route('/ad/predict/getCreativeId', methods=['GET', 'POST']) def get_creative_id(): start_time = time.time() try: request_data = json.loads(request.get_data()) mid = request_data.get('mid') creative_id_list = request_data.get('creativeIdList') sort_strategy = request_data.get('sortStrategy', 'thompson') if sort_strategy == 'thompson_weight': thompson_result = get_creative_id_with_thompson_weight(mid=mid, creative_id_list=creative_id_list, gevent_pool=gevent_pool, sort_strategy=sort_strategy) else: thompson_result = get_creative_id_with_thompson(mid=mid, creative_id_list=creative_id_list, gevent_pool=gevent_pool, sort_strategy=sort_strategy) result = {'code': 200, 'message': 'success', 'data': {'mid': mid, 'creativeId': thompson_result['creative_id']}} log_message = { 'requestUri': '/ad/predict/getCreativeId', 'logTimestamp': int(time.time() * 1000), 'requestData': request_data, 'thompsonResult': thompson_result, 'result': result, 'executeTime': (time.time() - start_time) * 1000 } log_.info(log_message) return json.dumps(result) except Exception as e: log_.error(traceback.format_exc()) result = {'code': -1, 'message': 'fail'} return json.dumps(result) if __name__ == '__main__': app.run()