1 from eventlet.hubs import get_hub
2 from eventlet import spawn, getcurrent
4 def block_on(deferred):
9 if getcurrent() is cur[0]:
10 synchronous.append((value, None))
16 if getcurrent() is cur[0]:
17 synchronous.append((None, fail))
19 fail.throwExceptionIntoGenerator(cur[0])
20 deferred.addCallbacks(cb, eb)
22 result, fail = synchronous[0]
27 return get_hub().switch()
31 def _putResultInDeferred(deferred, f, args, kwargs):
33 result = f(*args, **kwargs)
35 from twisted.python import failure
39 deferred.callback(result)
41 def deferToGreenThread(func, *args, **kwargs):
42 from twisted.internet import defer
44 spawn(_putResultInDeferred, d, func, args, kwargs)
47 def callInGreenThread(func, *args, **kwargs):
48 return spawn(func, *args, **kwargs)
51 if __name__=='__main__':
54 num = int(sys.argv[1])
56 sys.exit('Supply number of test as an argument, 0, 1, 2 or 3')
57 from twisted.internet import reactor
59 print(block_on(reactor.resolver.getHostByName('www.google.com')))
60 print(block_on(reactor.resolver.getHostByName('###')))
65 from eventlet.api import sleep
68 print('done sleeping..')
70 from eventlet.twistedutil import join_reactor
74 from eventlet.twistedutil import join_reactor
75 print("fails because it's impossible to use block_on from the mainloop")
76 reactor.callLater(0, test)