twisted中的定时器

先看一个简单的延迟调用(一次定时器)
from twisted.internet import reactor
def f(s):
    print "this will run 3.5 seconds after it was scheduled: %s" % s
reactor.callLater(3.5, f, "hello, world")
# f() will only be called if the event loop is started.
reactor.run()

如果函数的结果很重要或者想知道调用过程中发生了上面,那么twisted.internet.task.deferLater 属性能够创建一个Deferred 并做一个延时调用:
from twisted.internet import task
from twisted.internet import reactor

def f(s):
    return "This will run 3.5 seconds after it was scheduled: %s" % s
d = task.deferLater(reactor, 3.5, f, "hello, world")
def called(result):
    print result
d.addCallback(called)

reactor.run()

如果您有一个任务需要每隔X秒执行一次,那么我们使用twisted.internet.task.LoopingCall:
from twisted.internet import task
from twisted.internet import reactor

def runEverySecond():
    print "a second has passed"
l = task.LoopingCall(runEverySecond)
l.start(1.0) # call every second
# l.stop() will stop the looping calls
reactor.run()

另外,我们还可以取消一个任务:
from twisted.internet import reactor

def f():
     print "I'll never run."

callID = reactor.callLater(5, f)
callID.cancel()   #cancel the task
reactor.run()

所有的任务都是以 reactor.run() 开始的。

与同步模型相比,异步模型的优势在如下情况下会得到发挥:

1.有大量的任务,因此在一个时刻至少有一个任务要运行
2.任务执行大量的I/O操作,这样同步模型就会在因为任务阻塞而浪费大量的时间
3.任务之间相互独立,以至于任务内部的交互很少。

转载于:https://my.oschina.net/u/1032854/blog/187938

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值