关键词搜索

源码搜索 ×
×

Flask笔记-任务框架搭建

发布2020-03-08浏览4638次

详情内容

这个是个很好的结构,如下:

先贴下代码:

base_setting.py

DEBUG = True

local_setting.py

local_setting.py

production_setting.py

  1. from config.base_setting import *
  2. DEBUG = False

test.py

  1. class JobTask():
  2. def __init__(self):
  3. pass
  4. def run(self, params):
  5. print("Job测试打印")
  6. print(params)
  7. pass

launcher.py

  1. from flask_script import Command
  2. import sys, argparse, traceback, importlib
  3. '''
  4. Job统一入口文件
  5. python manager.py runjob -m Test
  6. python manager.py runjob -m test/index
  7. 第一个jobs/tasks/Test.py
  8. 第二个jobs/tasks/test/index.py
  9. '''
  10. class runJob(Command):
  11. capture_all_args = True #flask_script有一个未记录的capture_all_flags flag,它将把剩余的参数传递给Command.run方法
  12. def run(self, *args, **kwargs):
  13. args = sys.argv[2:]
  14. print(args)
  15. parser = argparse.ArgumentParser(add_help=True)
  16. parser.add_argument("-m", "--name", dest="name", metavar="name", help="指定job名", required=True)
  17. parser.add_argument("-a", "--act", dest="act", metavar="act", help="Job动作", required=False)
  18. parser.add_argument("-p", "--param", dest="param", nargs="*", metavar="param", help="业务参数", required=False)
  19. params = parser.parse_args(args)
  20. params_dict = params.__dict__
  21. print(params)
  22. print(params_dict)
  23. if "name" not in params_dict or not params_dict['name']:
  24. return self.tips()
  25. try:
  26. '''
  27. 类似java的反射,导入包
  28. from jobs.xxx.xxx import JobTask
  29. '''
  30. module_name = params_dict['name'].replace("/", ".")
  31. import_string = "jobs.tasks.%s" % (module_name)
  32. target = importlib.import_module(import_string)
  33. exit(target.JobTask().run(params_dict))
  34. except Exception as e:
  35. traceback.print_exc()
  36. pass
  37. def tips(self):
  38. tip_msg = '''
  39. 请正确的调度Job
  40. python manager.py runjob -m test ( jobs/tasks/test.py )
  41. python manager.py runjob -m test/index ( jobs/tasks/test/index.py )
  42. '''
  43. print( tip_msg )
  44. return
  45. pass

application.py

  1. from flask import Flask
  2. from flask_script import Manager
  3. import os
  4. app = Flask(__name__)
  5. manager = Manager(app)
  6. app.config.from_pyfile("config/base_setting.py")
  7. if "ops_config" in os.environ:
  8. app.config.from_pyfile("config/%s_setting.py" % (os.environ['ops_config']))
  9. pass

manager.py

  1. from flask_script import Server, Command
  2. from application import app, manager
  3. from jobs.launcher import runJob
  4. manager.add_command("runjob", runJob)
  5. def main():
  6. manager.run()
  7. pass
  8. if __name__ == "__main__":
  9. try:
  10. import sys
  11. sys.exit(main())
  12. pass
  13. except Exception as e:
  14. import traceback
  15. traceback.print_exc()
  16. pass
  17. pass

requirement.txt

  1. flask
  2. flask-script
  3. apscheduler
  4. Flask-APScheduler
  5. requests
  6. BeautifulSoup4

程序是这样运行的,如下:

requirement.txt是库文件,在部署开发环境时,这样使用:

pip install -r requirement.txt

manager.py是主要的管理类。程序的入口。

application.py为核心程序,管理Flask中的app,和flask_script的Manager,并且加载config下的配置文件。

这里开发环境会加载:

base_setting.py + local_setting.py

生产环境会加载:

base_setting.py + production_setting.py

 

launcher.py为任务的入口文件,主要是管理参数方面的问题。

在jobs文件夹下的tasks为具体的任务文件。 

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载