Ë
    òT•jk/  ã                   óú  — g d ¢Z 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 	 ej                  j                   ej                  «       «      Zd„ Zd„ Zd„ Zd„ Z G d„ d	e«      Z G d
„ de«      Z G d„ de«      Z G d„ de«      Zda e«       a ej2                  d«      a e«       a[i Z eej>                  jA                  «       «      D ]  \  Z!Z"e!dd dk(  sŒde!vsŒde!› �ee" <   Œ [![" e«       Z#y# e$ r dZY Œ¯w xY w))ÚBaseProcessÚcurrent_processÚactive_childrenÚparent_processé    N)ÚWeakSetc                  ó   — t         S )z@
    Return process object representing the current process
    )Ú_current_process© ó    ú./usr/lib/python3.12/multiprocessing/process.pyr   r   %   s
   € ô Ðr   c                  ó4   — t        «        t        t        «      S )zN
    Return list of process objects corresponding to live child processes
    )Ú_cleanupÚlistÚ	_childrenr
   r   r   r   r   +   s   € ô „JÜ”	‹?Ðr   c                  ó   — t         S )z?
    Return process object representing the parent process
    )Ú_parent_processr
   r   r   r   r   3   s
   € ô Ðr   c                  ó–   — t        t        «      D ]7  } | j                  x}sŒ|j                  «       €Œ#t        j	                  | «       Œ9 y ©N)r   r   Ú_popenÚpollÚdiscard)ÚpÚchild_popens     r   r   r   =   s@   € ä”)‹_ò !ˆØŸ8™8Ð#ˆKÑ#¨×)9Ñ)9Ó);Ñ)GÜ×Ñ˜aÕ ñ!r   c                   óN  — e Zd ZdZd„ Zddddi fddœd„Zd„ Zd„ Zd	„ Zd
„ Z	d„ Z
dd„Zd„ Zd„ Zed„ «       Zej                   d„ «       Zed„ «       Zej                   d„ «       Zed„ «       Zej                   d„ «       Zed„ «       Zed„ «       ZeZed„ «       Zd„ Zdd„Zed„ «       Zy)r   z€
    Process objects represent activity that is run in a separate process

    The class is analogous to `threading.Thread`
    c                 ó   — t         ‚r   )ÚNotImplementedError©Úselfs    r   Ú_PopenzBaseProcess._PopenM   s   € Ü!Ð!r   Nr
   )Údaemonc                ó6  — |�J d«       ‚t        t        «      }t        j                  |fz   | _        t        j                  j                  «       | _        t        j                  «       | _        t        j                  | _
        d | _        d| _        || _        t        |«      | _        t!        |«      | _        |xs; t%        | «      j&                  dz   dj)                  d„ | j                  D «       «      z   | _        |�|| _        t.        j1                  | «       y )Nz#group argument must be None for nowFú-ú:c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   )Ústr)Ú.0Úis     r   ú	<genexpr>z'BaseProcess.__init__.<locals>.<genexpr>^   s   è ø€ Ò=¨œc !ŸfÑ=ùs   ‚)ÚnextÚ_process_counterr	   Ú	_identityÚ_configÚcopyÚosÚgetpidÚ_parent_pidÚnameÚ_parent_namer   Ú_closedÚ_targetÚtupleÚ_argsÚdictÚ_kwargsÚtypeÚ__name__ÚjoinÚ_namer    Ú	_danglingÚadd)r   ÚgroupÚtargetr1   ÚargsÚkwargsr    Úcounts           r   Ú__init__zBaseProcess.__init__P   sß   € àˆ}ÐCÐCÓCˆ}ÜÔ%Ó&ˆÜ)×3Ñ3°u°hÑ>ˆŒÜ'×/Ñ/×4Ñ4Ó6ˆŒÜŸ9™9›;ˆÔÜ,×1Ñ1ˆÔØˆŒØˆŒØˆŒÜ˜4“[ˆŒ
