o
    ½;Üg¢  ã                   @   s,   d Z ddlZddlmZ G dd„ deƒZdS )z[
The implementation of thread patching for Python versions
after 3.13.

Internal use only.
é    Né   )ÚBasePatcherc                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚPatcherc                 C   s–   ddl m} | jj ¡ D ]<}||ƒ kr?ddlm} ddlm} ddd„|_	|ƒ |_
|j
 |ƒ ¡ |j
j|_|j|j
jks>J ‚q|  |d | j¡|_qd S )Nr   )Úmain_native_thread)Ú
getcurrent)Ú_ThreadHandlec                 S   s   | S ©N© )Z	new_identr	   r	   úi/home/www/bk.finsightngr.online/venv20/lib/python3.10/site-packages/gevent/monkey/_patch_thread_gte313.pyÚ<lambda>   s    z.Patcher.patch_active_threads.<locals>.<lambda>r   )Zgevent.threadingr   Úthreading_modÚ_activeÚvaluesÚgreenletr   Zgevent.threadr   Ú_after_forkÚ_handleZ_set_greenletÚidentÚ_identZ(_make_existing_non_main_thread_join_funcÚjoin)Úselfr   Úthreadr   r   r	   r	   r
   Úpatch_active_threads   s    

þözPatcher.patch_active_threadsc                    s\   dd l }ddlm‰ ˆj‰ˆj‰ˆj‰| ¡  ‰ ˆ_‡ ‡‡‡‡‡fdd„}ˆˆjd|ƒ d S )Nr   r   )Ú
patch_itemc               	      sè   ˆj  ¡  ddlm}  z| ƒ  W n   ddlm} |ƒ jˆ gt ¡ ¢R Ž  Y G dd„ dƒ}|ƒ ˆ_ ˆ ¡ s8J ‚t	ˆ 
¡ ƒD ])}|jsG|ˆu rHq>| ¡ rgz|j  d¡ W n tyb   |j  ¡  Y qgw | ¡ sLq>ˆƒ  ˆˆdˆjƒ d S )Nr   )Úsleep)Úget_hubc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )zjPatcher.patch_threading_shutdown_on_main_thread_not_already_patched.<locals>._shutdown.<locals>.FakeHandlec                 S   s   dS )NFr	   ©r   r	   r	   r
   Úis_done=   ó   zrPatcher.patch_threading_shutdown_on_main_thread_not_already_patched.<locals>._shutdown.<locals>.FakeHandle.is_donec                 S   ó   d S r   r	   r   r	   r	   r
   Ú	_set_done?   r   ztPatcher.patch_threading_shutdown_on_main_thread_not_already_patched.<locals>._shutdown.<locals>.FakeHandle._set_donec                 S   r   r   r	   r   r	   r	   r
   r   A   r   zoPatcher.patch_threading_shutdown_on_main_thread_not_already_patched.<locals>._shutdown.<locals>.FakeHandle.joinN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r	   r	   r	   r
   Ú
FakeHandle<   s    r#   gü©ñÒMbP?Ú	_shutdown)r   r   Zgeventr   r   Úprint_exceptionÚsysÚexc_infoÚis_aliveÚlistÚ	enumerateÚdaemonr   ÚRuntimeErrorÚorig_shutdown)r   r   r#   Út©Ú	_greenletÚmain_threadr-   r   r   r   r	   r
   r$   *   s0   

	
ýý€zVPatcher.patch_threading_shutdown_on_main_thread_not_already_patched.<locals>._shutdownr$   )r   Úapir   r1   r   r-   r   r0   )r   r   r$   r	   r/   r
   Ú;patch_threading_shutdown_on_main_thread_not_already_patched!   s   1zCPatcher.patch_threading_shutdown_on_main_thread_not_already_patchedN)r    r!   r"   r   r3   r	   r	   r	   r
   r      s    r   )Ú__doc__r&   Z_patch_thread_commonr   r   r	   r	   r	   r
   Ú<module>   s   