Deferreds are Beautiful
1 from twisted.internet import reactor
2
3
4
5 def main():
6 d = O.doLongCalculation()
7 d.addCallback(gotResult)
8 return d
9
10 def gotResult(result):
11 print "result is: ", result
12
13 reactor.callWhenRunning(main)
14 reactor.run()
15
16
17
18
19
20 def main():
21 return O.doLongCalculation().addCallback(gotResult)
22
23 def gotResult(result):
24 print "result is: ", result
25
26 reactor.callWhenRunning(main)
27 reactor.run()
28
29
30
31
32
33 def main():
34 def gotResult(result):
35 print "result is: ", result
36 return O.doLongCalculation().addCallback(gotResult)
37
38
39
40
41
42 def main():
43 def gotResult(result):
44 print "result is: ", result
45 d = O.doLongCalculation()
46 d.addCallback(gotResult)
47 d.addCallback(lambda r: reactor.stop())
48 return d
49
50
51
52
53 import sys
54 from twisted.internet import reactor, defer
55 from twisted.python import log
56
57 def sleepyCalc(message):
58 log.msg("sleepyCalc: " + message)
59 d = defer.Deferred()
60 reactor.callLater(10.0, wakeyTime, d, message)
61 return d
62
63 def wakeyTime(d, message):
64 log.msg("wakeyTime: " + message)
65 d.callback(message)
66
67 def gotResult(result):
68 log.msg("gotResult: " + result)
69 return "-+- gotResult -+- " + result
70
71 def main(message):
72 log.msg("main message: " + message)
73 d=sleepyCalc(message)
74 d.addCallback(gotResult)
75 d.addCallback(sleepyCalc)
76 d.addCallback(gotResult)
77 log.msg("main exit: " + message)
78
79 log.startLogging(sys.stdout)
80
81 reactor.callWhenRunning(main, "FIRST")
82 reactor.callLater(2.0,main,"SECOND")
83 log.msg("away we go")
84 reactor.run()
85
86 log.msg("bye....")
DsageNg/TwistedTalk/120_Callbacks_and_Deferreds (last edited 2008-11-14 13:42:09 by anonymous)