e fB @ s d Z d d l m Z m Z d d l m Z m Z d d l Z d d l Z d d l Z d Z d Z d d Z e d d d d d g Z Gd d d e Z Gd d d d e Z Gd d d e Z Gd d d e Z e e d rGd d d e Z n e e d r4Gd d d e Z n e e d r\Gd d d e Z n d e k rte Z n6 d e k re Z n d e k re Z n e Z d S)!z|Selectors module. This module allows high-level and efficient I/O multiplexing, built upon the `select` module primitives. )ABCMetaabstractmethod) namedtupleMappingN c C s t | t r | } nL y t | j } Wn3 t t t f k rc t d j | d Yn X| d k r t d j | n | S)zReturn a file descriptor from a file object. Parameters: fileobj -- file object or file descriptor Returns: corresponding file descriptor Raises: ValueError if the object is invalid zInvalid file object: {!r}Nr zInvalid file descriptor: {}) isinstanceintfilenoAttributeError TypeError ValueErrorformat)fileobjfd r ./opt/alt/python34/lib64/python3.4/selectors.py_fileobj_to_fd s r SelectorKeyr r eventsdatac @ sF e Z d Z d Z d d Z d d Z d d Z d d Z d S)_SelectorMappingz)Mapping of file objects to selector keys.c C s | | _ d S)N) _selector)selfZselectorr r r __init__5 s z_SelectorMapping.__init__c C s t | j j S)N)lenr _fd_to_key)r r r r __len__8 s z_SelectorMapping.__len__c C sU y$ | j j | } | j j | SWn* t k rP t d j | d Yn Xd S)Nz{!r} is not registered)r _fileobj_lookupr KeyErrorr )r r r r r r __getitem__; s z_SelectorMapping.__getitem__c C s t | j j S)N)iterr r )r r r r __iter__B s z_SelectorMapping.__iter__N)__name__ __module____qualname____doc__r r r r! r r r r r 2 s r c @ s e Z d Z d Z e d d d Z e d d Z d d d Z e d d d Z d d Z d d Z e d d Z d d Z d d Z d S)BaseSelectora- Selector abstract base class. A selector supports registering file objects to be monitored for specific I/O events. A file object is a file descriptor or any object with a `fileno()` method. An arbitrary object can be attached to the file object, which can be used for example to store context information, a callback, etc. A selector can use various implementations (select(), poll(), epoll()...) depending on the platform. The default `Selector` class uses the most efficient implementation on the current platform. Nc C s t d S)a3 Register a file object. Parameters: fileobj -- file object or file descriptor events -- events to monitor (bitwise mask of EVENT_READ|EVENT_WRITE) data -- attached data Returns: SelectorKey instance Raises: ValueError if events is invalid KeyError if fileobj is already registered OSError if fileobj is closed or otherwise is unacceptable to the underlying system call (if a system call is made) Note: OSError may or may not be raised N)NotImplementedError)r r r r r r r registerU s zBaseSelector.registerc C s t d S)aj Unregister a file object. Parameters: fileobj -- file object or file descriptor Returns: SelectorKey instance Raises: KeyError if fileobj is not registered Note: If fileobj is registered but has since been closed this does *not* raise OSError (even if the wrapped syscall does) N)r' )r r r r r unregisterl s zBaseSelector.unregisterc C s | j | | j | | | S)ay Change a registered file object monitored events or attached data. Parameters: fileobj -- file object or file descriptor events -- events to monitor (bitwise mask of EVENT_READ|EVENT_WRITE) data -- attached data Returns: SelectorKey instance Raises: Anything that unregister() or register() raises )r) r( )r r r r r r r modify s zBaseSelector.modifyc C s t d S)aq Perform the actual selection, until some monitored file objects are ready or a timeout expires. Parameters: timeout -- if timeout > 0, this specifies the maximum wait time, in seconds if timeout <= 0, the select() call won't block, and will report the currently ready file objects if timeout is None, select() will block until a monitored file object becomes ready Returns: list of (key, events) for ready file objects `events` is a bitwise mask of EVENT_READ|EVENT_WRITE N)r' )r timeoutr r r select s zBaseSelector.selectc C s d S)zmClose the selector. This must be called to make sure that any underlying resource is freed. Nr )r r r r close s zBaseSelector.closec C s^ | j } y! | d k r$ t n | | SWn* t k rY t d j | d Yn Xd S)zzReturn the key associated to a registered file object. Returns: SelectorKey for this file object Nz{!r} is not registered)get_mapr r )r r mappingr r r get_key s zBaseSelector.get_keyc C s t d S)z2Return a mapping of file objects to selector keys.N)r' )r r r r r. s zBaseSelector.get_mapc C s | S)Nr )r r r r __enter__ s zBaseSelector.__enter__c G s | j d S)N)r- )r argsr r r __exit__ s zBaseSelector.__exit__)r" r# r$ r% r r( r) r* r, r- r0 r. r1 r3 r r r r r&