app.py 2.9 KB

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