Job、接口、Q消息

  • Post author:
  • Post category:其他


做项目的自动化过程中,经常听到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 版权协议,转载请附上原文出处链接和本声明。