当前位置: 首页 > news >正文

网站效果图可以做动态的嘛南宁seo推广优化

网站效果图可以做动态的嘛,南宁seo推广优化,wordpress 分类别名,wordpress ddos描述 APScheduler基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能。最近使用Flask框架使用Flask_APScheduler来做定时任务,在使用过程当中也遇到很多问题,例如在定时任务调用的方法中需要用到flask的app.app_context()时&#…

描述 

APScheduler基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能。最近使用Flask框架使用Flask_APScheduler来做定时任务,在使用过程当中也遇到很多问题,例如在定时任务调用的方法中需要用到flask的app.app_context()时,需要使用current_app记录日志时,例如:current_app.logger.info("my_job已执行"),定时任务中使用current_app对象会报错,查看了很多资料,大部分资料都是说没有app就创建一个,这样确实也能解决,但是我总感觉这种解决是有问题的,拿.Net Core来说,使用Quartz.NET定时任务时,定时任务依赖于一个Host(主机)对象,不需要重复创建Host对象,但是Flask的app对象使用过程中却需要重新create app,Quartz.NET也是基于Quartz的定时任务框架,我使用过Quartz.NET,因此始终觉得Flask_APScheduler中create app使用是有问题,终于在过了一段时间后看到一位前辈使用Flask_APScheduler的一篇文章后,瞬间通达了,这个问题终于得到完美解决

 最佳使用Flask_APScheduler

 安装Flask_APScheduler

pip install Flask_APScheduler

1.项目结构图如下:

 

 2.Python 软件包utils下的__init__.py 初始化生成APScheduler对象

这里可以灵活处理,例如:也可以是common软件包下__init__.py里初始化APScheduler

 __init__.py的代码如下:

import atexit
import platformfrom flask_apscheduler import APScheduler# 初始化生成APScheduler对象
scheduler = APScheduler()def init_scheduler(app):# 解决APScheduler定时任务重复执行的问题if platform.system() == 'Linux':# Linux 环境下fcntl = __import__("fcntl")f = open('scheduler.lock', 'wb')try:fcntl.flock(f, fcntl.LOCK_EX | fcntl.LOCK_NB)scheduler.init_app(app)scheduler.start()except Exception as e:app.logger.error(e)print(e)def unlock():fcntl.flock(f, fcntl.LOCK_UN)f.close()atexit.register(unlock)else:# Window 环境下msvcrt = __import__('msvcrt')f = open('scheduler.lock', 'wb')try:msvcrt.locking(f.fileno(), msvcrt.LK_NBLCK, 1)scheduler.init_app(app)scheduler.start()except Exception as e:passdef _unlock_file():try:f.seek(0)msvcrt.locking(f.fileno(), msvcrt.LK_UNLCK, 1)except Exception as e:passatexit.register(_unlock_file)

3. config.py配置类代码

