fixed green.socket not to force hub setup at import time

This commit is contained in:
Denis Bilenko
2008-12-10 16:27:23 +06:00
parent 856b5eecfd
commit 541dabb72f
2 changed files with 23 additions and 12 deletions

View File

@@ -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':
from eventlet.twistedutil import block_on as _block_on
def gethostbyname(name):
from twisted.internet import reactor
return _block_on(reactor.resolve(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
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)
__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

View File

@@ -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 = {}