Advertisement
Guest User

Twisted Countdown Etude 1

a guest
Dec 20th, 2012
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.39 KB | None | 0 0
  1. # A solution to exercise 1 of the Twisted tutorial at http://krondo.com/?p=1333
  2.  
  3. import time
  4.  
  5. class Countdown(object):
  6.  
  7.     def __init__(self, name, ticks, rate):
  8.         self.name, self.counter, self.rate = (name, ticks, rate)
  9.  
  10.     def count(self):
  11.             print '{}: {:>2} ticks left at {} sec/tick ...'.format(self.name, self.counter, self.rate)
  12.             self.counter -= 1
  13.  
  14. class CountdownPool(object):
  15.  
  16.     def __init__(self, *args):
  17.         self.pool = [Countdown(name, ticks, rate) for name, ticks, rate in args]
  18.         self.pending = len(self.pool)
  19.  
  20.     def start(self):
  21.         self.startTime = time.time()
  22.         for ctdn in self.pool:
  23.             self.count(ctdn)
  24.  
  25.     def count(self, ctdn):
  26.         if ctdn.counter > 0:
  27.             ctdn.count()
  28.             reactor.callLater(ctdn.rate, self.count, ctdn)
  29.         else:
  30.             print 'Counter {} complete! ({:.3f} sec)'.format(ctdn.name, time.time()-self.startTime)
  31.             self.pending -= 1
  32.             if not self.pending: reactor.stop()
  33.  
  34.  
  35.            
  36. from twisted.internet import reactor
  37.  
  38. pool = CountdownPool(['one', 5, 1.0], ['two', 13, .3], ['tri', 8, .8])
  39. reactor.callWhenRunning(pool.start)
  40.  
  41. print 'Start!'
  42. reactor.run()
  43. print 'Stop!'
  44.  
  45.  
  46. #### Output ####
  47.  
  48. Start!
  49. one:  5 ticks left at 1.0 sec/tick ...
  50. two: 13 ticks left at 0.3 sec/tick ...
  51. tri:  8 ticks left at 0.8 sec/tick ...
  52. two: 12 ticks left at 0.3 sec/tick ...
  53. two: 11 ticks left at 0.3 sec/tick ...
  54. tri:  7 ticks left at 0.8 sec/tick ...
  55. two: 10 ticks left at 0.3 sec/tick ...
  56. one:  4 ticks left at 1.0 sec/tick ...
  57. two:  9 ticks left at 0.3 sec/tick ...
  58. two:  8 ticks left at 0.3 sec/tick ...
  59. tri:  6 ticks left at 0.8 sec/tick ...
  60. two:  7 ticks left at 0.3 sec/tick ...
  61. one:  3 ticks left at 1.0 sec/tick ...
  62. two:  6 ticks left at 0.3 sec/tick ...
  63. tri:  5 ticks left at 0.8 sec/tick ...
  64. two:  5 ticks left at 0.3 sec/tick ...
  65. two:  4 ticks left at 0.3 sec/tick ...
  66. one:  2 ticks left at 1.0 sec/tick ...
  67. two:  3 ticks left at 0.3 sec/tick ...
  68. tri:  4 ticks left at 0.8 sec/tick ...
  69. two:  2 ticks left at 0.3 sec/tick ...
  70. two:  1 ticks left at 0.3 sec/tick ...
  71. Counter two complete! (3.901 sec)
  72. tri:  3 ticks left at 0.8 sec/tick ...
  73. one:  1 ticks left at 1.0 sec/tick ...
  74. tri:  2 ticks left at 0.8 sec/tick ...
  75. Counter one complete! (5.001 sec)
  76. tri:  1 ticks left at 0.8 sec/tick ...
  77. Counter tri complete! (6.402 sec)
  78. Stop!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement