o
    €¨Êh/+  ã                   @   s6  d dl 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 d dlm	Z
 z
e j e  ¡ ¡ZW n ey9   dZY nw g d¢Zdd„ Zdd„ Zd	d
„ Zdd„ Zefdd„ZG dd„ dƒZG dd„ deƒZG dd„ deƒZeƒ ae d¡aeƒ a[eZi Z ej! "¡ D ]\Z#Z$e#dd… dkr•de#vr•e#e e$ < q€eƒ Z%dS )é    N)ÚWeakSet©Úprocess)ÚBaseProcessÚProcessÚcurrent_processÚactive_childrenc                   C   ó   t S )z@
    Return process object representing the current process
    )Ú_current_process© r   r   úB/var/www/html/env/lib/python3.10/site-packages/billiard/process.pyr   #   s   r   c                 C   s   |  a t_ d S ©N)r
   Ú_mprocr   r   r   r   Ú_set_current_process*   s   r   c                  C   s*   t tƒD ]} | j ¡ d urt | ¡ qd S r   )ÚlistÚ	_childrenÚ_popenÚpollÚdiscard)Úpr   r   r   Ú_cleanup/   s
   
€þr   c              
   C   s*   z|   ¡  W d S  tttfy   Y d S w r   )ÚflushÚAttributeErrorÚEnvironmentErrorÚNotImplementedError)Úfr   r   r   Ú_maybe_flush6   s
   ÿr   c                 C   s(   z| ƒ  W ttƒS  t y   g  Y S w )zN
    Return list of process objects corresponding to live child processes
    )Ú	TypeErrorr   r   )r   r   r   r   r   =   s   ýþr   c                   @   s2  e Zd ZdZdd„ Zddddi dfdd„Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
d5dd„Zdd„ Zdd„ Zedd„ ƒZejdd„ ƒZedd„ ƒZejdd„ ƒZedd„ ƒZejd d„ ƒZed!d"„ ƒZed#d$„ ƒZeZed%d&„ ƒZed'd(„ ƒZed)d*„ ƒZed+d,„ ƒZed-d.„ ƒZed/d0„ ƒZd1d2„ Zd3d4„ ZdS )6r   z€
    Process objects represent activity that is run in a separate process

    The class is analogous to `threading.Thread`
    c                 C   s   t ƒ ‚r   )r   ©Úselfr   r   r   Ú_PopenP   s   zBaseProcess._PopenNr   c           	      K   s°   |d u sJ dƒ‚t tƒ}tj|f | _tj ¡ | _t ¡ | _d | _	|| _
t|ƒ| _t|ƒ| _|pAt| ƒjd d dd„ | jD ƒ¡ | _|d urJ|| _td urSt | ¡ d| _d S )Nz#group argument must be None for nowú-ú:c                 s   s   � | ]}t |ƒV  qd S r   )Ústr)Ú.0Úir   r   r   Ú	<genexpr>`   s   € z'BaseProcess.__init__.<locals>.<genexpr>F)ÚnextÚ_process_counterr
   Ú	_identityÚ_configÚcopyÚosÚgetpidÚ_parent_pidr   Ú_targetÚtupleÚ_argsÚdictÚ_kwargsÚtypeÚ__name__ÚjoinÚ_nameÚdaemonÚ	_danglingÚaddÚ_controlled_termination)	r   ÚgroupÚtargetÚnameÚargsÚkwargsr8   Ú_kwÚcountr   r   r   Ú__init__S   s$   


ÿÿ

zBaseProcess.__init__c                 C   s"   | j r| j | ji | j¤Ž dS dS )zQ
        Method to be run in sub-process; can be overridden in sub-class
        N)r/   r1   r3   r   r   r   r   Úruni   s   ÿzBaseProcess.runc                 C   sR   | j du s	J dƒ‚| jt ¡ ksJ dƒ‚tƒ  |  | ¡| _ | j j| _t 	| ¡ dS )z%
        Start child process
        Nzcannot start a process twicez:can only start a process object created by current process)
