Ë
    	V.j³  ã                   óð   — d dl Z d dlZd dlZd dlZd dlZddlmZ ddlmZ ddlmZ dgZ	ej                  dk(  re	dgz  Z	 G d	„ d«      Zne	d
gz  Z	 G d„ d
«      Z G d„ d«      Z e«       Zej                  Zy)é    Né   )Úprocess)Ú	reduction)ÚutilÚstopÚwin32Ú	DupSocketc                   ó   — e Zd ZdZd„ Zd„ Zy)r	   zPicklable wrapper for a socket.c                 óz   ‡— |j                  «       Šˆfd„}t        j                  |‰j                  «      | _        y )Nc                 óJ   •— ‰j                  |«      }| j                  |«       y ©N)ÚshareÚ
send_bytes)ÚconnÚpidr   Únew_socks      €úZC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\billiard/resource_sharer.pyÚsendz DupSocket.__init__.<locals>.send!   s   ø€ Ø Ÿ™ sÓ+�Ø—‘ Õ&ó    )ÚdupÚ_resource_sharerÚregisterÚcloseÚ_id)ÚselfÚsockr   r   s      @r   Ú__init__zDupSocket.__init__   s-   ø€ Ø—x‘x“zˆHô'ô (×0Ñ0°°x·~±~ÓFˆD�Hr   c                 ó¶   — t         j                  | j                  «      5 }|j                  «       }t	        j
                  |«      cddd«       S # 1 sw Y   yxY w)z1Get the socket.  This should only be called once.N)r   Úget_connectionr   Ú
recv_bytesÚsocketÚ	fromshare)r   r   r   s      r   ÚdetachzDupSocket.detach&   s<   € ä!×0Ñ0°·±Ô:¸dØŸ™Ó)�Ü×'Ñ'¨Ó.÷ ;×:Ò:ús    %AÁAN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r#   © r   r   r	   r	      s   „ Ù-ò	Gó	/r   ÚDupFdc                   ó   — e Zd ZdZd„ Zd„ Zy)r*   z-Wrapper for fd which can be used at any time.c                 óz   ‡— t        j                  |«      Šˆfd„}ˆfd„}t        j                  ||«      | _        y )Nc                 ó4   •— t        j                  | ‰|«       y r   )r   Úsend_handle)r   r   Únew_fds     €r   r   zDupFd.__init__.<locals>.send4   s   ø€ Ü×%Ñ% d¨F°CÕ8r   c                  ó0   •— t        j                  ‰ «       y r   )Úosr   )r/   s   €r   r   zDupFd.__init__.<locals>.close7   s   ø€ Ü—‘˜Õ r   )r1   r   r   r   r   )r   Úfdr   r   r/   s       @r   r   zDupFd.__init__1   s.   ø€ Ü—V‘V˜B“ZˆFô9ô!ä'×0Ñ0°°uÓ=ˆD�Hr   c                 ó–   — t         j                  | j                  «      5 }t        j                  |«      cddd«       S # 1 sw Y   yxY w)z-Get the fd.  This should only be called once.N)r   r   r   r   Úrecv_handle)r   r   s     r   r#   zDupFd.detach;   s0   € ä!×0Ñ0°·±Ô:¸dÜ ×,Ñ,¨TÓ2÷ ;×:Ò:ús	    ?¿ANr$   r)   r   r   r*   r*   /   s   „ Ù;ò	>ó	3r   c                   óF   — e Zd ZdZd„ Zd„ Zed„ «       Zd
d„Zd„ Z	d„ Z
d	„ Zy)Ú_ResourceSharerz.Manager for resources using background thread.c                 óÒ   — d| _         i | _        g | _        t        j                  «       | _        d | _        d | _        d | _        t        j                  | t        j                  «       y )Nr   )Ú_keyÚ_cacheÚ
_old_locksÚ	threadingÚLockÚ_lockÚ	_listenerÚ_addressÚ_threadr   Úregister_after_forkr6   Ú
_afterfork)r   s    r   r   z_ResourceSharer.__init__C   sP   € ØˆŒ	ØˆŒØˆŒÜ—^‘^Ó%ˆŒ
ØˆŒØˆŒØˆŒÜ× Ñ  ¤×'AÑ'AÕBr   c                 ó  — | j                   5  | j                  €| j                  «        | xj                  dz  c_        ||f| j                  | j                  <   | j                  | j                  fcddd«       S # 1 sw Y   yxY w)z+Register resource, returning an identifier.Nr   )r=   r?   Ú_startr8   r9   )r   r   r   s      r   r   z_ResourceSharer.registerM   sY   € à�Z‹ZØ�}‰}Ð$Ø—‘”Ø�IŠI˜‰N�IØ&*¨E ]ˆD�K‰K˜Ÿ	™	Ñ"Ø—M‘M 4§9¡9Ð-÷ �ZŠZús   �A$A;Á;Bc                 ó²   — ddl m} | \  }} ||t        j                  «       j                  ¬«      }|j                  |t        j                  «       f«       |S )z<Return connection from which to receive identified resource.r   ©ÚClient©Úauthkey)Ú
connectionrG   r   Úcurrent_processrI   r   r1   Úgetpid)ÚidentrG   ÚaddressÚkeyÚcs        r   r   z_ResourceSharer.get_connectionV   sG   € õ 	'Ø‰ˆ�Ù�7¤G×$;Ñ$;Ó$=×$EÑ$EÔFˆØ	�‰�”R—Y‘Y“[Ð!Ô"Øˆr   Nc                 óŒ  — ddl m} | j                  5  | j                  �� || j                  t	        j
                  «       j                  ¬«      }|j                  d«       |j                  «        | j                  j                  |«       | j                  j                  «       rt        j                  d«       | j                  j                  «        d| _	        d| _        d| _        | j                  j!                  «       D ]  \  }\  }} |«        Œ | j                  j#                  «        ddd«       y# 1 sw Y   yxY w)z:Stop the background thread and clear registered resources.r   rF   NrH   z._ResourceSharer thread did not stop when asked)rJ   rG   r=   r?   r   rK   rI   r   r   r@   ÚjoinÚis_aliver   Úsub_warningr>   r9   ÚitemsÚclear)r   ÚtimeoutrG   rP   rO   r   r   s          r   r   z_ResourceSharer.stop_   sæ   € å&Ø�Z‹ZØ�}‰}Ñ(Ù˜4Ÿ=™=Ü#*×#:Ñ#:Ó#<×#DÑ#DôF�à—‘�t”Ø—‘”	Ø—‘×!Ñ! 'Ô*Ø—<‘<×(Ñ(Ô*Ü×$Ñ$ð &;ô <à—‘×$Ñ$Ô&Ø#�”Ø $�”Ø!%�”Ø*.¯+©+×*;Ñ*;Ö*=Ñ&�C™˜$ Ù•Gð +>à—‘×!Ñ!Ô#÷! �Z‰Zús   “DD:Ä:Ec                 ó‚  — | j                   j                  «       D ]  \  }\  }} |«        Œ | j                   j                  «        | j                  j	                  | j
                  «       t        j                  «       | _        | j                  �| j                  j                  «        d | _        d | _
        d | _        y r   )r9   rU   rV   r:   Úappendr=   r;   r<   r>   r   r?   r@   )r   rO   r   r   s       r   rB   z_ResourceSharer._afterforkt   sŒ   € Ø"&§+¡+×"3Ñ"3Ö"5ÑˆC‘�$˜Ù�Gð #6à�‰×ÑÔð 	�‰×Ñ˜tŸz™zÔ*Ü—^‘^Ó%ˆŒ