Ü˜F“|ˆŒØò >œT $›Z×0Ñ0°3Ñ6Ø—X‘XÑ=¨d¯n©nÔ=Ó=ñ>ˆŒ
àÐØ ˆDŒKÜ�‰�dÕr   c                 ó2   — | j                   rt        d«      ‚y )Nzprocess object is closed)r3   Ú
ValueErrorr   s    r   Ú_check_closedzBaseProcess._check_closedc   s   € Ø�<Š<ÜÐ7Ó8Ð8ð r   c                 ój   — | j                   r' | j                   | j                  i | j                  ¤Ž yy)zQ
        Method to be run in sub-process; can be overridden in sub-class
        N)r4   r6   r8   r   s    r   ÚrunzBaseProcess.rung   s+   € ð �<Š<ØˆD�L‰L˜$Ÿ*™*Ð5¨¯©Ó5ð r   c                 ó’  — | j                  «        | j                  �J d«       ‚| j                  t        j                  «       k(  sJ d«       ‚t
        j                  j                  d«      rJ d«       ‚t        «        | j                  | «      | _        | j                  j                  | _        | `| `| `t        j!                  | «       y)z%
        Start child process
        Nzcannot start a process twicez:can only start a process object created by current processr    z3daemonic processes are not allowed to have children)rG   r   r0   r.   r/   r	   r,   Úgetr   r   ÚsentinelÚ	_sentinelr4   r6   r8   r   r>   r   s    r   ÚstartzBaseProcess.startn   s³   € ð 	×ÑÔØ�{‰{Ð"ÐBÐ$BÓBÐ"Ø×Ñ¤2§9¡9£;Ò.ð 	LØKó	LÐ.ä#×+Ñ+×/Ñ/°Ô9ð 	EØDó	EÐ9äŒ
Ø—k‘k $Ó'ˆŒØŸ™×-Ñ-ˆŒð ˆL˜$˜* d lÜ�‰�dÕr   c                 óX   — | j                  «        | j                  j                  «        y)zT
        Terminate process; sends SIGTERM signal or uses TerminateProcess()
        N)rG   r   Ú	terminater   s    r   rP   zBaseProcess.terminate€   s    € ð 	×ÑÔØ�‰×ÑÕr   c                 óX   — | j                  «        | j                  j                  «        y)zT
        Terminate process; sends SIGKILL signal or uses TerminateProcess()
        N)rG   r   Úkillr   s    r   rR   zBaseProcess.kill‡   s    € ð 	×ÑÔØ�‰×ÑÕr   c                 ó   — | j                  «        | j                  t        j                  «       k(  sJ d«       ‚| j                  €J d«       ‚| j                  j                  |«      }|�t        j                  | «       yy)z5
        Wait until child process terminates
        zcan only join a child processNzcan only join a started process)rG   r0   r.   r/   r   Úwaitr   r   )r   ÚtimeoutÚress      r   r;   zBaseProcess.joinŽ   sr   € ð 	×ÑÔØ×Ñ¤2§9¡9£;Ò.ÐOÐ0OÓOÐ.Ø�{‰{Ð&ÐIÐ(IÓIÐ&Ø�k‰k×Ñ˜wÓ'ˆØˆ?Ü×Ñ˜dÕ#ð r   c                 ó  — | j                  «        | t        u ry| j                  t        j                  «       k(  sJ d«       ‚| j
                  €y| j
                  j                  «       }|€yt        j                  | «       y)z1
        Return whether process is alive
        Tzcan only test a child processF)	rG   r	   r0   r.   r/   r   r   r   r   )r   Ú
returncodes     r   Úis_alivezBaseProcess.is_alive™   su   € ð 	×ÑÔØÔ#Ñ#ØØ×Ñ¤2§9¡9£;Ò.ÐOÐ0OÓOÐ.à�;‰;ÐØà—[‘[×%Ñ%Ó'ˆ
ØÐØä×Ñ˜dÔ#Ør   c                 óä   — | j                   �]| j                   j                  «       €t        d«      ‚| j                   j                  «        d| _         | `t
        j                  | «       d| _        y)zÂ
        Close the Process object.

        This method releases resources held by the Process object.  It is
        an error to call this method if the child process is still running.
        Nz^Cannot close a process while it is still running. You should first call join() or terminate().T)r   r   rF   ÚcloserM   r   r   r3   r   s    r   r[   zBaseProcess.close¬   sg   € ð �;‰;Ð"Ø�{‰{×ÑÓ!Ð)Ü ð "Pó Qð Qà�K‰K×ÑÔØˆDŒKØ�Ü×Ñ˜dÔ#Øˆ�r   c                 ó   — | j                   S r   )r<   r   s    r   r1   zBaseProcess.name½   s   € à�z‰zÐr   c                 ó@   — t        |t        «      sJ d«       ‚|| _        y )Nzname must be a string)Ú
isinstancer%   r<   )r   r1   s     r   r1   zBaseProcess.nameÁ   s   € ä˜$¤Ô$Ð=Ð&=Ó=Ð$Øˆ�
r   c                 ó:   — | j                   j                  dd«      S )z4
        Return whether process is a daemon
        r    F)r,   rK   r   s    r   r    zBaseProcess.daemonÆ   s   € ð
 �|‰|×Ñ ¨%Ó0Ð0r   c                 óH   — | j                   �J d«       ‚|| j                  d<   y)z1
        Set whether process is a daemon
        Nzprocess has already startedr    )r   r,   )r   Údaemonics     r   r    zBaseProcess.daemonÍ   s(   € ð
 �{‰{Ð"ÐAÐ$AÓAÐ"Ø!)ˆ�‰�XÒr   c                 ó    — | j                   d   S )NÚauthkey)r,   r   s    r   rc   zBaseProcess.authkeyÕ   s   € à�|‰|˜IÑ&Ð&r   c                 ó4   — t        |«      | j                  d<   y)z2
        Set authorization key of process
        rc   N)ÚAuthenticationStringr,   )r   rc   s     r   rc   zBaseProcess.authkeyÙ   s   € ô
 #7°wÓ"?ˆ�‰�YÒr   c                 ó†   — | j                  «        | j                  €| j                  S | j                  j                  «       S )zM
        Return exit code of process or `None` if it has yet to stop
        )rG   r   r   r   s    r   ÚexitcodezBaseProcess.exitcodeà   s7   € ð
 	×ÑÔØ�;‰;ÐØ—;‘;ÐØ�{‰{×ÑÓ!Ð!r   c                 ó¢   — | j                  «        | t        u rt        j                  «       S | j                  xr | j                  j
                  S )zU
        Return identifier (PID) of process or `None` if it has yet to start
        )rG   r	   r.   r/   r   Úpidr   s    r   ÚidentzBaseProcess.identê   s<   € ð
 	×ÑÔØÔ#Ñ#Ü—9‘9“;Ðà—;‘;Ò2 4§;¡;§?¡?Ð2r   c                 ón   — | j                  «        	 | j                  S # t        $ r t        d«      d‚w xY w)z{
        Return a file descriptor (Unix) or handle (Windows) suitable for
        waiting for process termination.
        zprocess not startedN)rG   rM   ÚAttributeErrorrF   r   s    r   rL   zBaseProcess.sentinel÷   s<   € ð 	×ÑÔð	>Ø—>‘>Ð!øÜò 	>ÜÐ2Ó3¸Ð=ð	>ús   ’ ž4c                 óª  — d }| t         u rd}nc| j                  rd}nT| j                  t        j                  «       k7  rd}n0| j
                  €d}n!| j
                  j                  «       }|�d}nd}t        | «      j                  d| j                  z  g}| j
                  �(|j                  d| j
                  j                  z  «       |j                  d| j                  z  «       |j                  |«       |�*t        j                  ||«      }|j                  d	|z  «       | j                  r|j                  d