r   r.   r,   r-   r   r    ÚsentinelÚ	_sentinelr   r:   r   r   r   r   Ústartp   s   ÿ
zBaseProcess.startc                 C   s   | j d ur| j  ¡  d S d S r   )r   Úcloser   r   r   r   rH   |   s   
ÿzBaseProcess.closec                 C   s   | j  ¡  dS )zT
        Terminate process; sends SIGTERM signal or uses TerminateProcess()
        N)r   Ú	terminater   r   r   r   rI   €   s   zBaseProcess.terminatec                 C   s   d| _ |  ¡  d S )NT)r;   rI   r   r   r   r   Úterminate_controlled†   s   z BaseProcess.terminate_controlledc                 C   sV   | j t ¡ ksJ dƒ‚| jdusJ dƒ‚| j |¡}|dur)t | ¡ |  ¡  dS dS )z5
        Wait until child process terminates
        zcan only join a child processNzcan only join a started process)r.   r,   r-   r   Úwaitr   r   rH   )r   ÚtimeoutÚresr   r   r   r6   Š   s   
þzBaseProcess.joinc                 C   sF   | t u rdS | jt ¡ ksJ dƒ‚| jdu rdS | j ¡  | jjdu S )z1
        Return whether process is alive
        Tzcan only test a child processNF)r
   r.   r,   r-   r   r   Ú
returncoder   r   r   r   Úis_alive•   s   

zBaseProcess.is_alivec                 C   s   | j d u rdS | j  ¡ d u S )NF©r   r   r   r   r   r   Ú	_is_alive¡   s   
zBaseProcess._is_alivec                 C   ó   | j S r   )r7   r   r   r   r   r>   ¦   s   zBaseProcess.namec                 C   s   t |tƒs	J dƒ‚|| _d S )Nzname must be a string)Ú
isinstancer#   r7   )r   r>   r   r   r   r>   ª   s   
c                 C   s   | j  dd¡S )z4
        Return whether process is a daemon
        r8   F©r*   Úgetr   r   r   r   r8   ¯   s   zBaseProcess.daemonc                 C   s    | j du s	J dƒ‚|| jd< dS )z1
        Set whether process is a daemon
        Nzprocess has already startedr8   )r   r*   )r   Údaemonicr   r   r   r8   ¶   s   c                 C   s
   | j d S )NÚauthkey)r*   r   r   r   r   rW   ¾   s   
zBaseProcess.authkeyc                 C   s   t |ƒ| jd< dS )z2
        Set authorization key of process
        rW   N)ÚAuthenticationStringr*   )r   rW   r   r   r   rW   Â   s   c                 C   s   | j du r| j S | j  ¡ S )zM
        Return exit code of process or `None` if it has yet to stop
        NrP   r   r   r   r   ÚexitcodeÉ   s   

zBaseProcess.exitcodec                 C   s   | t u rt ¡ S | jo| jjS )zU
        Return identifier (PID) of process or `None` if it has yet to start
        )r
   r,   r-   r   Úpidr   r   r   r   ÚidentÒ   s   zBaseProcess.identc                 C   s    z| j W S  ty   tdƒ‚w )z{
        Return a file descriptor (Unix) or handle (Windows) suitable for
        waiting for process termination.
        zprocess not started)rF   r   Ú
