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 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 setup_default_reactor(test): if 'twisted.internet.reactor' in sys.modules: del sys.modules['twisted.internet.reactor'] from twisted.internet import selectreactor selectreactor.install() from twisted.internet import reactor return reactor
def SvcDoRun(self): try: logmsg("service run") import servicemanager # Write a 'started' event to the event log... win32evtlogutil.ReportEvent( self._svc_display_name_, servicemanager.PYS_SERVICE_STARTED, 0, # category servicemanager.EVENTLOG_INFORMATION_TYPE, (self._svc_name_, '')) reactor_type = registry.get_registry_value('reactor') if reactor_type == 'iocp': from twisted.internet import iocpreactor iocpreactor.install() else: from twisted.internet import selectreactor selectreactor.install() from twisted.internet import reactor if os.path.exists('DISABLE_STARTUP'): logmsg("DISABLE_STARTUP exists: exiting") else: logmsg("runing reactorthread") # launch main thread... thread.start_new_thread(self.launch_node, ()) # ...and block until service stop request win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE) logmsg("wake up") reactor.callFromThread(reactor.stop) time.sleep(2) # give the node/reactor a chance to cleanup # and write a 'stopped' event to the event log. win32evtlogutil.ReportEvent( self._svc_display_name_, servicemanager.PYS_SERVICE_STOPPED, 0, # category servicemanager.EVENTLOG_INFORMATION_TYPE, (self._svc_name_, '')) except: try: logmsg("exception") traceback.print_exc(None, logfilehandle) logfilehandle.flush() logfilehandle.close() except: os.abort()
def SvcDoRun(self): try: logmsg("service run") import servicemanager # Write a 'started' event to the event log... win32evtlogutil.ReportEvent(self._svc_display_name_, servicemanager.PYS_SERVICE_STARTED, 0, # category servicemanager.EVENTLOG_INFORMATION_TYPE, (self._svc_name_, '')) reactor_type = registry.get_registry_value('reactor') if reactor_type == 'iocp': from twisted.internet import iocpreactor iocpreactor.install() else: from twisted.internet import selectreactor selectreactor.install() from twisted.internet import reactor if os.path.exists('DISABLE_STARTUP'): logmsg("DISABLE_STARTUP exists: exiting") else: logmsg("runing reactorthread") # launch main thread... thread.start_new_thread(self.launch_node, ()) # ...and block until service stop request win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE) logmsg("wake up") reactor.callFromThread(reactor.stop) time.sleep(2) # give the node/reactor a chance to cleanup # and write a 'stopped' event to the event log. win32evtlogutil.ReportEvent(self._svc_display_name_, servicemanager.PYS_SERVICE_STOPPED, 0, # category servicemanager.EVENTLOG_INFORMATION_TYPE, (self._svc_name_, '')) except: try: logmsg("exception") traceback.print_exc(None, logfilehandle) logfilehandle.flush() logfilehandle.close() except: os.abort()
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
import socket import random import config import platform _platform = platform.system().lower() if _platform == 'windows': from twisted.internet import iocpreactor try: #http://sourceforge.net/projects/pywin32/ iocpreactor.install() except: pass elif _platform == 'darwin': from twisted.internet import selectreactor try: selectreactor.install() except: pass else: from twisted.internet import epollreactor try: epollreactor.install() except: pass from session import Session class Server(Protocol): def __init__(self, session):
from ziface import Iserver,Iprotocol from twisted.internet import selectreactor selectreactor.install() from twisted.internet.endpoints import TCP4ServerEndpoint from twisted.internet import reactor #自定义协议 from protocol import PingProtocol #路由定制 from msghandler import IMsgHandler #配置 from utils.config import Config #实现服务器 class Server(Iserver.IServer): def __init__(self,name=Config.Name, ipversion=Config.Version, ip=Config.Host, port=Config.Port, protocol=PingProtocol, routers=None): self.name=name self.ipversion=ipversion self.ip=ip self.port=port self.protocol=protocol
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
interface. ''' import os # Allows us to select which Twisted reactor to use. Must be done before any # Twisted import calls. r = os.environ.get('JUNEBUG_REACTOR', 'DEFAULT') if r == "SELECT": from twisted.internet import selectreactor as r elif r == "POLL": from twisted.internet import pollreactor as r elif r == "KQUEUE": from twisted.internet import kqreactor as r elif r == "WFMO": from twisted.internet import win32eventreactor as r elif r == "IOCP": from twisted.internet import iocpreactor as r elif r == "EPOLL": from twisted.internet import epollreactor as r elif r == "DEFAULT": r = None else: raise RuntimeError("Unsupported JUNEBUG_REACTOR setting %r" % (r,)) if r is not None: r.install() from junebug.api import JunebugApi __all__ = ['JunebugApi'] __version__ = '0.1.12'
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 pytest_configure(config): from twisted.internet import selectreactor selectreactor.install()
def execute(self, settings, id): print "Starting module from {0} with ID {1}".format(settings, id) conf.settings = conf.Settings.from_file(settings) # @todo: Install the chosen reactor (look at settings.reactor) #from twisted.internet import reactor from twisted.internet.selectreactor import install reactor = install() sys.path.insert(0, os.path.dirname(settings)) # The module should now be on the path, let's search for it. from smac.modules import base, utils try: # The get_class_instance function loads the 'implementation' # module by default. Search for an instance of base.ModuleBase # in the 'implementation' module. # The 'implementation module should be defined by the SMAC module # and thus contained in the directory which we just inserted in # the path. handler = utils.get_class(base.ModuleBase) except ImportError as e: print "The 'implementation' python module was not found." print e import traceback traceback.print_exc() sys.exit(1) if handler is None: print "No instances of 'smac.modules.base.ModuleBase' were ", \ "found in the 'implementation' python module." sys.exit(1) def amqp_service(interface): return interface.extends(AMQPService.Iface) def rpc_service(interface): return interface.extends(RPCService.Iface) amqp_interface = filter(amqp_service, list(implementedBy(handler)))[0] amqp_processor = utils.get_module_for_interface(amqp_interface) try: rpc_interface = filter(rpc_service, list(implementedBy(handler)))[0] except IndexError: pass else: rpc_processor = utils.get_module_for_interface(rpc_interface) startup_registry['rpc_processor'] = rpc_processor # Save the necessary variables in the global registry to be used by # the runner called by twisted.runApp() startup_registry['amqp_processor'] = amqp_processor startup_registry['handler'] = handler startup_registry['instance_id'] = id startup_registry['__name__'] = '__main__' runner = os.path.join(os.path.dirname(base.__file__), 'runner.py') # Initialize basic configuration of the twisted application runner # @TODO: Move this to the `smac run` command from twisted.scripts import twistd config = twistd.ServerOptions() options = ['-noy', runner] if runtime.platformType != "win32": options.append('--pidfile={0}.pid'.format(id)) config.parseOptions(options) # Set the terminal title print "\x1b]2;SMAC Module - {0} {1}\x07".format(handler.__name__, id) print "Initialization succeded, passing control to twistd\n" # Run the selected module twistd.runApp(config)