python 定时器

378 阅读2分钟

一、基础概念

在实际应用中,我们需要使用定时器去触发一些事件,比如我在实际工作中写一个模拟入会的机器人,需要当加入会议成功后,维持和服务器的心跳。

Timer最基本的理解是定时器,可以启动多个定时任务,定时的去执行任务,这些定时器任务是异步执行,所以不存在等待顺序执行顺序。

定时器只能执行一次,如果需要重复执行,需要重新添加任务。

导入模块

from threading import Timer
timer = threading.Timer(interval, function, args=None, kwargs=None)

参数介绍:

interval — 定时器间隔,间隔多少秒之后启动定时器任务(单位:秒);

function — 线程函数;

args — 线程参数,可以传递元组类型数据,默认为空(缺省参数);

kwargs — 线程参数,可以传递字典类型数据,默认为空(缺省参数);

二、实际代码

1、当请求心跳成功后才开始定时器,使用timer.start()

@retry()
def heart_beat(self):
    # 维持心跳
    url = self.env + "/ccm/v1/member/heartbeat?app_id=winPcAppid&room_id=" + str(self.roomId)
    payload = json.dumps({
        "tid": "rongxintoken154153",
        "memberId": self.memberId,
        "memberSessionId": self.memberSessionId
    })
    headers = {
        'Content-Type': 'application/json'
    }
    response = requests.request("POST", url, headers=headers, data=payload)

    if response.json()["error"]["code"] == 0:
        # 返回成功才开始定时器
        timer = threading.Timer(30, self.heart_beat)  # 每30秒运行,心跳默认4分钟超时
        timer.start()
        print("%s 心跳:" % self.memberId, response.json())
    else:
        # 推出维持心跳
        print("心跳维持失败:", response.json())
        # timer.cancel()
        print("退出维持心跳。开始会议结束")

2、当请求心跳失败后取消定时器,使用timer.cancel()

@retry()
def heart_beat(self):
    # 维持心跳
    url = self.env + "/ccm/v1/member/heartbeat?app_id=winPcAppid&room_id=" + str(self.roomId)
    payload = json.dumps({
        "tid": "rongxintoken154153",
        "memberId": self.memberId,
        "memberSessionId": self.memberSessionId
    })
    headers = {
        'Content-Type': 'application/json'
    }
    response = requests.request("POST", url, headers=headers, data=payload)
    timer = threading.Timer(30, self.heart_beat)  # 每30秒运行,心跳默认4分钟超时
    if response.json()["error"]["code"] == 0:

        timer.start()
        print("%s 心跳:" % self.memberId, response.json())
    else:
        # 推出维持心跳
        print("心跳维持失败:", response.json())
        # 返回不成功,定时器销毁
        timer.cancel()
        print("退出维持心跳。开始会议结束")