app.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import random
  2. import os
  3. import logging
  4. import json
  5. import time
  6. import traceback
  7. import ast
  8. from gevent import monkey, pool
  9. monkey.patch_all()
  10. from flask import Flask, request
  11. from log import Log
  12. from config import set_config
  13. from ad_predict import get_creative_id_with_thompson, get_creative_id_with_thompson_weight
  14. app = Flask(__name__)
  15. log_ = Log()
  16. config_ = set_config()
  17. # 限制协程最大并发数:100
  18. gevent_pool = pool.Pool(100)
  19. # log_.info(f"server start...")
  20. @app.route('/healthcheck')
  21. def health_check():
  22. return 'ok!'
  23. @app.route('/ad/predict/getCreativeId', methods=['GET', 'POST'])
  24. def get_creative_id():
  25. start_time = time.time()
  26. try:
  27. request_data = json.loads(request.get_data())
  28. mid = request_data.get('mid')
  29. creative_id_list = request_data.get('creativeIdList')
  30. sort_strategy = request_data.get('sortStrategy', 'thompson')
  31. if sort_strategy == 'thompson_weight':
  32. thompson_result = get_creative_id_with_thompson_weight(mid=mid, creative_id_list=creative_id_list,
  33. gevent_pool=gevent_pool, sort_strategy=sort_strategy)
  34. else:
  35. thompson_result = get_creative_id_with_thompson(mid=mid, creative_id_list=creative_id_list,
  36. gevent_pool=gevent_pool, sort_strategy=sort_strategy)
  37. result = {'code': 200, 'message': 'success', 'data': {'mid': mid, 'creativeId': thompson_result['creative_id']}}
  38. log_message = {
  39. 'requestUri': '/ad/predict/getCreativeId',
  40. 'logTimestamp': int(time.time() * 1000),
  41. 'requestData': request_data,
  42. 'thompsonResult': thompson_result,
  43. 'result': result,
  44. 'executeTime': (time.time() - start_time) * 1000
  45. }
  46. log_.info(log_message)
  47. return json.dumps(result)
  48. except Exception as e:
  49. log_.error(traceback.format_exc())
  50. result = {'code': -1, 'message': 'fail'}
  51. return json.dumps(result)
  52. if __name__ == '__main__':
  53. app.run()