twisted 定时处理(递归调用callLater)(protocol内)

本文介绍了一种利用Twisted框架中的TimeoutMixin和callLater方法实现定时任务的方法,并提供了一个具体的Python代码实例,展示了如何通过递归调用实现周期性的定时处理。

补注 2014-4-7: 这个方法作废,递归调用不可取

在protocol内使用--通过递归调用,同时使用异步的callLater,实现定时处理,***并通过设置timeout参数实现立即触发处理 ->>如果调用policies.TimeoutMixin.setTimeout(None)就立即触发执行callLater的函数

# -*- coding: utf-8 -*-

"""代码片段
通过递归调用,同时使用异步的callLater,实现定时处理
"""
class FPStatProtocol(policies.TimeoutMixin, protocol.Protocol): # from twisted.protocols import policies
    def connectionMade(self):
        self.msg("connectionMade")
        self.ping() # 心跳
        
    def ping(self):                                  #*1
        self.msg('PING')
        self.setTimeout(20)
        self.sendMessage(0x00) # 心跳消息
        self.dcPing = self.callLater(60, self.ping)  #*2 这句是异步递归调用,延时60s,其实也就是reactor.callLater(interval, fun), 用这个也行

    def sendMessage(self, cmdno, data='', version=0x01):
        data = ST_2sBBH.pack("TC", version, cmdno, len(data)) + data
        self.write(data)

.和上面一样, 下面完整的定时器

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import os, sys

try:
    open("./var/run/mytask.pid", "w").write("%s\n" % os.getpid())
except Exception as e:
    sys.exit(repr(e))
    
from twisted.internet import reactor

import functools

# 定时调用
def ping(timeout):
    # do something 
    print "..."
    cb = functools.partial(ping, timeout=timeout)
    reactor.callLater(timeout, cb)

if __name__ == "__main__":
    ping(timeout=5)
    reactor.run()

转载于:https://my.oschina.net/1123581321/blog/160654

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值