«       ddj                  |«      z  S )NÚstartedÚclosedÚunknownÚinitialÚstoppedzname=%rzpid=%sz	parent=%szexitcode=%sr    z<%s>ú )r	   r3   r0   r.   r/   r   r   r9   r:   r<   Úappendri   Ú_exitcode_to_namerK   r    r;   )r   rg   ÚstatusÚinfos       r   Ú__repr__zBaseProcess.__repr__  s  € ØˆØÔ#Ñ#Ø‰FØ�\Š\Ø‰FØ×Ñ¤§¡£Ò,Ø‰FØ�[‰[Ð Ø‰Fà—{‘{×'Ñ'Ó)ˆHØÐ#Ø"‘à"�ä�T“
×#Ñ# Y°·±Ñ%;Ð<ˆØ�;‰;Ð"Ø�K‰K˜ 4§;¡;§?¡?Ñ2Ô3Ø�‰�K $×"2Ñ"2Ñ2Ô3Ø�‰�FÔØÐÜ(×,Ñ,¨X°xÓ@ˆHØ�K‰K˜¨Ñ0Ô1Ø�;Š;Ø�K‰K˜Ô!Ø˜Ÿ™ ›Ñ&Ð&r   c                 ó¸  — ddl m}m} 	 | j                  �|j	                  | j                  «       t        j                  d«      at        «       a	|j                  «        t        }| at        | j                  | j                  |«      at         j"                  r"t!        j$                  «       j'                  «        	 | j)                  «        ~|j+                  d«       	 | j-                  «        d}|j/                  «        	 t!        jF                  «        |j+                  d|z  «       |jI                  «        |S # ~w xY w# |j/                  «        w xY w# t0        $ rw}|j2                  €d}n^t5        |j2                  t6        «      r|j2                  }n7t8        j:                  j=                  t?        |j2                  «      dz   «       d}Y d }~ŒÐd }~w d}dd l }t8        j:                  j=                  d| jB                  z  «       |jE                  «        Y �ŒxY w# t!        jF                  «        |j+                  dz  «       |jI                  «        w xY w)Né   )ÚutilÚcontextz child process calling self.run()r   ú
zProcess %s:
z process exiting with exitcode %d)%Ú r{   r|   Ú_start_methodÚ_force_start_methodÚ	itertoolsrC   r*   Úsetr   Ú_close_stdinr	   Ú_ParentProcessr2   r0   r   Ú	threadingÚ_HAVE_THREAD_NATIVE_IDÚmain_threadÚ_set_native_idÚ_after_forkrw   rI   Ú_exit_functionÚ
SystemExitÚcoder^   ÚintÚsysÚstderrÚwriter%   Ú	tracebackr1   Ú	print_excÚ	_shutdownÚ_flush_std_streams)r   Úparent_sentinelr{   r|   Úold_processrg   Úer‘   s           r   Ú
_bootstrapzBaseProcess._bootstrap"  sÏ  € ß#ð(	&Ø×!Ñ!Ð-Ø×+Ñ+¨D×,>Ñ,>Ô?Ü(Ÿ™¨qÓ1ÐÜ›ˆIØ×ÑÔÜ*ˆKØ#ÐÜ,Ø×!Ñ! 4×#3Ñ#3°_óFˆOä×/Ò/Ü×%Ñ%Ó'×6Ñ6Ô8ð Ø× Ñ Ô"ð  Ø�I‰IÐ8Ô9ð&Ø—‘”
Ø�à×#Ñ#Õ%ô ×ÑÔ!Ø�I‰IÐ8¸8ÑCÔDØ×#Ñ#Ô%àˆøñ3  ûð ×#Ñ#Õ%ûÜò 	Ø�v‰vˆ~Ø‘Ü˜AŸF™F¤CÔ(ØŸ6™6‘ä—
‘
× Ñ ¤ Q§V¡V£¨tÑ!3Ô4Ø�ÿøð	"ØˆHÛÜ�J‰J×Ñ˜_¨t¯y©yÑ8Ô9Ø×Ñ×!ûä×ÑÔ!Ø�I‰IÐ8¸8ÑCÔDØ×#Ñ#Õ%úsb   ŠB1E Â<D< ÃE ÃE Ã1E ÄH Ä<D?Ä?E ÅEÅE Å	HÅ A-GÇH ÇAHÈH È:Ic                  ód   — ddl m}  | j                  j                  «        | j	                  «        y )Nrz   ©r{   )r~   r{   Ú_finalizer_registryÚclearÚ_run_after_forkersrš   s    r   r‰   zBaseProcess._after_forkR  s#   € åØ× Ñ ×&Ñ&Ô(Ø×ÑÕ!r   r   )r:   Ú
__module__Ú__qualname__Ú__doc__r   rD   rG   rI   rN   rP   rR   r;   rY   r[   Úpropertyr1   Úsetterr    rc   rg   rj   ri   rL   rx   r˜   Ústaticmethodr‰   r
   r   r   r   r   G   s4  „ ñò
"ð "¨$°TÀÈ2ð Øôò&9ò6òò$ òó	$òò&ð" ñó ðð 
‡[�[ñó ðð ñ1ó ð1ð ‡]�]ñ*ó ð*ð ñ'ó ð'ð ‡^�^ñ@ó ð@ð ñ"ó ð"ð ñ3ó ð3ð €Càñ	>ó ð	>ò'ó>.ð` ñ"ó ñ"r   r   c                   ó   — e Zd Zd„ Zy)re   c                 óV   — ddl m}  |«       €t        d«      ‚t        t	        | «      ffS )Nrz   )Úget_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)r|   r¦   Ú	TypeErrorre   Úbytes)r   r¦   s     r   Ú
__reduce__zAuthenticationString.__reduce__^  s3   € Ý/ÙÓÐ'Üð2óð ô $¤e¨D£k ^Ð3Ð3r   N)r:   rž   rŸ   r©   r
   r   r   re   re   ]  s   „ ó4r   re   c                   ó4   — e Zd Zd„ Zd„ Zed„ «       Zdd„ZeZy)r„   c                 ót   — d| _         || _        || _        d | _        d | _        d| _        || _        i | _        y )Nr
   F)r+   r<   Ú_pidr0   r   r3   rM   r,   )r   r1   ri   rL   s       r   rD   z_ParentProcess.__init__n  s;   € ØˆŒØˆŒ
