-
Notifications
You must be signed in to change notification settings - Fork 288
/
inline-callbacks-2.py
66 lines (48 loc) · 1.49 KB
/
inline-callbacks-2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
from twisted.internet.defer import inlineCallbacks, Deferred, returnValue
@inlineCallbacks
def my_callbacks_1():
from twisted.internet import reactor
print('my_callbacks_1 first callback')
d = Deferred()
reactor.callLater(2, d.callback, None)
yield d
print('my_callbacks_1 second callback')
d = Deferred()
reactor.callLater(2, d.callback, None)
yield d
print('my_callbacks_1 third callback')
returnValue(1)
@inlineCallbacks
def my_callbacks_err():
from twisted.internet import reactor
print('my_callbacks_err first callback')
d = Deferred()
reactor.callLater(3, d.callback, None)
yield d
print('my_callbacks_err second callback')
d = Deferred()
reactor.callLater(3, d.callback, None)
yield d
print('my_callbacks_err third callback')
raise Exception('uh oh')
def got_result(res):
print('got result:', res)
def got_error(err):
print('got error:', err)
def run_callbacks():
d1 = my_callbacks_1()
d1.addCallbacks(got_result, got_error)
d2 = my_callbacks_err()
d2.addCallbacks(got_result, got_error)
from twisted.internet import reactor
def callbacks_finished(_):
callbacks_finished.count += 1
if callbacks_finished.count == 2:
print('all done')
reactor.stop()
callbacks_finished.count = 0
d1.addBoth(callbacks_finished)
d2.addBoth(callbacks_finished)
from twisted.internet import reactor
reactor.callWhenRunning(run_callbacks)
reactor.run()