o
    Õ­jÎ
  ã                   @  s‚   d Z ddlm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dlmZ e ¡  e d¡Zddd„Zddd„ZdS )ze
Some light wrappers around Python's multiprocessing, to deal with cleanly
starting child processes.
é    )ÚannotationsN)ÚSpawnProcess)Úsocket)ÚCallable)ÚConfigÚspawnÚconfigr   ÚtargetúCallable[..., None]Úsocketsúlist[socket]Úreturnr   c              	   C  sF   zt j ¡ }W n ttfy   d}Y nw | |||dœ}tjt|d�S )aÔ  
    Called in the parent process, to instantiate a new child process instance.
    The child is not yet started at this point.

    * config - The Uvicorn configuration instance.
    * target - A callable that accepts a list of sockets. In practice this will
               be the `Server.run()` method.
    * sockets - A list of sockets to pass to the server. Sockets are bound once
                by the parent process, and then passed to the child processes.
    N©r   r	   r   Ústdin_fileno)r	   Úkwargs)ÚsysÚstdinÚfilenoÚAttributeErrorÚOSErrorr   ÚProcessÚsubprocess_started)r   r	   r   r   r   © r   úP/var/www/html/CropPilot/venv/lib/python3.10/site-packages/uvicorn/_subprocess.pyÚget_subprocess   s   ÿür   r   ú
int | NoneÚNonec                 C  sB   |dur
t  |¡t_|  ¡  z||d� W dS  ty    Y dS w )aú  
    Called when the child process starts.

    * config - The Uvicorn configuration instance.
    * target - A callable that accepts a list of sockets. In practice this will
               be the `Server.run()` method.
    * sockets - A list of sockets to pass to the server. Sockets are bound once
                by the parent process, and then passed to the child processes.
    * stdin_fileno - The file number of sys.stdin, so that it can be reattached
                     to the child process.
    N)r   )ÚosÚfdopenr   r   Úconfigure_loggingÚKeyboardInterruptr   r   r   r   r   6   s   ýr   )r   r   r	   r
   r   r   r   r   )
r   r   r	   r
   r   r   r   r   r   r   )Ú__doc__Ú
__future__r   Úmultiprocessingr   r   Úmultiprocessing.contextr   r   Útypingr   Úuvicorn.configr   Úallow_connection_picklingÚget_contextr   r   r   r   r   r   r   Ú<module>   s    

!