__init__.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. # -*- coding:utf-8 -*-
  2. # 配置文件初始化
  3. # 主要是一些 db 的初始化创建
  4. # 简单 Class 类函数的 初始化
  5. import asyncio
  6. import logging
  7. import os
  8. from configparser import ConfigParser
  9. from logging.handlers import TimedRotatingFileHandler
  10. from os.path import dirname
  11. import redis as redis
  12. import uvloop
  13. from requests import adapters
  14. from sqlalchemy import create_engine
  15. from sqlalchemy.orm import sessionmaker
  16. adapters.DEFAULT_POOLSIZE = 100000
  17. asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
  18. class CfgBaseInit(object):
  19. """
  20. config: 配置文件对象
  21. project_name: 项目名称
  22. start_mode: 项目启动模式
  23. """
  24. __REC_ENGINE = "REC_ENGINE" # 环境变量以REC_ENGINE开头
  25. config = ConfigParser()
  26. config.read(os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "config", "config.ini"))
  27. # 遍历所有配置,保存为dict
  28. config_dict = {}
  29. for sc in config.sections(): # 循环每个Session
  30. items = config.items(sc) # 返回结果为元组
  31. config_dict[sc] = {}
  32. for it in items: # 循环遍历 每个属性
  33. k, v = it[0], it[1]
  34. config_value = os.getenv("_".join([__REC_ENGINE, sc, k])) # 环境变量中是否存在
  35. if config_value:
  36. print(f"获取到环境变量:{sc}_{k}")
  37. v = config_value
  38. config_dict[sc][k] = v
  39. project_name = config.get("CONFIG", "project_name")
  40. project_path = dirname(dirname(__file__))
  41. bind = config.get("CONFIG", "host")
  42. class Logger(object):
  43. # 日志
  44. log_path = CfgBaseInit.config.get("LOG", "log_path")
  45. when = CfgBaseInit.config.get("LOG", "when")
  46. backupCount = int(CfgBaseInit.config.get("LOG", "backupCount"))
  47. logging.basicConfig(
  48. format='%(asctime)s %(name)s %(process)d %(thread)d %(threadName)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
  49. logger = logging.getLogger(CfgBaseInit.project_name)
  50. logger.setLevel(logging.DEBUG)
  51. # 输出到文件
  52. handler = TimedRotatingFileHandler(log_path, when=when, backupCount=backupCount)
  53. logger.addHandler(handler)
  54. logger = Logger.logger
  55. class MySqlEngine(CfgBaseInit):
  56. """ mysql 引擎
  57. """
  58. import pymysql
  59. from urllib.parse import quote_plus as urlquote
  60. pymysql.install_as_MySQLdb()
  61. mysql_dict = CfgBaseInit.config_dict["MYSQL"]
  62. __user = mysql_dict['user']
  63. __password = mysql_dict['password']
  64. __host = mysql_dict['host']
  65. __port = mysql_dict['port']
  66. __db = mysql_dict['db']
  67. __engine = create_engine(f"mysql://{__user}:{urlquote(__password)}@{__host}:{__port}/{__db}",
  68. pool_size=2,
  69. max_overflow=0,
  70. pool_recycle=280) # 280秒重新连接一次
  71. DBSession = sessionmaker(bind=__engine)
  72. class RedisInit(CfgBaseInit):
  73. """
  74. Redis 对象初始化
  75. """
  76. __redis_dict = CfgBaseInit.config_dict["REDIS"]
  77. __host = __redis_dict['host']
  78. __port = __redis_dict['port']
  79. __db = __redis_dict['db']
  80. pool = redis.ConnectionPool(host=__host, port=__port, db=__db, max_connections=None, decode_responses=True,
  81. socket_keepalive=False)
  82. redis = redis.Redis(connection_pool=pool)