ValueErrorr   r   r   r   rE   Þ   s
   ÿzBaseProcess.sentinelc                 C   r	   r   )r(   r   r   r   r   Ú_counteré   ó   zBaseProcess._counterc                 C   r	   r   )r   r   r   r   r   r   î   r^   zBaseProcess._childrenc                 C   rR   r   )rW   r   r   r   r   Ú_authkeyó   ó   zBaseProcess._authkeyc                 C   rR   r   )r8   r   r   r   r   Ú	_daemonicø   r`   zBaseProcess._daemonicc                 C   s   | j  d¡S )NÚtempdirrT   r   r   r   r   Ú_tempdirý   s   zBaseProcess._tempdirc                 C   s˜   | t u rd}n| jt ¡ krd}n| jd u rd}n| j ¡ d ur$| j}nd}t|ƒtu r;|dkr3d}ndt	 
||¡ }dt| ƒj| j|| jrHdpId	f S )
NÚstartedÚunknownÚinitialr   Ústoppedzstopped[%s]z<%s(%s, %s%s)>z daemonÚ )r
   r.   r,   r-   r   r   rY   r4   ÚintÚ_exitcode_to_namerU   r5   r7   r8   )r   Ústatusr   r   r   Ú__repr__  s    
ÿzBaseProcess.__repr__c                 C   s¨  ddl m}m} �z7z“| jd ur| | j¡ t d¡atƒ a	t
jd ur=zt
j ¡  ttjƒt
_W n tttfy<   Y nw t}t| ƒ tjjj}t| ¡ ƒ}| d ¡ |D ]}|rat|| tjƒsnt |¡jD ]}|  ¡  qgqUt! "¡ t_#z|j$ %¡  | &¡  W ~n~w | 'd| j(¡ z|  )¡  d}W | *¡  n| *¡  w W ny t+yá }	 z8|	j,s«d}n,t|	j,d t-ƒr¹|	j,d }nt
j. /t0|	j,d ƒd ¡ t1t
j.ƒ t|	j,d t0ƒrÕdnd}W Y d }	~	nOd }	~	w   d}|j2d| j3dd��sdd l4}
t
j. /d	| j3 ¡ |
 5¡  Y W | 'd
| j(|¡ t1t
j6ƒ t1t
j.ƒ |S W | 'd
| j(|¡ t1t
j6ƒ t1t
j.ƒ |S W | 'd
| j(|¡ t1t
j6ƒ t1t
j.ƒ |S | 'd
| j(|¡ t1t
j6ƒ t1t
j.ƒ w )Né   )ÚutilÚcontextz#child process %s calling self.run()r   Ú
z
Process %sT)Úexc_infozProcess %s:
z#process %s exiting with exitcode %d)7rh   rn   ro   Ú_start_methodÚ_force_start_methodÚ	itertoolsrB   r(   Úsetr   ÚsysÚstdinrH   Úopenr,   Údevnullr   ÚOSErrorr\   r
   r   ÚloggingÚLoggerÚmanagerÚ
loggerDictr   ÚkeysÚappendrS   ÚPlaceHolderÚ	getLoggerÚhandlersÚ
createLockÚ	threadingÚRLockÚ_lockÚ_finalizer_registryÚclearÚ_run_after_forkersÚinforZ   rD   Ú_exit_functionÚ
SystemExitr?   ri   ÚstderrÚwriter#   r   Úerrorr>   Ú	tracebackÚ	print_excÚstdout)r   rn   ro   Úold_processr~   Úlogger_namesr>   ÚhandlerrY   Úexcr‘   r   r   r   Ú
_bootstrap  s˜   



ÿ

ÿ
€



€€ÿ

êÿ

€ûÿ

ûÿ
zBaseProcess._bootstrapr   )r5   Ú
__module__Ú__qualname__Ú__doc__r    rC   rD   rG   rH   rI   rJ   r6   rO   rQ   Úpropertyr>   Úsetterr8   rW   rY   r[   rZ   rE   r]   r   r_   ra   rc   rl   r˜   r   r   r   r   r   I   sZ    
ÿ








	






r   c                   @   ó   e Zd Zdd„ ZdS )rX   c                 C   s,   ddl m} |ƒ d u rtdƒ‚tt| ƒffS )Nrm   )Úget_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)ro   rŸ   r   rX   Úbytes)r   rŸ   r   r   r   Ú
__reduce__e  s   
ÿzAuthenticationString.__reduce__N)r5   r™   rš   r¡   r   r   r   r   rX   c  ó    rX   c                   @   rž   )Ú_MainProcessc                 C   s2   d| _ d| _d | _d | _tt d¡ƒddœ| _d S )Nr   ÚMainProcessé    z/mp)rW   Ú	semprefix)r)   r7   r.   r   rX   r,   Úurandomr*   r   r   r   r   rC   u  s   ÿz_MainProcess.__init__N)r5   r™   rš   rC   r   r   r   r   r£   s  r¢   r£   rm   é   ÚSIGÚ_)&r,   rv   Úsignalrt   r{   r…   Ú_weakrefsetr   Úmultiprocessingr   r   ÚpathÚabspathÚgetcwdÚORIGINAL_DIRrz   Ú__all__r   r   r   r   r   r   r    rX   r£   r
   rB   r(   ru   r   r   rj   Ú__dict__Úitemsr>   Úsignumr9   r   r   r   r   Ú<module>   sF   ÿ  


€
