专栏首页python3Tornado集成Apscheduler

Tornado集成Apscheduler

熟悉Python的人可能都知道,Apscheduler是python里面一款非常优秀的任务调度框架,这个框架是从鼎鼎大名的Quartz移植而来。

之前有用过Flask版本的Apscheduler做定时任务。刚好前不久接触了Tornado,顺便玩玩Tornado版本的Apscheduler。

本篇做了一个简单的Wdb页面,用于添加和删除定时任务,小伙伴们可以基于这个做一些扩展,比如把定时定时任务写入数据库,改变cron规则等等。

#新增任务(需要动态改变job_id的值)

http://localhost:8888/scheduler?job_id=1&action=add

#删除任务(需要动态改变job_id的值)

http://localhost:8888/scheduler?job_id=1&action=remov

执行结果可以在console看到

from datetime import datetime
from tornado.ioloop import IOLoop, PeriodicCallback
from tornado.web import RequestHandler, Application
from apscheduler.schedulers.tornado import TornadoScheduler


scheduler = None
job_ids   = []

# 初始化
def init_scheduler():
    global scheduler
    scheduler = TornadoScheduler()
    scheduler.start()
    print('[Scheduler Init]APScheduler has been started')

# 要执行的定时任务在这里
def task1(options):
    print('{} [APScheduler][Task]-{}'.format(datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f'), options))


class MainHandler(RequestHandler):
    def get(self):
        self.write('<a href="/scheduler?job_id=1&action=add">add job</a><br><a href="/scheduler?job_id=1&action=remove">remove job</a>')


class SchedulerHandler(RequestHandler):
    def get(self):
        global job_ids
        job_id = self.get_query_argument('job_id', None)
        action = self.get_query_argument('action', None)
        if job_id:
            # add
            if 'add' == action:
                if job_id not in job_ids:
                    job_ids.append(job_id)
                    scheduler.add_job(task1, 'interval', seconds=3, id=job_id, args=(job_id,))
                    self.write('[TASK ADDED] - {}'.format(job_id))
                else:
                    self.write('[TASK EXISTS] - {}'.format(job_id))
            # remove
            elif 'remove' == action:
                if job_id in job_ids:
                    scheduler.remove_job(job_id)
                    job_ids.remove(job_id)
                    self.write('[TASK REMOVED] - {}'.format(job_id))
                else:
                    self.write('[TASK NOT FOUND] - {}'.format(job_id))
        else:
            self.write('[INVALID PARAMS] INVALID job_id or action')


if __name__ == "__main__":
    routes    = [
        (r"/", MainHandler),
        (r"/scheduler/?", SchedulerHandler),
    ]
    init_scheduler()
    app       = Application(routes, debug=True)
    app.listen(8888)
    IOLoop.current().start()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python下定时任务框架APSched

    今天准备实现一个功能需要用到定时执行任务,所以就看到了Python的一个定时任务框架APScheduler,试了一下感觉还不错。

    py3study
  • Python任务调度模块APSched

    官网文档:http://apscheduler.readthedoc... API:http://apscheduler.readthedoc...

    py3study
  • python 循环

    py3study
  • 防火墙(9)——禁止某个时间段内访问我们的web

    首先我们要准备一台linux虚拟机。 随后我们要在我们的虚拟机上安装apache服务:yum install httpd -y 随后可以curl以下我们的主...

    gzq大数据
  • 米斯特白帽培训讲义(v2)漏洞篇 SQL 注入

    SQL 注入就是指,在输入的字符串中注入 SQL 语句,如果应用相信用户的输入而对输入的字符串没进行任何的过滤处理,那么这些注入进去的 SQL 语句就会被数据库...

    ApacheCN_飞龙
  • 结合EM快速解决复杂的配置问题(r4笔记第91天)

    图形工具在学习中一般是不作为推荐工具使用的,很多时候可能工作环境都是字符界面,远程连接,基本没有可能接触到图形工具,图形工具的好处真是一把双刃剑,功能丰富全面而...

    jeanron100
  • 2018年轻人租房大数据报告:没电梯?我们年轻人不租

    房子一直是安全感与归属感的象征,但这届年轻人对于“租房”与“稳定”的观念,已于往届产生了巨大的差异,他们提倡“房子是租来的,但生活不是”。

    钱塘数据
  • 互联网时代的社会语言学:基于SNS的文本数据挖掘

    2014年上半年,我在人人网实习了一段时间,期间得到了很多宝贵的数据,并做了一些还算有意义的事情,在这里和大家一块儿分享。感谢人人网提供的数据与工作环境,...

    机器学习AI算法工程
  • Android Support Palette使用详解

    良好的视觉设计是app成功所必不可少的, 而色彩设计体系是设计的基础构成. Palette包是支持包, 能够从图片中解析出突出的颜色, 从而帮助你创建出视觉迷人...

    砸漏
  • 逻辑回归 – Logistic regression

    逻辑回归(Logistic Regression)主要解决二分类问题,用来表示某件事情发生的可能性。

    easyAI

扫码关注云+社区

领取腾讯云代金券