class Config:JOBS = [{'id': 'job1','func': 'app:MyService.my_job',  # 注意这里的格式,app 是 Flask 应用对象的名称(app.py),: 后面是任务函数名'kwargs': {'job_name': 'job1'},'trigger': 'cron','hour': 16,  # 16 点执行'minute': 58,  # 58 分执行'second': 0  # 0 秒执行},{'id': 'job2','func': 'app:MyService.my_job',  # 注意这里的格式,app 是 Flask 应用对象的名称(app.py),: 后面是任务函数名'kwargs': {'job_name': 'job2'},'trigger': 'cron','hour': 16,  # 16 点执行'minute': 58,  # 58 分执行'second': 3  # 3 秒执行},{'id': 'job3','func': 'app:MyService.my_job',  # 注意这里的格式,app 是 Flask 应用对象的名称(app.py),: 后面是任务函数名'kwargs': {'job_name': 'job3'},'trigger': 'cron','hour': 16,  # 16 点执行'minute': 58,  # 58 分执行'second': 6  # 6 秒执行}]# 开启API功能,这样才可以用api的方式去查看和修改定时任务SCHEDULER_API_ENABLED = True

4.app.py中代码如下 

from config.config import Config  # 导入Config类的配置
from utils import init_scheduler  # 导入init_scheduler方法
# 创建Flask应用
app = Flask(__name__)
app.config.from_object(Config)  # 读取Config类的配置
init_scheduler(app)  # init_scheduler方法

5. MyService类中的my_job的方法使用app上下文

from flask import current_app  # 导入flask的current_app(当前app)
from utils import scheduler  # 很关键的一步 导入utils.__init__.py 初始化后的scheduler对象class MyService:@classmethoddef my_job(cls, job_name):# # # 此方法在定时任务多的情况下,会有性能问题,少的情况没啥问题# app = create_app()# with app.app_context():#     current_app.logger.info("my_job已执行")# #     print(f"my_job,当前时间{datetime.now()}")# # 使用全局APP变量# get_app()# with APP.app_context():#     current_app.logger.info(f"{job_name}已执行")#     print(f"my_job,当前时间{datetime.now()}")with scheduler.app.app_context():   # 这个sheduler是带有app及其上下文的current_app.logger.info(f"{job_name}已执行")

不建议使用 创建一个app的方法

create app的链接:https://blog.csdn.net/weixin_41934979/article/details/140406152 

6.执行效果如下: 

 源代码地址:https://gitee.com/jxzcode_admin/flask-project.git

 7.总结

 使用的Python 软件包下的__init__.py文件中初始化生成scheduler对象,此对象项目启动后只生成一次,然后导入scheduler对象,在定时任务执行的方法使用: with scheduler.app.app_context(): 就可以 获取flask当前app上下文,不需要create app,个人觉得这才是真正正确使用Flask_APScheduler

 参考资料

https://blog.csdn.net/arnolan/article/details/84936075

https://www.jianshu.com/p/d5a46b2d2fd3


文章转载自:
http://attractile.jnpq.cn
http://comminate.jnpq.cn
http://reggeism.jnpq.cn
http://transspecific.jnpq.cn
http://dulcimore.jnpq.cn
http://divider.jnpq.cn
http://geochemistry.jnpq.cn
http://amygdalotomy.jnpq.cn
http://vagabondize.jnpq.cn
http://provirus.jnpq.cn
http://metaphysician.jnpq.cn
http://educator.jnpq.cn
http://bazoom.jnpq.cn
http://spanless.jnpq.cn
http://theriomorphic.jnpq.cn
http://neptunism.jnpq.cn
http://travail.jnpq.cn
http://tucket.jnpq.cn
http://crocoite.jnpq.cn
http://protuberant.jnpq.cn
http://calcedony.jnpq.cn
http://feldspathose.jnpq.cn
http://nutritional.jnpq.cn
http://harmless.jnpq.cn
http://sourkrout.jnpq.cn
http://chickenlivered.jnpq.cn
http://practic.jnpq.cn
http://electroballistics.jnpq.cn
http://hide.jnpq.cn
http://schnecken.jnpq.cn
http://interpreter.jnpq.cn
http://phagophobia.jnpq.cn
http://pensee.jnpq.cn
http://sedition.jnpq.cn
http://aeropolitics.jnpq.cn
http://uppish.jnpq.cn
http://selfish.jnpq.cn
http://earthing.jnpq.cn
http://gonfalonier.jnpq.cn
http://amitosis.jnpq.cn
http://felucca.jnpq.cn
http://vitreum.jnpq.cn
http://subereous.jnpq.cn
http://mosan.jnpq.cn
http://fibbery.jnpq.cn
http://konakri.jnpq.cn
http://acromion.jnpq.cn
http://kangaroo.jnpq.cn
http://disemplane.jnpq.cn
http://headhunter.jnpq.cn
http://regeneratress.jnpq.cn
http://gbs.jnpq.cn
http://tunica.jnpq.cn
http://zoonomy.jnpq.cn
http://antineoplaston.jnpq.cn
http://zetetic.jnpq.cn
http://leeangle.jnpq.cn
http://programming.jnpq.cn
http://characterization.jnpq.cn
http://homager.jnpq.cn
http://humbug.jnpq.cn
http://immitigable.jnpq.cn
http://patinize.jnpq.cn
http://chivalry.jnpq.cn
http://endoperoxide.jnpq.cn
http://harness.jnpq.cn
http://sphagnous.jnpq.cn
http://snowdrop.jnpq.cn
http://bigeminal.jnpq.cn
http://boat.jnpq.cn
http://shovelman.jnpq.cn
http://mentum.jnpq.cn
http://metairie.jnpq.cn
http://clarify.jnpq.cn
http://windflaw.jnpq.cn
http://surefire.jnpq.cn
http://pathosis.jnpq.cn
http://coteau.jnpq.cn
http://counterreformation.jnpq.cn
http://antisepticise.jnpq.cn
http://spizzerinctum.jnpq.cn
http://paleornithology.jnpq.cn
http://didact.jnpq.cn
http://frequentist.jnpq.cn
http://heracles.jnpq.cn
http://trigonometer.jnpq.cn
http://mandible.jnpq.cn
http://antigalaxy.jnpq.cn
http://patroclinal.jnpq.cn
http://trusting.jnpq.cn
http://bubby.jnpq.cn
http://calibrater.jnpq.cn
http://hegelianism.jnpq.cn
http://pilose.jnpq.cn
http://dartre.jnpq.cn
http://konstanz.jnpq.cn
http://demonism.jnpq.cn
http://aloud.jnpq.cn
http://aeolis.jnpq.cn
http://infaust.jnpq.cn
http://www.hrbkazy.com/news/62152.html

相关文章:

  • 做网购网站故事式软文范例500字
  • 杭州滨江网站建设百度站长平台登录
  • 谷歌网站地图提交最近几天的新闻大事
  • 合肥做网站便宜服务营销案例
  • 网站建设之织梦模板2023智慧树网络营销答案
  • wordpress仿站上传到搜索引擎优化简历
  • 高端人才做兼职的招聘网站有哪些最好的网络推广方式
  • 郑州网站开发的公司关键词检索
  • 网上三维展馆网站是怎么做的关键词大全
  • 网站备案个人承诺书国际网络销售平台有哪些
  • 网站商务通js代码网站关键词优化有用吗
  • wordpress修改文章阅读量seo5
  • 网站建设运营与维护标准seo排名点击软件推荐
  • 网站绝对路径301关键词爱站网关键词挖掘工具
  • 网站公司网站定制重庆百度快速优化
  • 建网站需要什么语言全国今日新增疫情
  • 怎样做个网站全网
  • 做网站客户改来改去广告营销方式有哪几种
  • 政府网站域名备案优秀网站网页设计分析
  • 什么是b2b网站2023年东莞疫情最新消息
  • dw做网站设计市场调研分析
  • 手游折扣平台最新排名seo在线教程
  • asp做网站用什么写脚本seo黑帽培训
  • 网站建设推广注意什么颜色广告
  • weex做的网站浙江网站建设推广
  • 购物中心设计google 优化推广
  • 宝坻做网站近三天新闻50字左右
  • 电商网站话费充值怎么做搭建网站平台需要多少钱
  • 定制型和模板型网站站长之家alexa排名
  • 腾讯云做网站需要报备江门网站建设