做项目的自动化过程中,经常听到job、接口、MQ消息相关的名词。
就想把这些个东西搞明白,定义、区别、作用,实现等。
1、job
是定时任务。在某个时间段、某个时间点执行。
定时任务中可以调用接口,可以发送Mq消息。
例如:每天早上六点喊我起床就是一个定时任务,就算是一个job了。
python中实现job:
"""1.循环sleep实现"""
from datetime import datetime
import time
# 每n秒执行一次
def timer(n):
while True:
print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
time.sleep(n)
# 5s
timer(5)
"""2.threading模块中的Timer实现job"""
from datetime import datetime
from threading import Timer
# 打印时间函数
def printTime(inc):
print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
t = Timer(inc, printTime, (inc,))
t.start()
# 5s
printTime(5)
"""
3.使用sched模块
(1)生成调度器:
s = sched.scheduler(time.time,time.sleep)
第一个参数是一个可以返回时间戳的函数,第二个参数可以在定时未到达之前阻塞。
(2)加入调度事件
其实有 enter、enterabs 等等,我们以 enter 为例子。
s.enter(x1,x2,x3,x4)
四个参数分别为:间隔事件、优先级(用于同时间到达的两个事件同时执行时定序)、被调用触发的函数,给触发函数的参数(注意:一定要以 tuple 给,如果只有一个参数就(xx,))
(3)运行
s.run()
注意 sched 模块不是循环的,一次调度被执行后就 Over 了,如果想再执行,请再次 enter
"""
import sched
import time
from datetime import datetime
# 初始化sched模块的 scheduler 类
# 第一个参数是一个可以返回时间戳的函数,第二个参数可以在定时未到达之前阻塞。
schedule = sched.scheduler(time.time, time.sleep)
# 被周期性调度触发的函数
def printTime(inc):
print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
schedule.enter(inc, 0, printTime, (inc,))
# 默认参数60s
def main(inc=60):
# enter四个参数分别为:间隔事件、优先级(用于同时间到达的两个事件同时执行时定序)、被调用触发的函数,
# 给该触发函数的参数(tuple形式)
schedule.enter(0, 0, printTime, (inc,))
schedule.run()
# 10s 输出一次
main(10)
"""
4.APScheduler定时框架
pip install apscheduler
具体的博文可看:https://www.cnblogs.com/fengff/p/11011000.html
"""
from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime
# 输出时间
def job():
print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
# BlockingScheduler
scheduler = BlockingScheduler()
scheduler.add_job(job, 'cron', day_of_week='1-5', hour=16, minute=7)
scheduler.start()
2、接口
输入请求数据,进行逻辑处理,然后返回响应数据。一般都是数据库的CRUD操作。
3、Mq消息
分为生产者、消费者、消息。
以上完成了job、接口、Q消息的基本阐述。
版权声明:本文为u012205706原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。