ØˆŒ	ØˆÔØˆŒØˆŒØ!ˆŒØˆ�r   c                 ó:   — ddl m}  || j                  gd¬«       S )Nr   ©rT   ©rU   ©Úmultiprocessing.connectionrT   rM   )r   rT   s     r   rY   z_ParentProcess.is_alivex  s   € Ý3Ù˜Ÿ™Ð(°!Ô4Ð4Ð4r   c                 ó   — | j                   S r   )r¬   r   s    r   rj   z_ParentProcess.ident|  s   € à�y‰yÐr   Nc                 ó:   — ddl m}  || j                  g|¬«       y)z6
        Wait until parent process terminates
        r   r®   r¯   Nr°   )r   rU   rT   s      r   r;   z_ParentProcess.join€  s   € õ 	4Ùˆd�n‰nÐ wÖ/r   r   )	r:   rž   rŸ   rD   rY   r¡   rj   r;   ri   r
   r   r   r„   r„   l  s,   „ òò5ð ñó ðó0ð �Cr   r„   c                   ó   — e Zd Zd„ Zd„ Zy)Ú_MainProcessc                 ó–   — d| _         d| _        d | _        d | _        d| _        t        t        j                  d«      «      ddœ| _        y )Nr
   ÚMainProcessFé    z/mp)rc   Ú	semprefix)	r+   r<   r0   r   r3   re   r.   Úurandomr,   r   s    r   rD   z_MainProcess.__init__�  sB   € ØˆŒØ"ˆŒ
