def install_optimal_reactor(): """ Try to install the optimal Twisted reactor for platform. """ import sys if 'bsd' in sys.platform or sys.platform.startswith('darwin'): try: v = sys.version_info if v[0] == 1 or (v[0] == 2 and v[1] < 6) or (v[0] == 2 and v[1] == 6 and v[2] < 5): raise Exception("Python version too old (%s)" % sys.version) from twisted.internet import kqreactor kqreactor.install() except Exception, e: print """ WARNING: Running on BSD or Darwin, but cannot use kqueue Twisted reactor. => %s To use the kqueue Twisted reactor, you will need: 1. Python >= 2.6.5 or PyPy > 1.8 2. Twisted > 12.0 Note the use of >= and >. Will let Twisted choose a default reactor (potential performance degradation). """ % str(e) pass
def installCommonReactor(): try: from twisted.internet import kqreactor kqreactor.install() return except (KeyboardInterrupt, SystemExit): raise except: pass try: from twisted.internet import epollreactor epollreactor.install() return except (KeyboardInterrupt, SystemExit): raise except: pass try: from twisted.internet import pollreactor pollreactor.install() return except (KeyboardInterrupt, SystemExit): raise except: pass
def installCommonReactor(): try: from twisted.internet import kqreactor kqreactor.install() return except (KeyboardInterrupt, SystemExit): raise except: pass try: from twisted.internet import epollreactor epollreactor.install() return except (KeyboardInterrupt, SystemExit): raise except: pass try: from twisted.internet import pollreactor pollreactor.install() return except (KeyboardInterrupt, SystemExit): raise except: pass
def install_optimal_reactor(): """ Try to install the optimal Twisted reactor for platform. """ import sys if 'bsd' in sys.platform or sys.platform.startswith('darwin'): try: v = sys.version_info if v[0] == 1 or (v[0] == 2 and v[1] < 6) or (v[0] == 2 and v[1] == 6 and v[2] < 5): raise Exception("Python version too old (%s)" % sys.version) from twisted.internet import kqreactor kqreactor.install() except Exception, e: print """ WARNING: Running on BSD or Darwin, but cannot use kqueue Twisted reactor. => %s To use the kqueue Twisted reactor, you will need: 1. Python >= 2.6.5 or PyPy > 1.8 2. Twisted > 12.0 Note the use of >= and >. Will let Twisted choose a default reactor (potential performance degradation). """ % str(e) pass
def install_optimal_reactor(verbose = False): """ Try to install the optimal Twisted reactor for platform. :param verbose: If ``True``, print what happens. :type verbose: bool """ import sys from twisted.python import reflect if 'twisted.internet.reactor' in sys.modules: current_reactor = reflect.qual(sys.modules['twisted.internet.reactor'].__class__).split('.')[-1] else: current_reactor = None if 'bsd' in sys.platform or sys.platform.startswith('darwin'): if current_reactor != 'KQueueReactor': try: v = sys.version_info if v[0] == 1 or v[0] == 2 and v[1] < 6 or v[0] == 2 and v[1] == 6 and v[2] < 5: raise Exception('Python version too old ({0}) to use kqueue reactor'.format(sys.version)) from twisted.internet import kqreactor kqreactor.install() except Exception as e: print 'WARNING: Running on *BSD or MacOSX, but cannot install kqueue Twisted reactor ({0}).'.format(e) else: if verbose: print 'Running on *BSD or MacOSX and optimal reactor (kqueue) was installed.' elif verbose: print 'Running on *BSD or MacOSX and optimal reactor (kqueue) already installed.' elif sys.platform in ('win32',): if current_reactor != 'IOCPReactor': try: from twisted.internet.iocpreactor import reactor as iocpreactor iocpreactor.install() except Exception as e: print 'WARNING: Running on Windows, but cannot install IOCP Twisted reactor ({0}).'.format(e) else: if verbose: print 'Running on Windows and optimal reactor (ICOP) was installed.' elif verbose: print 'Running on Windows and optimal reactor (ICOP) already installed.' elif sys.platform.startswith('linux'): if current_reactor != 'EPollReactor': try: from twisted.internet import epollreactor epollreactor.install() except Exception as e: print 'WARNING: Running on Linux, but cannot install Epoll Twisted reactor ({0}).'.format(e) else: if verbose: print 'Running on Linux and optimal reactor (epoll) was installed.' elif verbose: print 'Running on Linux and optimal reactor (epoll) already installed.' else: try: from twisted.internet import default as defaultreactor defaultreactor.install() except Exception as e: print 'WARNING: Could not install default Twisted reactor for this platform ({0}).'.format(e) return
def set_reactor(): import platform REACTORNAME = DEFAULT_REACTORS.get(platform.system(), "select") # get the reactor in here if REACTORNAME == "kqueue": from twisted.internet import kqreactor kqreactor.install() elif REACTORNAME == "epoll": from twisted.internet import epollreactor epollreactor.install() elif REACTORNAME == "poll": from twisted.internet import pollreactor pollreactor.install() else: # select is the default from twisted.internet import selectreactor selectreactor.install() from twisted.internet import reactor set_reactor = lambda: reactor return reactor
def install_reactor(use_asyncio=False): """ Borrowed from https://github.com/crossbario/autobahn-python/blob/master/autobahn/twisted/choosereactor.py """ current_reactor = current_reactor_klass() if current_reactor: return current_reactor if use_asyncio: #files=132, cost=186.99198293685913 seconds, speed=2007542.4309862417 import asyncio import uvloop #asyncio.set_event_loop_policy(uvloop.EventLoopPolicy()) asyncio.set_event_loop(uvloop.new_event_loop()) from twisted.internet import asyncioreactor asyncioreactor.install() elif 'bsd' in sys.platform or sys.platform.startswith('darwin'): # This reactor is faster in MacOS # files=132, cost=61.64284586906433 seconds, speed=6089828.182127992 # files=132, cost=58.344452142715454 seconds, speed=6434105.149907892 # *BSD and MacOSX # from twisted.internet import kqreactor kqreactor.install() elif sys.platform in ['win32']: from twisted.internet.iocpreactor import reactor as iocpreactor iocpreactor.install() elif sys.platform.startswith('linux'): from twisted.internet import epollreactor epollreactor.install() else: from twisted.internet import selectreactor selectreactor.install() from twisted.internet import reactor return reactor
def run_twisted(host, port, barrier, profile): if 'bsd' in sys.platform or sys.platform.startswith('darwin'): from twisted.internet import kqreactor kqreactor.install() elif sys.platform in ['win32']: from twisted.internet.iocpreactor import reactor as iocpreactor iocpreactor.install() elif sys.platform.startswith('linux'): from twisted.internet import epollreactor epollreactor.install() else: from twisted.internet import default as defaultreactor defaultreactor.install() from twisted.web.server import Site from twisted.web.resource import Resource from twisted.internet import reactor class TestResource(Resource): def __init__(self, name): super().__init__() self.name = name self.isLeaf = name is not None def render_GET(self, request): txt = 'Hello, ' + self.name request.setHeader(b'Content-Type', b'text/plain; charset=utf-8') return txt.encode('utf8') def getChild(self, name, request): return TestResource(name=name.decode('utf-8')) class PrepareResource(Resource): isLeaf = True def render_GET(self, request): gc.collect() return b'OK' class StopResource(Resource): isLeaf = True def render_GET(self, request): reactor.callLater(0.1, reactor.stop) return b'OK' root = Resource() root.putChild(b'test', TestResource(None)) root.putChild(b'prepare', PrepareResource()) root.putChild(b'stop', StopResource()) site = Site(root) reactor.listenTCP(port, site, interface=host) barrier.wait() reactor.run()
def run_twisted(host, port, barrier, profile): if 'bsd' in sys.platform or sys.platform.startswith('darwin'): from twisted.internet import kqreactor kqreactor.install() elif sys.platform in ['win32']: from twisted.internet.iocpreactor import reactor as iocpreactor iocpreactor.install() elif sys.platform.startswith('linux'): from twisted.internet import epollreactor epollreactor.install() else: from twisted.internet import default as defaultreactor defaultreactor.install() from twisted.web.server import Site from twisted.web.resource import Resource from twisted.internet import reactor class TestResource(Resource): def __init__(self, name): super().__init__() self.name = name self.isLeaf = name is not None def render_GET(self, request): txt = 'Hello, ' + self.name request.setHeader(b'Content-Type', b'text/plain; charset=utf-8') return txt.encode('utf8') def getChild(self, name, request): return TestResource(name=name.decode('utf-8')) class PrepareResource(Resource): isLeaf = True def render_GET(self, request): gc.collect() return b'OK' class StopResource(Resource): isLeaf = True def render_GET(self, request): reactor.callLater(0.1, reactor.stop) return b'OK' root = Resource() root.putChild(b'test', TestResource(None)) root.putChild(b'prepare', PrepareResource()) root.putChild(b'stop', StopResource()) site = Site(root) reactor.listenTCP(port, site, interface=host) barrier.wait() reactor.run()
def install_reactor(): if is_windows(): from twisted.internet import iocpreactor iocpreactor.install() elif is_osx(): from twisted.internet import kqreactor kqreactor.install() from twisted.internet import reactor from golem.core.variables import REACTOR_THREAD_POOL_SIZE reactor.suggestThreadPoolSize(REACTOR_THREAD_POOL_SIZE) return reactor
def install_reactor(): # BSD and Mac OS X, kqueue try: from twisted.internet import kqreactor as event_reactor except: # Linux 2.6 and newer, epoll try: from twisted.internet import epollreactor as event_reactor except: # Linux pre-2.6, poll from twisted.internet import pollreactor as event_reactor event_reactor.install() from twisted.internet import reactor return reactor
def install_reactor(): # BSD and Mac OS X, kqueue try: from twisted.internet import kqreactor as event_reactor except: # Linux 2.6 and newer, epoll try: from twisted.internet import epollreactor as event_reactor except: # Linux pre-2.6, poll from twisted.internet import pollreactor as event_reactor event_reactor.install() from twisted.internet import reactor return reactor
def set_reactor(): import platform REACTORNAME = DEFAULT_REACTORS.get(platform.system(), 'select') #get the reactor in here if REACTORNAME == 'kqueue': from twisted.internet import kqreactor kqreactor.install() elif REACTORNAME == 'epoll': from twisted.internet import epollreactor epollreactor.install() elif REACTORNAME == 'poll': from twisted.internet import pollreactor pollreactor.install() else: #select is the default from twisted.internet import selectreactor selectreactor.install() from twisted.internet import reactor set_reactor = lambda: reactor return reactor
def set_reactor(self): """sets the reactor up""" #get the reactor in here if self.REACTORNAME == 'kqueue': from twisted.internet import kqreactor kqreactor.install() elif self.REACTORNAME == 'epoll': from twisted.internet import epollreactor epollreactor.install() elif self.REACTORNAME == 'poll': from twisted.internet import pollreactor pollreactor.install() else: #select is the default from twisted.internet import selectreactor selectreactor.install() from twisted.internet import reactor self.reactor = reactor #shouldn't have to, but sys.exit is scary self.reactor.callWhenRunning(self._protect) #prevent this from being called ever again self.set_reactor = lambda: None
def set_reactor(self): """sets the reactor up""" #get the reactor in here if self.REACTORNAME == 'kqueue': from twisted.internet import kqreactor kqreactor.install() elif self.REACTORNAME == 'epoll': from twisted.internet import epollreactor epollreactor.install() elif self.REACTORNAME == 'poll': from twisted.internet import pollreactor pollreactor.install() else: #select is the default from twisted.internet import selectreactor selectreactor.install() from twisted.internet import reactor self.reactor = reactor #shouldn't have to, but sys.exit is scary self.reactor.callWhenRunning(self._protect) #prevent this from being called ever again self.set_reactor = lambda: None
def install_twisted_reactor(): """ Install the Twisted reactor designed for this platform. """ import sys if 'bsd' in sys.platform or sys.platform.startswith('darwin'): from twisted.internet import kqreactor kqreactor.install() elif sys.platform in ['win32']: from twisted.internet.iocpreactor import reactor as iocpreactor iocpreactor.install() elif sys.platform.startswith('linux'): from twisted.internet import epollreactor epollreactor.install() else: from twisted.internet import default as defaultreactor defaultreactor.install() from twisted.internet import reactor return reactor
import sys import thread from monocle import launch # prefer fast reactors # FIXME: this should optionally refuse to use slow ones if not "twisted.internet.reactor" in sys.modules: try: from twisted.internet import epollreactor epollreactor.install() except: try: from twisted.internet import kqreactor kqreactor.install() except: try: from twisted.internet import pollreactor pollreactor.install() except: pass from twisted.internet import reactor try: from twisted.internet.error import ReactorNotRunning except ImportError: ReactorNotRunning = RuntimeError # thanks to Peter Norvig def singleton(object, message="singleton class already instantiated",
import psutil p = psutil.Process() print p.cpu_affinity() p.cpu_affinity([0]) print p.cpu_affinity() from twisted.internet import kqreactor kqreactor.install() #from twisted.internet import selectreactor #selectreactor.install() #from twisted.internet import pollreactor #pollreactor.install() from twisted.internet import protocol, reactor, endpoints class Echo(protocol.Protocol): def connectionMade(self): self.transport.registerProducer(self.transport, True) def dataReceived(self, data): self.transport.write(data) class EchoFactory(protocol.Factory): def buildProtocol(self, addr): p = Echo() return p endpoints.serverFromString(reactor,
def install_optimal_reactor(verbose=False): """ Try to install the optimal Twisted reactor for platform. :param verbose: If ``True``, print what happens. :type verbose: bool """ import sys from twisted.python import reflect import txaio txaio.use_twisted() # just to be sure... # XXX should I configure txaio.config.loop in here too, or just in # install_reactor()? (I am: see bottom of function) # determine currently installed reactor, if any ## if 'twisted.internet.reactor' in sys.modules: current_reactor = reflect.qual( sys.modules['twisted.internet.reactor'].__class__).split('.')[-1] else: current_reactor = None # depending on platform, install optimal reactor ## if 'bsd' in sys.platform or sys.platform.startswith('darwin'): # *BSD and MacOSX ## if current_reactor != 'KQueueReactor': try: v = sys.version_info if v[0] == 1 or (v[0] == 2 and v[1] < 6) or (v[0] == 2 and v[1] == 6 and v[2] < 5): raise Exception( "Python version too old ({0}) to use kqueue reactor". format(sys.version)) from twisted.internet import kqreactor kqreactor.install() except Exception as e: print( "WARNING: Running on *BSD or MacOSX, but cannot install kqueue Twisted reactor ({0})." .format(e)) else: if verbose: print( "Running on *BSD or MacOSX and optimal reactor (kqueue) was installed." ) else: if verbose: print( "Running on *BSD or MacOSX and optimal reactor (kqueue) already installed." ) elif sys.platform in ['win32']: # Windows ## if current_reactor != 'IOCPReactor': try: from twisted.internet.iocpreactor import reactor as iocpreactor iocpreactor.install() except Exception as e: print( "WARNING: Running on Windows, but cannot install IOCP Twisted reactor ({0})." .format(e)) else: if verbose: print( "Running on Windows and optimal reactor (ICOP) was installed." ) else: if verbose: print( "Running on Windows and optimal reactor (ICOP) already installed." ) elif sys.platform.startswith('linux'): # Linux ## if current_reactor != 'EPollReactor': try: from twisted.internet import epollreactor epollreactor.install() except Exception as e: print( "WARNING: Running on Linux, but cannot install Epoll Twisted reactor ({0})." .format(e)) else: if verbose: print( "Running on Linux and optimal reactor (epoll) was installed." ) else: if verbose: print( "Running on Linux and optimal reactor (epoll) already installed." ) else: try: from twisted.internet import default as defaultreactor defaultreactor.install() except Exception as e: print( "WARNING: Could not install default Twisted reactor for this platform ({0})." .format(e)) from twisted.internet import reactor txaio.config.loop = reactor
def install_optimal_reactor(require_optimal_reactor=True): """ Try to install the optimal Twisted reactor for this platform: - Linux: epoll - BSD/OSX: kqueue - Windows: iocp - Other: select Notes: - This function exists, because the reactor types selected based on platform in `twisted.internet.default` are different from here. - The imports are inlined, because the Twisted code base is notorious for importing the reactor as a side-effect of merely importing. Hence we postpone all importing. See: http://twistedmatrix.com/documents/current/core/howto/choosing-reactor.html#reactor-functionality :param require_optimal_reactor: If ``True`` and the desired reactor could not be installed, raise ``ReactorAlreadyInstalledError``, else fallback to another reactor. :type require_optimal_reactor: bool :returns: The Twisted reactor in place (`twisted.internet.reactor`). """ log = txaio.make_logger() # determine currently installed reactor, if any # current_reactor = current_reactor_klass() # depending on platform, install optimal reactor # if 'bsd' in sys.platform or sys.platform.startswith('darwin'): # *BSD and MacOSX # if current_reactor != 'KQueueReactor': if current_reactor is None: try: from twisted.internet import kqreactor kqreactor.install() except: log.warn('Running on *BSD or MacOSX, but cannot install kqueue Twisted reactor: {tb}', tb=traceback.format_exc()) else: log.debug('Running on *BSD or MacOSX and optimal reactor (kqueue) was installed.') else: log.warn('Running on *BSD or MacOSX, but cannot install kqueue Twisted reactor, because another reactor ({klass}) is already installed.', klass=current_reactor) if require_optimal_reactor: raise ReactorAlreadyInstalledError() else: log.debug('Running on *BSD or MacOSX and optimal reactor (kqueue) already installed.') elif sys.platform in ['win32']: # Windows # if current_reactor != 'IOCPReactor': if current_reactor is None: try: from twisted.internet.iocpreactor import reactor as iocpreactor iocpreactor.install() except: log.warn('Running on Windows, but cannot install IOCP Twisted reactor: {tb}', tb=traceback.format_exc()) else: log.debug('Running on Windows and optimal reactor (ICOP) was installed.') else: log.warn('Running on Windows, but cannot install IOCP Twisted reactor, because another reactor ({klass}) is already installed.', klass=current_reactor) if require_optimal_reactor: raise ReactorAlreadyInstalledError() else: log.debug('Running on Windows and optimal reactor (ICOP) already installed.') elif sys.platform.startswith('linux'): # Linux # if current_reactor != 'EPollReactor': if current_reactor is None: try: from twisted.internet import epollreactor epollreactor.install() except: log.warn('Running on Linux, but cannot install Epoll Twisted reactor: {tb}', tb=traceback.format_exc()) else: log.debug('Running on Linux and optimal reactor (epoll) was installed.') else: log.warn('Running on Linux, but cannot install Epoll Twisted reactor, because another reactor ({klass}) is already installed.', klass=current_reactor) if require_optimal_reactor: raise ReactorAlreadyInstalledError() else: log.debug('Running on Linux and optimal reactor (epoll) already installed.') else: # Other platform # if current_reactor != 'SelectReactor': if current_reactor is None: try: from twisted.internet import selectreactor selectreactor.install() # from twisted.internet import default as defaultreactor # defaultreactor.install() except: log.warn('Running on "{platform}", but cannot install Select Twisted reactor: {tb}', tb=traceback.format_exc(), platform=sys.platform) else: log.debug('Running on "{platform}" and optimal reactor (Select) was installed.', platform=sys.platform) else: log.warn('Running on "{platform}", but cannot install Select Twisted reactor, because another reactor ({klass}) is already installed.', klass=current_reactor, platform=sys.platform) if require_optimal_reactor: raise ReactorAlreadyInstalledError() else: log.debug('Running on "{platform}" and optimal reactor (Select) already installed.', platform=sys.platform) from twisted.internet import reactor txaio.config.loop = reactor return reactor
def install_optimal_reactor(verbose=False): """ Try to install the optimal Twisted reactor for this platform. :param verbose: If ``True``, print what happens. :type verbose: bool """ log = make_logger() import sys from twisted.python import reflect import txaio txaio.use_twisted() # just to be sure... # XXX should I configure txaio.config.loop in here too, or just in # install_reactor()? (I am: see bottom of function) # determine currently installed reactor, if any ## if 'twisted.internet.reactor' in sys.modules: current_reactor = reflect.qual( sys.modules['twisted.internet.reactor'].__class__).split('.')[-1] else: current_reactor = None # depending on platform, install optimal reactor ## if 'bsd' in sys.platform or sys.platform.startswith('darwin'): # *BSD and MacOSX ## if current_reactor != 'KQueueReactor': try: from twisted.internet import kqreactor kqreactor.install() except: log.critical( "Running on *BSD or MacOSX, but cannot install kqueue Twisted reactor" ) log.debug(traceback.format_exc()) else: log.debug( "Running on *BSD or MacOSX and optimal reactor (kqueue) was installed." ) else: log.debug( "Running on *BSD or MacOSX and optimal reactor (kqueue) already installed." ) elif sys.platform in ['win32']: # Windows ## if current_reactor != 'IOCPReactor': try: from twisted.internet.iocpreactor import reactor as iocpreactor iocpreactor.install() except: log.critical( "Running on Windows, but cannot install IOCP Twisted reactor" ) log.debug(traceback.format_exc()) else: log.debug( "Running on Windows and optimal reactor (ICOP) was installed." ) else: log.debug( "Running on Windows and optimal reactor (ICOP) already installed." ) elif sys.platform.startswith('linux'): # Linux ## if current_reactor != 'EPollReactor': try: from twisted.internet import epollreactor epollreactor.install() except: log.critical( "Running on Linux, but cannot install Epoll Twisted reactor" ) log.debug(traceback.format_exc()) else: log.debug( "Running on Linux and optimal reactor (epoll) was installed." ) else: log.debug( "Running on Linux and optimal reactor (epoll) already installed." ) else: try: from twisted.internet import default as defaultreactor defaultreactor.install() except: log.critical( "Could not install default Twisted reactor for this platform") log.debug(traceback.format_exc()) from twisted.internet import reactor txaio.config.loop = reactor
def install_optimal_reactor(verbose=False): """ Try to install the optimal Twisted reactor for this platform. :param verbose: If ``True``, print what happens. :type verbose: bool """ log = make_logger() import sys from twisted.python import reflect import txaio txaio.use_twisted() # just to be sure... # XXX should I configure txaio.config.loop in here too, or just in # install_reactor()? (I am: see bottom of function) # determine currently installed reactor, if any ## if 'twisted.internet.reactor' in sys.modules: current_reactor = reflect.qual(sys.modules['twisted.internet.reactor'].__class__).split('.')[-1] else: current_reactor = None # depending on platform, install optimal reactor ## if 'bsd' in sys.platform or sys.platform.startswith('darwin'): # *BSD and MacOSX ## if current_reactor != 'KQueueReactor': try: from twisted.internet import kqreactor kqreactor.install() except: log.critical("Running on *BSD or MacOSX, but cannot install kqueue Twisted reactor") log.debug(traceback.format_exc()) else: log.debug("Running on *BSD or MacOSX and optimal reactor (kqueue) was installed.") else: log.debug("Running on *BSD or MacOSX and optimal reactor (kqueue) already installed.") elif sys.platform in ['win32']: # Windows ## if current_reactor != 'IOCPReactor': try: from twisted.internet.iocpreactor import reactor as iocpreactor iocpreactor.install() except: log.critical("Running on Windows, but cannot install IOCP Twisted reactor") log.debug(traceback.format_exc()) else: log.debug("Running on Windows and optimal reactor (ICOP) was installed.") else: log.debug("Running on Windows and optimal reactor (ICOP) already installed.") elif sys.platform.startswith('linux'): # Linux ## if current_reactor != 'EPollReactor': try: from twisted.internet import epollreactor epollreactor.install() except: log.critical("Running on Linux, but cannot install Epoll Twisted reactor") log.debug(traceback.format_exc()) else: log.debug("Running on Linux and optimal reactor (epoll) was installed.") else: log.debug("Running on Linux and optimal reactor (epoll) already installed.") else: try: from twisted.internet import default as defaultreactor defaultreactor.install() except: log.critical("Could not install default Twisted reactor for this platform") log.debug(traceback.format_exc()) from twisted.internet import reactor txaio.config.loop = reactor
USA """ # BSD and Mac OS X, kqueue try: from twisted.internet import kqreactor as event_reactor except: # Linux 2.6 and newer, epoll try: from twisted.internet import epollreactor as event_reactor except: # Linux pre-2.6, poll from twisted.internet import pollreactor as event_reactor event_reactor.install() from convergence.TargetPage import TargetPage from convergence.ConnectChannel import ConnectChannel from convergence.ConnectRequest import ConnectRequest from OpenSSL import SSL from twisted.enterprise import adbapi from twisted.web import http from twisted.web.server import Site from twisted.web.resource import Resource from twisted.internet import reactor import sys, string, os, getopt, logging, pwd, grp, convergence.daemonize
def install_optimal_reactor(verbose=False): """ Try to install the optimal Twisted reactor for platform. :param verbose: If ``True``, print what happens. :type verbose: bool """ import sys from twisted.python import reflect import txaio txaio.use_twisted() # just to be sure... # XXX should I configure txaio.config.loop in here too, or just in # install_reactor()? (I am: see bottom of function) # determine currently installed reactor, if any ## if 'twisted.internet.reactor' in sys.modules: current_reactor = reflect.qual(sys.modules['twisted.internet.reactor'].__class__).split('.')[-1] else: current_reactor = None # depending on platform, install optimal reactor ## if 'bsd' in sys.platform or sys.platform.startswith('darwin'): # *BSD and MacOSX ## if current_reactor != 'KQueueReactor': try: v = sys.version_info if v[0] == 1 or (v[0] == 2 and v[1] < 6) or (v[0] == 2 and v[1] == 6 and v[2] < 5): raise Exception("Python version too old ({0}) to use kqueue reactor".format(sys.version)) from twisted.internet import kqreactor kqreactor.install() except Exception as e: print("WARNING: Running on *BSD or MacOSX, but cannot install kqueue Twisted reactor ({0}).".format(e)) else: if verbose: print("Running on *BSD or MacOSX and optimal reactor (kqueue) was installed.") else: if verbose: print("Running on *BSD or MacOSX and optimal reactor (kqueue) already installed.") elif sys.platform in ['win32']: # Windows ## if current_reactor != 'IOCPReactor': try: from twisted.internet.iocpreactor import reactor as iocpreactor iocpreactor.install() except Exception as e: print("WARNING: Running on Windows, but cannot install IOCP Twisted reactor ({0}).".format(e)) else: if verbose: print("Running on Windows and optimal reactor (ICOP) was installed.") else: if verbose: print("Running on Windows and optimal reactor (ICOP) already installed.") elif sys.platform.startswith('linux'): # Linux ## if current_reactor != 'EPollReactor': try: from twisted.internet import epollreactor epollreactor.install() except Exception as e: print("WARNING: Running on Linux, but cannot install Epoll Twisted reactor ({0}).".format(e)) else: if verbose: print("Running on Linux and optimal reactor (epoll) was installed.") else: if verbose: print("Running on Linux and optimal reactor (epoll) already installed.") else: try: from twisted.internet import default as defaultreactor defaultreactor.install() except Exception as e: print("WARNING: Could not install default Twisted reactor for this platform ({0}).".format(e)) from twisted.internet import reactor txaio.config.loop = reactor
def install_optimal_reactor(require_optimal_reactor=True): """ Try to install the optimal Twisted reactor for this platform: - Linux: epoll - BSD/OSX: kqueue - Windows: iocp - Other: select Notes: - This function exists, because the reactor types selected based on platform in `twisted.internet.default` are different from here. - The imports are inlined, because the Twisted code base is notorious for importing the reactor as a side-effect of merely importing. Hence we postpone all importing. See: http://twistedmatrix.com/documents/current/core/howto/choosing-reactor.html#reactor-functionality :param require_optimal_reactor: If ``True`` and the desired reactor could not be installed, raise ``ReactorAlreadyInstalledError``, else fallback to another reactor. :type require_optimal_reactor: bool :returns: The Twisted reactor in place (`twisted.internet.reactor`). """ log = txaio.make_logger() # determine currently installed reactor, if any # current_reactor = current_reactor_klass() # depending on platform, install optimal reactor # if 'bsd' in sys.platform or sys.platform.startswith('darwin'): # *BSD and MacOSX # if current_reactor != 'KQueueReactor': if current_reactor is None: try: from twisted.internet import kqreactor kqreactor.install() except: log.warn( 'Running on *BSD or MacOSX, but cannot install kqueue Twisted reactor: {tb}', tb=traceback.format_exc()) else: log.debug( 'Running on *BSD or MacOSX and optimal reactor (kqueue) was installed.' ) else: log.warn( 'Running on *BSD or MacOSX, but cannot install kqueue Twisted reactor, because another reactor ({klass}) is already installed.', klass=current_reactor) if require_optimal_reactor: raise ReactorAlreadyInstalledError() else: log.debug( 'Running on *BSD or MacOSX and optimal reactor (kqueue) already installed.' ) elif sys.platform in ['win32']: # Windows # if current_reactor != 'IOCPReactor': if current_reactor is None: try: from twisted.internet.iocpreactor import reactor as iocpreactor iocpreactor.install() except: log.warn( 'Running on Windows, but cannot install IOCP Twisted reactor: {tb}', tb=traceback.format_exc()) else: log.debug( 'Running on Windows and optimal reactor (ICOP) was installed.' ) else: log.warn( 'Running on Windows, but cannot install IOCP Twisted reactor, because another reactor ({klass}) is already installed.', klass=current_reactor) if require_optimal_reactor: raise ReactorAlreadyInstalledError() else: log.debug( 'Running on Windows and optimal reactor (ICOP) already installed.' ) elif sys.platform.startswith('linux'): # Linux # if current_reactor != 'EPollReactor': if current_reactor is None: try: from twisted.internet import epollreactor epollreactor.install() except: log.warn( 'Running on Linux, but cannot install Epoll Twisted reactor: {tb}', tb=traceback.format_exc()) else: log.debug( 'Running on Linux and optimal reactor (epoll) was installed.' ) else: log.warn( 'Running on Linux, but cannot install Epoll Twisted reactor, because another reactor ({klass}) is already installed.', klass=current_reactor) if require_optimal_reactor: raise ReactorAlreadyInstalledError() else: log.debug( 'Running on Linux and optimal reactor (epoll) already installed.' ) else: # Other platform # if current_reactor != 'SelectReactor': if current_reactor is None: try: from twisted.internet import selectreactor selectreactor.install() # from twisted.internet import default as defaultreactor # defaultreactor.install() except: log.warn( 'Running on "{platform}", but cannot install Select Twisted reactor: {tb}', tb=traceback.format_exc(), platform=sys.platform) else: log.debug( 'Running on "{platform}" and optimal reactor (Select) was installed.', platform=sys.platform) else: log.warn( 'Running on "{platform}", but cannot install Select Twisted reactor, because another reactor ({klass}) is already installed.', klass=current_reactor, platform=sys.platform) if require_optimal_reactor: raise ReactorAlreadyInstalledError() else: log.debug( 'Running on "{platform}" and optimal reactor (Select) already installed.', platform=sys.platform) from twisted.internet import reactor txaio.config.loop = reactor return reactor
def install_optimal_reactor(verbose=False): """ Try to install the optimal Twisted reactor for platform. :param verbose: If ``True``, print what happens. :type verbose: bool """ import sys from twisted.python import reflect from twisted.python import log ## determine currently installed reactor, if any ## if "twisted.internet.reactor" in sys.modules: current_reactor = reflect.qual(sys.modules["twisted.internet.reactor"].__class__).split(".")[-1] else: current_reactor = None ## depending on platform, install optimal reactor ## if "bsd" in sys.platform or sys.platform.startswith("darwin"): ## *BSD and MacOSX ## if current_reactor != "KQueueReactor": try: v = sys.version_info if v[0] == 1 or (v[0] == 2 and v[1] < 6) or (v[0] == 2 and v[1] == 6 and v[2] < 5): raise Exception("Python version too old ({0}) to use kqueue reactor".format(sys.version)) from twisted.internet import kqreactor kqreactor.install() except Exception as e: log.err( "WARNING: Running on *BSD or MacOSX, but cannot install kqueue Twisted reactor ({0}).".format(e) ) else: if verbose: log.msg("Running on *BSD or MacOSX and optimal reactor (kqueue) was installed.") else: if verbose: log.msg("Running on *BSD or MacOSX and optimal reactor (kqueue) already installed.") elif sys.platform in ["win32"]: ## Windows ## if current_reactor != "IOCPReactor": try: from twisted.internet.iocpreactor import reactor as iocpreactor iocpreactor.install() except Exception as e: log.err("WARNING: Running on Windows, but cannot install IOCP Twisted reactor ({0}).".format(e)) else: if verbose: log.msg("Running on Windows and optimal reactor (ICOP) was installed.") else: if verbose: log.msg("Running on Windows and optimal reactor (ICOP) already installed.") elif sys.platform.startswith("linux"): ## Linux ## if current_reactor != "EPollReactor": try: from twisted.internet import epollreactor epollreactor.install() except Exception as e: log.err("WARNING: Running on Linux, but cannot install Epoll Twisted reactor ({0}).".format(e)) else: if verbose: log.msg("Running on Linux and optimal reactor (epoll) was installed.") else: if verbose: log.msg("Running on Linux and optimal reactor (epoll) already installed.") else: try: from twisted.internet import default as defaultreactor defaultreactor.install() except Exception as e: log.err("WARNING: Could not install default Twisted reactor for this platform ({0}).".format(e))
def install_optimal_reactor(verbose=False): """ Try to install the optimal Twisted reactor for this platform. :param verbose: If ``True``, print what happens. :type verbose: bool """ log = txaio.make_logger() import sys from twisted.python import reflect # determine currently installed reactor, if any ## if "twisted.internet.reactor" in sys.modules: current_reactor = reflect.qual(sys.modules["twisted.internet.reactor"].__class__).split(".")[-1] else: current_reactor = None # depending on platform, install optimal reactor ## if "bsd" in sys.platform or sys.platform.startswith("darwin"): # *BSD and MacOSX ## if current_reactor != "KQueueReactor": try: from twisted.internet import kqreactor kqreactor.install() except: log.critical("Running on *BSD or MacOSX, but cannot install kqueue Twisted reactor") log.warn("{tb}", tb=traceback.format_exc()) else: log.debug("Running on *BSD or MacOSX and optimal reactor (kqueue) was installed.") else: log.debug("Running on *BSD or MacOSX and optimal reactor (kqueue) already installed.") elif sys.platform in ["win32"]: # Windows ## if current_reactor != "IOCPReactor": try: from twisted.internet.iocpreactor import reactor as iocpreactor iocpreactor.install() except: log.critical("Running on Windows, but cannot install IOCP Twisted reactor") log.warn("{tb}", tb=traceback.format_exc()) else: log.debug("Running on Windows and optimal reactor (ICOP) was installed.") else: log.debug("Running on Windows and optimal reactor (ICOP) already installed.") elif sys.platform.startswith("linux"): # Linux ## if current_reactor != "EPollReactor": try: from twisted.internet import epollreactor epollreactor.install() except: log.critical("Running on Linux, but cannot install Epoll Twisted reactor") log.warn("{tb}", tb=traceback.format_exc()) else: log.debug("Running on Linux and optimal reactor (epoll) was installed.") else: log.debug("Running on Linux and optimal reactor (epoll) already installed.") else: try: from twisted.internet import default as defaultreactor defaultreactor.install() except: log.critical("Could not install default Twisted reactor for this platform") log.warn("{tb}", tb=traceback.format_exc()) from twisted.internet import reactor txaio.config.loop = reactor
if sys.version_info < (2, 6): print "Sorry, convergence requires at least Python 2.6" sys.exit(3) # BSD and Mac OS X, kqueue try: from twisted.internet import kqreactor as event_reactor except: # Linux 2.6 and newer, epoll try: from twisted.internet import epollreactor as event_reactor except: # Linux pre-2.6, poll from twisted.internet import pollreactor as event_reactor event_reactor.install() from convergence.TargetPage import TargetPage from convergence.ConnectChannel import ConnectChannel from convergence.ConnectRequest import ConnectRequest from convergence.verifier.NetworkPerspectiveVerifier import NetworkPerspectiveVerifier from convergence.verifier.GoogleCatalogVerifier import GoogleCatalogVerifier from OpenSSL import SSL from twisted.enterprise import adbapi from twisted.web import http from twisted.web.server import Site from twisted.web.resource import Resource from twisted.internet import reactor