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): def fromfd(*args):
return socket(__socket.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 from eventlet.twistedutil import block_on as _block_on
def gethostbyname(name): return _block_on(reactor.resolve(name))
from twisted.internet import reactor
return _block_on(reactor.resolve(name)) def _gethostbyname_tpool(name):
else:
from eventlet import tpool from eventlet import tpool
def gethostbyname(*args, **kw): return tpool.execute(
return tpool.execute( __socket.gethostbyname, name)
__socket.gethostbyname, *args, **kw)
def getaddrinfo(*args, **kw):
return tpool.execute(
__socket.getaddrinfo, *args, **kw)
# def getaddrinfo(*args, **kw):
# return tpool.execute(
# __socket.getaddrinfo, *args, **kw)
#
# XXX there're few more blocking functions in socket # XXX there're few more blocking functions in socket
# XXX having a hub-independent way to access thread pool would be nice # 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 This makes running "green" functions in the main greenlet impossible but is useful
when you want to call reactor.run() yourself. 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): def __init__(self, mainloop_greenlet):
self.greenlet = mainloop_greenlet self.greenlet = mainloop_greenlet
self.waiters_by_greenlet = {} self.waiters_by_greenlet = {}