ØˆÔØˆŒØˆŒÜ#7¼¿
¹
À2»Ó#GØ%*ñ,ˆ�r   c                  ó   — y r   r
   r   s    r   r[   z_MainProcess.close¡  s   € Ør   N)r:   rž   rŸ   rD   r[   r
   r   r   rµ   rµ   �  s   „ ò,ó$r   rµ   rz   é   ÚSIGÚ_r"   )$Ú__all__r.   rŽ   Úsignalr�   r…   Ú_weakrefsetr   ÚpathÚabspathÚgetcwdÚORIGINAL_DIRÚOSErrorr   r   r   r   Úobjectr   r¨   re   r„   rµ   r   r	   rC   r*   r‚   r   ru   r   Ú__dict__Úitemsr1   Úsignumr=   r
   r   r   ú<module>rË      s+  ðò€ó 
Û 
Û Û Û Ý ðØ—7‘7—?‘? 9 2§9¡9£;Ó/€Lòòòò!ôO"�&ô O"ôl4˜5ô 4ô�[ô ôB�;ô ð0 €Ù“>Ð Ø"�9—?‘? 1Ó%Ð Ù‹E€	Øð Ð á˜Ÿ™×.Ñ.Ó0Ó1ò 0�L€Dˆ&ØˆBˆQ€x�ƒ˜3 dš?Ø'(¨¨ ZÐ˜6˜'Ò"ð0ð 	ˆ&ñ ‹I�	øðs ò Ø‚Lðús    *C0 Ã0C:Ã9C: