a
´iPL ã @ s¢ d Z ddlmZmZ ddlmZ ddlmZ ddlZddl Z ddl
Z
dZdZdd „ Z
ed
g d¢ƒZde_ e
jd
kr’dej_ dej_ dej_ dej_ G dd„ deƒZG dd„ ded�ZG dd„ deƒZG dd„ deƒZG dd„ deƒZee dƒrþG dd„ deƒZee d ƒ�rG d!d"„ d"eƒZee d#ƒ�r6G d$d%„ d%eƒZee d&ƒ�rRG d'd(„ d(eƒZd)d*„ Zed&ƒ�rjeZn4ed ƒ�rzeZn$ed#ƒ�rŠeZnedƒ�ršeZneZdS )+z|Selectors module.
This module allows high-level and efficient I/O multiplexing, built upon the
`select` module primitives.
é )ÚABCMetaÚabstractmethod)Ú
namedtuple)ÚMappingNé é c
C sd t | tƒr| }n:zt| ¡ ƒ}W n( tttfyH td | ¡ƒd‚Y n0 |dk r`td |¡ƒ‚|S )zÕReturn 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: {})Ú
isinstanceÚintÚfilenoÚAttributeErrorÚ TypeErrorÚ
ValueErrorÚformat)ÚfileobjÚfd© r ú!/usr/lib64/python3.9/selectors.pyÚ_fileobj_to_fd s
ÿÿr ÚSelectorKey)r r ÚeventsÚdatazŸSelectorKey(fileobj, fd, events, data)
Object used to associate a file object to its backing
file descriptor, selected event mask, and attached data.
)é é zFile object registered.zUnderlying file descriptor.z3Events that must be waited for on this file object.zzOptional opaque data associated to this file object.
For example, this could be used to store a per-client session ID.c @ s0 e Zd ZdZdd„ Zdd„ Zdd„ Zdd „ Zd
S )Ú_SelectorMappingz)Mapping of file objects to selector keys.c C s
|| _ d S ©N)Ú _selector)ÚselfÚselectorr r r Ú__init__@ s z_SelectorMapping.__init__c C s t | jjƒS r )Úlenr Ú
_fd_to_key©r r r r Ú__len__C s z_SelectorMapping.__len__c C sB z| j |¡}| j j| W S ty< td |¡ƒd ‚Y n0 d S ©Nú{!r} is not registered)r Ú_fileobj_lookupr ÚKeyErrorr )r r r r r r Ú__getitem__F s
z_SelectorMapping.__getitem__c C s t | jjƒS r )Úiterr r r! r r r Ú__iter__M s z_SelectorMapping.__iter__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r r" r' r) r r r r r = s
r c @ sn e Zd ZdZeddd„ƒZedd„ ƒZddd„Zedd d
„ƒZdd„ Z d
d„ Z
edd„ ƒZdd„ Zdd„ Z
dS )Ú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 ‚dS )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 Úregister` s zBaseSelector.registerc C s t ‚dS )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)
Nr/ )r r r r r Ú
unregisterw s zBaseSelector.unregisterc C s | |¡ | |||¡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
)r3 r2 r1 r r r ÚmodifyŠ s
zBaseSelector.modifyc C s t ‚dS )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
Nr/ )r Útimeoutr r r Úselect› s zBaseSelector.selectc C s dS )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 sJ | ¡ }|du rtdƒ‚z
|| W S tyD td |¡ƒd‚Y n0 dS )zzReturn the key associated to a registered file object.
Returns:
SelectorKey for this file object
NzSelector is closedr$ )Úget_mapÚRuntimeErrorr&