Ø�>‰>Ð%Ø�N‰N× Ñ Ô"ØˆŒØˆŒØˆ�r   c                 ó\  — ddl m} | j                  �J ‚t        j                  d«        |t        j                  «       j                  ¬«      | _        | j                  j                  | _	        t        j                  | j                  ¬«      }d|_        |j                  «        || _        y )Nr   )ÚListenerz0starting listener and thread for sending handlesrH   )ÚtargetT)rJ   r[   r>   r   Údebugr   rK   rI   rN   r?   r;   ÚThreadÚ_serveÚdaemonÚstartr@   )r   r[   Úts      r   rD   z_ResourceSharer._start‚   sy   € Ý(Ø�~‰~Ð%Ð%Ð%Ü�
‰
ÐEÔFÙ!¬'×*AÑ*AÓ*C×*KÑ*KÔLˆŒØŸ™×.Ñ.ˆŒÜ×Ñ D§K¡KÔ0ˆØˆŒØ	�‰Œ	Øˆ�r   c                 ó6  — t        t        d«      r<t        j                  t        j                  t	        dt        j
                  «      «       	 	 | j                  j                  «       5 }|j                  «       }|€
	 d d d «       y |\  }}| j                  j                  |«      \  }}	  |||«        |«        	 d d d «       Œv#  |«        w xY w# 1 sw Y   ŒxY w#  t        j                  «       s$t        j                  t        j                  «       Ž  Y ŒUxY w)NÚpthread_sigmaskr   )ÚhasattrÚsignalrd   Ú	SIG_BLOCKÚrangeÚNSIGr>   ÚacceptÚrecvr9   Úpopr   Ú
is_exitingÚsysÚ
excepthookÚexc_info)r   r   ÚmsgrO   Údestination_pidr   r   s          r   r_   z_ResourceSharer._serve�   s×   € Ü”6Ð,Ô-Ü×"Ñ"¤6×#3Ñ#3´U¸1¼f¿k¹kÓ5JÔKØð4Ø—^‘^×*Ñ*Ô,°ØŸ)™)›+�CØ�{Ø÷ -Ð,ð ,/Ñ(�C˜Ø"&§+¡+§/¡/°#Ó"6‘K�D˜%ð Ù˜T ?Ô3á�÷ -ð øñ �ú÷ -Ð,ûð4Ü—‘Ô(Ü—N‘N¤C§L¡L£NÑ3üsH   ÁC Á)CÁ=C Â#CÂ*	CÂ3CÂ;C Ã	CÃCÃCÃC Ã:Dr   )r%   r&   r'   r(   r   r   Ústaticmethodr   r   rB   rD   r_   r)   r   r   r6   r6   A   s8   „ Ù8òCò.ð ñó ðó$ò*ò	ó4r   r6   )r1   rf   r!   rn   r;   Ú r   r   r   Ú__all__Úplatformr	   r*   r6   r   r   r)   r   r   Ú<module>rw      s…   ðó 
Û Û Û 
Û å Ý Ý àˆ(€ð ‡<�<�7ÒØ�ˆ}Ñ€G÷/ò /ð$ �ˆyÑ€G÷3ñ 3÷$]4ñ ]4ñ@ #Ó$Ð Ø×Ñ�r   