Guest User

Untitled

a guest
Sep 19th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.18 KB | None | 0 0
  1. from twisted.internet.defer import maybeDeferred
  2.  
  3. def withDeferred(contextManager, f, *args, **kwargs):
  4. contextManager.__enter__()
  5.  
  6. def _exit(result):
  7. contextManager.__exit__(None, None, None)
  8. return result
  9.  
  10. def _exitEb(failure):
  11. if contextManager.__exit__(
  12. failure.type, failure.value, failure.stack):
  13. return failure
  14.  
  15. d = maybeDeferred(f, *args, **kwargs)
  16. d.addCallbacks(_exit, _exitEb)
  17.  
  18. return d
  19.  
  20. if __name__ == '__main__':
  21. from greplin import scales
  22. from twisted.internet.defer import Deferred
  23. from twisted.internet import reactor
  24.  
  25. STATS = scales.collection('/my-scales', scales.PmfStat('timing'))
  26.  
  27. def doStuff(_, arg):
  28. print "bar"
  29. d = Deferred()
  30. if arg < 3:
  31. d.addCallback(doStuff, arg + 1)
  32.  
  33. reactor.callLater(1, d.callback, True)
  34. return d
  35.  
  36. def done(_):
  37. print scales.getStats()
  38.  
  39. def doit():
  40. print "foo"
  41. d2 = withDeferred(STATS.timing.time(), doStuff, None, 0)
  42. d2.addCallback(done)
  43.  
  44. reactor.callLater(0, doit)
  45. reactor.callLater(2, doit)
  46. reactor.callLater(30, doit)
  47. reactor.callLater(20, doit)
  48. reactor.run()
Add Comment
Please, Sign In to add comment