grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026B Í!;)ÀÏãã@s¨dZddlmZmZddlmZddlmZddlZddl Z ddl Z dZ dZ dd „Z ed d d d dgƒZde_e jdkr–dej_dej_dej_dej_Gdd„deƒZGdd„ded�ZGdd„deƒZGdd„deƒZGdd„deƒZee d ƒ�rGd!d"„d"eƒZee d#ƒ�r Gd$d%„d%eƒZee d&ƒ�r 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ÚtimeoutrrrÚselectšszBaseSelector.selectcCsdS)zmClose the selector. This must be called to make sure that any underlying resource is freed. Nr)rrrrÚclose­szBaseSelector.closecCsJ| ¡}|dkrtdƒ‚y||Stk rDtd |¡ƒd‚YnXdS)zzReturn the key associated to a registered file object. Returns: SelectorKey for this file object NzSelector is closedz{!r} is not registered)Úget_mapÚ RuntimeErrorr!r)rrÚmappingrrrÚget_key´szBaseSelector.get_keycCst‚dS)z2Return a mapping of file objects to selector keys.N)r*)rrrrr1ÂszBaseSelector.get_mapcCs|S)Nr)rrrrÚ __enter__ÇszBaseSelector.__enter__cGs | ¡dS)N)r0)rÚargsrrrÚ__exit__ÊszBaseSelector.__exit__)N)N)N)r%r&r'r(rr+r,r-r/r0r4r1r5r7rrrrr)Ps      r))Ú metaclassc@sTeZdZdZdd„Zdd„Zddd„Zd d „Zdd d „Zd d„Z dd„Z dd„Z dS)Ú_BaseSelectorImplzBase selector implementation.cCsi|_t|ƒ|_dS)N)rrÚ_map)rrrrrÑsz_BaseSelectorImpl.__init__cCsHyt|ƒStk rBx"|j ¡D]}|j|kr$|jSq$W‚YnXdS)alReturn a file descriptor from a file object. This wraps _fileobj_to_fd() to do an exhaustive search in case the object is invalid but we still have it in our map. This is used by unregister() so we can unregister an object that was previously registered even if it is closed. It is also used by _SelectorMapping. N)rr rÚvaluesrr)rrÚkeyrrrr ×s   z!_BaseSelectorImpl._fileobj_lookupNcCsb|r|ttB@r td |¡ƒ‚t|| |¡||ƒ}|j|jkrRtd ||j¡ƒ‚||j|j<|S)NzInvalid events: {!r}z"{!r} (FD {}) is already registered) Ú EVENT_READÚ EVENT_WRITEr rrr rrr!)rrrrr<rrrr+ês   z_BaseSelectorImpl.registercCs@y|j | |¡¡}Wn$tk r:td |¡ƒd‚YnX|S)Nz{!r} is not registered)rÚpopr r!r)rrr<rrrr,÷s z_BaseSelectorImpl.unregistercCs„y|j| |¡}Wn$tk r8td |¡ƒd‚YnX||jkr^| |¡| |||¡}n"||jkr€|j|d�}||j|j <|S)Nz{!r} is not registered)r) rr r!rrr,r+rÚ_replacer)rrrrr<rrrr-þs     z_BaseSelectorImpl.modifycCs|j ¡d|_dS)N)rÚclearr:)rrrrr0 s z_BaseSelectorImpl.closecCs|jS)N)r:)rrrrr1sz_BaseSelectorImpl.get_mapcCs$y |j|Stk rdSXdS)z³Return the key associated to a given file descriptor. Parameters: fd -- file descriptor Returns: corresponding key, or None if not found N)rr!)rrrrrÚ _key_from_fds  z_BaseSelectorImpl._key_from_fd)N)N) r%r&r'r(rr r+r,r-r0r1rBrrrrr9Îs  r9cs`eZdZdZ‡fdd„Zd‡fdd„ Z‡fdd„Zejd krHdd d „Z ne j Z dd d „Z ‡Z S)ÚSelectSelectorzSelect-based selector.cstƒ ¡tƒ|_tƒ|_dS)N)ÚsuperrÚsetÚ_readersÚ_writers)r)Ú __class__rrr%s zSelectSelector.__init__Ncs@tƒ |||¡}|t@r&|j |j¡|t@r<|j |j¡|S)N)rDr+r=rFÚaddrr>rG)rrrrr<)rHrrr+*s zSelectSelector.registercs,tƒ |¡}|j |j¡|j |j¡|S)N)rDr,rFÚdiscardrrG)rrr<)rHrrr,2s zSelectSelector.unregisterZwin32cCs$t ||||¡\}}}|||gfS)N)r/)rÚrÚwÚ_r.ÚxrrrÚ_select9szSelectSelector._selectc Csº|dkr dnt|dƒ}g}y| |j|jg|¡\}}}Wntk rL|SXt|ƒ}t|ƒ}xV||BD]J}d}||kr€|tO}||kr�|tO}| |¡}|rh|  |||j @f¡qhW|S)Nr) ÚmaxrOrFrGÚInterruptedErrorrEr=r>rBÚappendr) rr.ÚreadyrKrLrMrrr<rrrr/?s$ zSelectSelector.select)N)N)N) r%r&r'r(rr+r,ÚsysÚplatformrOr/Ú __classcell__rr)rHrrC"s    rCcs^eZdZdZdZdZdZ‡fdd„Zd ‡fdd„ Z‡fdd„Z d‡fd d „ Z dd d „Z ‡Z S)Ú_PollLikeSelectorzÚ _EVENT_WRITErrr,)rrrrr<Z poller_events)rHrrr+_s   z_PollLikeSelector.registercs8tƒ |¡}y|j |j¡Wntk r2YnX|S)N)rDr,rrÚOSError)rrr<)rHrrr,ms  z_PollLikeSelector.unregistercsÔy|j| |¡}Wn$tk r8t|›d�ƒd‚YnXd}||jkr¤d}|t@r^||jO}|t@rp||jO}y|j  |j |¡Wnt ƒ  |¡‚YnXd}||j kr²d}|rÐ|j||d�}||j|j <|S)Nz is not registeredFrT)rr)rr r!rr=rYr>rZrr-rrDr,rr@)rrrrr<ZchangedZselector_events)rHrrr-ws.      z_PollLikeSelector.modifycCs¸|dkrd}n|dkrd}nt |d¡}g}y|j |¡}Wntk rR|SXx^|D]V\}}d}||j@rz|tO}||j@rŽ|tO}|  |¡}|rZ|  |||j @f¡qZW|S)Nrg@�@) ÚmathÚceilrÚpollrQrYr>rZr=rBrRr)rr.rSÚ fd_event_listrÚeventrr<rrrr/’s(   z_PollLikeSelector.select)N)N)N) r%r&r'r(rXrYrZrr+r,r-r/rVrr)rHrrWUs  rWr^c@s"eZdZdZejZejZej Z dS)Ú PollSelectorzPoll-based selector.N) r%r&r'r(r/r^rXÚPOLLINrYÚPOLLOUTrZrrrrra±sraÚepollcsDeZdZdZejZejZej Z dd„Z d dd„Z‡fdd„Z ‡Z S) Ú EpollSelectorzEpoll-based selector.cCs |j ¡S)N)rr )rrrrr ÀszEpollSelector.filenoNc CsÎ|dkrd}n |dkrd}nt |d¡d}tt|jƒdƒ}g}y|j ||¡}Wntk rh|SXx^|D]V\}}d}|tj @r�|t O}|tj @r¤|t O}|  |¡}|rp| |||j@f¡qpW|S)Néÿÿÿÿrg@�@gü©ñÒMbP?r)r\r]rPrrrr^rQr/ÚEPOLLINr>ÚEPOLLOUTr=rBrRr) rr.Úmax_evrSr_rr`rr<rrrr/Ãs*   zEpollSelector.selectcs|j ¡tƒ ¡dS)N)rr0rD)r)rHrrr0ãs zEpollSelector.close)N)r%r&r'r(r/rdrXrgrYrhrZr r0rVrr)rHrreºs reÚdevpollcs:eZdZdZejZejZej Z dd„Z ‡fdd„Z ‡Z S)ÚDevpollSelectorzSolaris /dev/poll selector.cCs |j ¡S)N)rr )rrrrr ðszDevpollSelector.filenocs|j ¡tƒ ¡dS)N)rr0rD)r)rHrrr0ós zDevpollSelector.close)r%r&r'r(r/rjrXrbrYrcrZr r0rVrr)rHrrkês rkÚkqueuecsXeZdZdZ‡fdd„Zdd„Zd‡fdd„ Z‡fd d „Zdd d „Z‡fd d„Z ‡Z S)ÚKqueueSelectorzKqueue-based selector.cstƒ ¡t ¡|_dS)N)rDrr/rlr)r)rHrrrýs zKqueueSelector.__init__cCs |j ¡S)N)rr )rrrrr szKqueueSelector.filenoNcs�tƒ |||¡}y`|t@r@t |jtjtj¡}|j  |gdd¡|t @rnt |jtj tj¡}|j  |gdd¡Wntƒ  |¡‚YnX|S)Nr) rDr+r=r/ÚkeventrÚKQ_FILTER_READZ KQ_EV_ADDrÚcontrolr>ÚKQ_FILTER_WRITEr,)rrrrr<Úkev)rHrrr+s   zKqueueSelector.registercs¤tƒ |¡}|jt@rVt |jtjtj¡}y|j   |gdd¡Wnt k rTYnX|jt @r t |jtj tj¡}y|j   |gdd¡Wnt k ržYnX|S)Nr)rDr,rr=r/rnrroZ KQ_EV_DELETErrpr[r>rq)rrr<rr)rHrrr,s      zKqueueSelector.unregisterc Cs¶|dkr dnt|dƒ}t|jƒ}g}y|j d||¡}Wntk rL|SXxb|D]Z}|j}|j}d}|tj krz|t O}|tj krŒ|t O}|  |¡} | rT| | || j@f¡qTW|S)Nr)rPrrrrprQZidentÚfilterr/ror=rqr>rBrRr) rr.rirSZkev_listrrrÚflagrr<rrrr/)s&     zKqueueSelector.selectcs|j ¡tƒ ¡dS)N)rr0rD)r)rHrrr0?s zKqueueSelector.close)N)N) r%r&r'r(rr r+r,r/r0rVrr)rHrrmús   rm) r(ÚabcrrÚ collectionsrZcollections.abcrr\r/rTr=r>rrÚ version_inforrrrrr)r9rCrWÚhasattrrarerkrmÚglobalsZDefaultSelectorrrrrÚsL   ~T3Z  .  M