From 541dabb72f38152b5b9bacfb81149df348a38755 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Wed, 10 Dec 2008 16:27:23 +0600 Subject: [PATCH] fixed green.socket not to force hub setup at import time --- eventlet/green/socket.py | 30 ++++++++++++++++++------------ eventlet/hubs/twistedr.py | 5 +++++ 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/eventlet/green/socket.py b/eventlet/green/socket.py index 5bd3d28..f6551a3 100644 --- a/eventlet/green/socket.py +++ b/eventlet/green/socket.py @@ -10,21 +10,27 @@ from eventlet.greenio import GreenSocket as socket, GreenSSL as _GreenSSL def fromfd(*args): return socket(__socket.fromfd(*args)) -if type(get_hub()).__name__ == 'TwistedHub': +def gethostbyname(name): + if getattr(get_hub(), 'uses_twisted_reactor', None): + globals()['gethostbyname'] = _gethostbyname_twisted + else: + globals()['gethostbyname'] = _gethostbyname_tpool + return globals()['gethostbyname'](name) + +def _gethostbyname_twisted(name): + from twisted.internet import reactor from eventlet.twistedutil import block_on as _block_on - def gethostbyname(name): - from twisted.internet import reactor - return _block_on(reactor.resolve(name)) -else: + return _block_on(reactor.resolve(name)) + +def _gethostbyname_tpool(name): from eventlet import tpool - def gethostbyname(*args, **kw): - return tpool.execute( - __socket.gethostbyname, *args, **kw) - - def getaddrinfo(*args, **kw): - return tpool.execute( - __socket.getaddrinfo, *args, **kw) + return tpool.execute( + __socket.gethostbyname, name) +# def getaddrinfo(*args, **kw): +# return tpool.execute( +# __socket.getaddrinfo, *args, **kw) +# # XXX there're few more blocking functions in socket # XXX having a hub-independent way to access thread pool would be nice diff --git a/eventlet/hubs/twistedr.py b/eventlet/hubs/twistedr.py index 62dfe05..8aa90a3 100644 --- a/eventlet/hubs/twistedr.py +++ b/eventlet/hubs/twistedr.py @@ -66,6 +66,11 @@ class BaseTwistedHub(object): This makes running "green" functions in the main greenlet impossible but is useful when you want to call reactor.run() yourself. """ + + # XXX: remove me from here. make functions that depend on reactor + # XXX: hub's methods + uses_twisted_reactor = True + def __init__(self, mainloop_greenlet): self.greenlet = mainloop_greenlet self.waiters_by_greenlet = {}