app.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. # -*- coding: utf-8 -*-
  2. # @Time : 2024/6/6
  3. # @Author : 魏志亮
  4. from apscheduler.executors.pool import ThreadPoolExecutor
  5. from flask import Flask, request
  6. from flask_apscheduler import APScheduler
  7. from flask_restx import Api, Resource, fields
  8. from schedule_service import run_local
  9. from flask_executor import Executor
  10. app = Flask(__name__)
  11. executor = Executor(app)
  12. api = Api(app, version='1.0', title='Transfer API', description='Transfer API')
  13. localExec = api.model('LocalExecModal', {
  14. 'step': fields.Integer(default=0, description='开始步骤 0:验证删除临时文件 1:复制文件到临时文件夹 2:整理文件到临时文件 3:保存到正式文件 4:保存到数据库 '),
  15. 'end': fields.Integer(default=3, description='结束步骤 0:验证删除临时文件 1:复制文件到临时文件夹 2:整理文件到临时文件 3:保存到正式文件 4:保存到数据库 '),
  16. 'batch_no': fields.String(default='批次号', description='批次号'),
  17. 'transfer_type': fields.String(default='minute', description='传输类型'),
  18. 'transfer_file_addr': fields.String(default='/test', description='传输文件地址'),
  19. 'field_name': fields.String(default='风场名称', description='风场名称'),
  20. 'field_code': fields.String(default="风场编号", description="风场编号"),
  21. 'save_db': fields.Boolean(default=False, description='是否保存到数据库')
  22. })
  23. @api.route('/local_exce')
  24. class LocalExec(Resource):
  25. @api.expect(localExec)
  26. def post(self):
  27. def local_exec():
  28. try:
  29. localExec = request.get_json()
  30. run_local(localExec['step'], localExec['end'], localExec['batch_no'], localExec['transfer_type'],
  31. localExec['transfer_file_addr'], localExec['field_name'], localExec['field_code'],
  32. localExec['save_db'])
  33. except Exception as e:
  34. print(e)
  35. executor.submit(local_exec)
  36. return {'status': 200, 'message': '正在执行'}
  37. class Config(object):
  38. JOBS = [
  39. {
  40. 'id': 'job1',
  41. 'func': 'schedule_service:run_schedule',
  42. 'args': (0, 4),
  43. 'trigger': 'interval',
  44. 'seconds': 60
  45. }
  46. ]
  47. SCHEDULER_EXECUTORS = {'default': ThreadPoolExecutor(6)}
  48. # 调度器开关开启
  49. SCHEDULER_API_ENABLED = True
  50. # 设置容错时间为 2min
  51. # coalesce积攒得任务跑几次,在时间允许得范围内 True:默认最后一次,False:在时间允许范围内全部提交
  52. # max_instances 同时允许并发的最大并发量
  53. # misfire_grace_time 如果重启任务在这个时间范围内,就能继续重启
  54. SCHEDULER_JOB_DEFAULTS = {'coalesce': True, 'max_instances': 2, 'misfire_grace_time': 60}
  55. # 配置时区
  56. SCHEDULER_TIMEZONE = 'Asia/Shanghai'
  57. @app.teardown_appcontext
  58. def shutdown_scheduler(exception):
  59. if scheduler.running:
  60. scheduler.shutdown()
  61. if __name__ == '__main__':
  62. app.config.from_object(Config())
  63. scheduler = APScheduler()
  64. scheduler.init_app(app)
  65. scheduler.start()
  66. app.run(host='0.0.0.0', port=8088)