509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \¥*  ã               @   s´  d dl Z d dlZd dlZddlmZ ddlmZ g ZG dd„ deƒZG dd„ deƒZ	G d	d
„ d
eƒZ
G dd„ deƒZG dd„ deƒZG dd„ dejƒZG dd„ deƒZedd„ eeƒD ƒƒe_ejdk�rPG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ deƒZG dd„ deƒZG d d!„ d!eƒZeƒ eƒ eƒ d"œZeed# ƒZn8G d$d„ dejƒZG d%d„ deƒZd&eƒ iZeed& ƒZd'd(„ Zejƒ Zd)d*„ Zd+d,„ Z d-d.„ Z!dS )/é    Né   )Úprocess)Ú	reductionc               @   s   e Zd ZdS )ÚProcessErrorN)Ú__name__Ú
__module__Ú__qualname__© r	   r	   ú//usr/lib64/python3.6/multiprocessing/context.pyr      s   r   c               @   s   e Zd ZdS )ÚBufferTooShortN)r   r   r   r	   r	   r	   r
   r      s   r   c               @   s   e Zd ZdS )ÚTimeoutErrorN)r   r   r   r	   r	   r	   r
   r      s   r   c               @   s   e Zd ZdS )ÚAuthenticationErrorN)r   r   r   r	   r	   r	   r
   r      s   r   c               @   sV  e Zd ZeZeZeZeZeej	ƒZ	eej
ƒZ
dd„ Zdd„ ZdBdd„Zdd	„ Zd
d„ ZdCdd„ZdDdd„ZdEdd„Zdd„ ZdFdd„ZdGdd„ZdHdd„Zdd„ Zddf dfdd „Zd!d"„ Zd#d$„ Zdd%œd&d'„Zdd%œd(d)„Zd*d+„ Zd,d-„ ZdId.d/„Zd0d1„ Z d2d3„ Z!d4d5„ Z"dJd6d7„Z#dKd9d:„Z$dLd;d<„Z%e&d=d>„ ƒZ'e'j(d?d>„ ƒZ'd@dA„ Z)dS )MÚBaseContextc             C   s"   t jƒ }|dkrtdƒ‚n|S dS )z(Returns the number of CPUs in the systemNzcannot determine number of cpus)ÚosÚ	cpu_countÚNotImplementedError)ÚselfZnumr	   r	   r
   r   (   s    
zBaseContext.cpu_countc             C   s&   ddl m} || jƒ d�}|jƒ  |S )z½Returns a manager associated with a running server process

        The managers methods such as `Lock()`, `Condition()` and `Queue()`
        can be used to create shared objects.
        r   )ÚSyncManager)Úctx)Zmanagersr   Úget_contextÚstart)r   r   Úmr	   r	   r
   ÚManager0   s    zBaseContext.ManagerTc             C   s   ddl m} ||ƒS )z1Returns two connection object connected by a piper   )ÚPipe)Ú
connectionr   )r   Zduplexr   r	   r	   r
   r   ;   s    zBaseContext.Pipec             C   s   ddl m} || jƒ d�S )z#Returns a non-recursive lock objectr   )ÚLock)r   )Úsynchronizer   r   )r   r   r	   r	   r
   r   @   s    zBaseContext.Lockc             C   s   ddl m} || jƒ d�S )zReturns a recursive lock objectr   )ÚRLock)r   )r   r   r   )r   r   r	   r	   r
   r   E   s    zBaseContext.RLockNc             C   s   ddl m} ||| jƒ d�S )zReturns a condition objectr   )Ú	Condition)r   )r   r   r   )r   Úlockr   r	   r	   r
   r   J   s    zBaseContext.Conditionr   c             C   s   ddl m} ||| jƒ d�S )zReturns a semaphore objectr   )Ú	Semaphore)r   )r   r    r   )r   Úvaluer    r	   r	   r
   r    O   s    zBaseContext.Semaphorec             C   s   ddl m} ||| jƒ d�S )z"Returns a bounded semaphore objectr   )ÚBoundedSemaphore)r   )r   r"   r   )r   r!   r"   r	   r	   r
   r"   T   s    zBaseContext.BoundedSemaphorec             C   s   ddl m} || jƒ d�S )zReturns an event objectr   )ÚEvent)r   )r   r#   r   )r   r#   r	   r	   r
   r#   Y   s    zBaseContext.Eventc             C   s    ddl m} ||||| jƒ d�S )zReturns a barrier objectr   )ÚBarrier)r   )r   r$   r   )r   ZpartiesÚactionZtimeoutr$   r	   r	   r
   r$   ^   s    zBaseContext.Barrierr   c             C   s   ddl m} ||| jƒ d�S )zReturns a queue objectr   )ÚQueue)r   )Úqueuesr&   r   )r   Úmaxsizer&   r	   r	   r
   r&   c   s    zBaseContext.Queuec             C   s   ddl m} ||| jƒ d�S )zReturns a queue objectr   )ÚJoinableQueue)r   )r'   r)   r   )r   r(   r)   r	   r	   r
   r)   h   s    zBaseContext.JoinableQueuec             C   s   ddl m} || jƒ d�S )zReturns a queue objectr   )ÚSimpleQueue)r   )r'   r*   r   )r   r*   r	   r	   r
   r*   m   s    zBaseContext.SimpleQueuec             C   s"   ddl m} |||||| jƒ d�S )zReturns a process pool objectr   )ÚPool)Úcontext)Zpoolr+   r   )r   Z	processesZinitializerZinitargsZmaxtasksperchildr+   r	   r	   r
   r+   r   s    
zBaseContext.Poolc             G   s   ddl m} ||f|žŽ S )zReturns a shared objectr   )ÚRawValue)Úsharedctypesr-   )r   Útypecode_or_typeÚargsr-   r	   r	   r
   r-   y   s    zBaseContext.RawValuec             C   s   ddl m} |||ƒS )zReturns a shared arrayr   )ÚRawArray)r.   r1   )r   r/   Úsize_or_initializerr1   r	   r	   r
   r1   ~   s    zBaseContext.RawArray)r   c            G   s&   ddl m} ||f|ž|| jƒ dœŽS )z$Returns a synchronized shared objectr   )ÚValue)r   r   )r.   r3   r   )r   r/   r   r0   r3   r	   r	   r
   r3   ƒ   s    zBaseContext.Valuec            C   s    ddl m} ||||| jƒ d�S )z#Returns a synchronized shared arrayr   )ÚArray)r   r   )r.   r4   r   )r   r/   r2   r   r4   r	   r	   r
   r4   ‰   s    zBaseContext.Arrayc             C   s,   t jdkr(tt ddƒr(ddlm} |ƒ  dS )z‹Check whether this is a fake forked process in a frozen executable.
        If so then run code specified by commandline and exit.
        Úwin32ÚfrozenFr   )Úfreeze_supportN)ÚsysÚplatformÚgetattrÚspawnr7   )r   r7   r	   r	   r
   r7   �   s    zBaseContext.freeze_supportc             C   s   ddl m} |ƒ S )zZReturn package logger -- if it does not already exist then
        it is created.
        r   )Ú
get_logger)Úutilr<   )r   r<   r	   r	   r
   r<   —   s    zBaseContext.get_loggerc             C   s   ddl m} ||ƒS )z8Turn on logging and add a handler which prints to stderrr   )Úlog_to_stderr)r=   r>   )r   Úlevelr>   r	   r	   r
   r>   ž   s    zBaseContext.log_to_stderrc             C   s   ddl m} dS )zVInstall support for sending connections and sockets
        between processes
        r   )r   N)Ú r   )r   r   r	   r	   r
   Úallow_connection_pickling£   s    z%BaseContext.allow_connection_picklingc             C   s   ddl m} ||ƒ dS )zÌSets the path to a python.exe or pythonw.exe binary used to run
        child processes instead of sys.executable when using the 'spawn'
        start method.  Useful for people embedding Python.
        r   )Úset_executableN)r;   rB   )r   Ú
executablerB   r	   r	   r
   rB   «   s    zBaseContext.set_executablec             C   s   ddl m} ||ƒ dS )zkSet list of module names to try to load in forkserver process.
        This is really just a hint.
        r   )Úset_forkserver_preloadN)Ú
forkserverrD   )r   Zmodule_namesrD   r	   r	   r
   rD   ³   s    z"BaseContext.set_forkserver_preloadc             C   sF   |d kr| S yt | }W n  tk
r8   td| ƒ‚Y nX |jƒ  |S )Nzcannot find context for %r)Ú_concrete_contextsÚKeyErrorÚ
ValueErrorÚ_check_available)r   Úmethodr   r	   r	   r
   r   º   s    zBaseContext.get_contextFc             C   s   | j S )N)Ú_name)r   Ú
allow_noner	   r	   r
   Úget_start_methodÄ   s    zBaseContext.get_start_methodc             C   s   t dƒ‚d S )Nz+cannot set start method of concrete context)rH   )r   rJ   Úforcer	   r	   r
   Úset_start_methodÇ   s    zBaseContext.set_start_methodc             C   s   t ƒ jdƒS )z_Controls how objects will be reduced to a form that can be
        shared with other processes.r   )ÚglobalsÚget)r   r	   r	   r
   ÚreducerÊ   s    zBaseContext.reducerc             C   s   |t ƒ d< d S )Nr   )rP   )r   r   r	   r	   r
   rR   Ð   s    c             C   s   d S )Nr	   )r   r	   r	   r
   rI   Ô   s    zBaseContext._check_available)T)N)r   )r   )NN)r   )r   )N)N)F)F)*r   r   r   r   r   r   r   Ústaticmethodr   Zcurrent_processZactive_childrenr   r   r   r   r   r   r    r"   r#   r$   r&   r)   r*   r+   r-   r1   r3   r4   r7   r<   r>   rA   rB   rD   r   rM   rO   ÚpropertyrR   ÚsetterrI   r	   r	   r	   r
   r      sJ   













r   c               @   s   e Zd ZdZedd„ ƒZdS )ÚProcessNc             C   s   t jƒ jj| ƒS )N)Ú_default_contextr   rV   Ú_Popen)Úprocess_objr	   r	   r
   rX   Ý   s    zProcess._Popen)r   r   r   Ú_start_methodrS   rX   r	   r	   r	   r
   rV   Û   s   rV   c                   sF   e Zd ZeZdd„ Zd‡ fdd„	Zddd„Zdd	d
„Zdd„ Z‡  Z	S )ÚDefaultContextc             C   s   || _ d | _d S )N)rW   Ú_actual_context)r   r,   r	   r	   r
   Ú__init__ä   s    zDefaultContext.__init__Nc                s0   |d kr | j d kr| j| _ | j S tƒ j|ƒS d S )N)r\   rW   Úsuperr   )r   rJ   )Ú	__class__r	   r
   r   è   s
    
zDefaultContext.get_contextFc             C   s>   | j d k	r| rtdƒ‚|d kr.|r.d | _ d S | j|ƒ| _ d S )Nzcontext has already been set)r\   ÚRuntimeErrorr   )r   rJ   rN   r	   r	   r
   rO   ð   s    zDefaultContext.set_start_methodc             C   s"   | j d kr|rd S | j| _ | j jS )N)r\   rW   rK   )r   rL   r	   r	   r
   rM   ø   s
    
zDefaultContext.get_start_methodc             C   s,   t jdkrdgS tjr dddgS ddgS d S )Nr5   r;   ÚforkrE   )r8   r9   r   ÚHAVE_SEND_HANDLE)r   r	   r	   r
   Úget_all_start_methodsÿ   s
    

z$DefaultContext.get_all_start_methods)N)F)F)
r   r   r   rV   r]   r   rO   rM   rc   Ú__classcell__r	   r	   )r_   r
   r[   á   s   

r[   c             c   s   | ]}|d  dkr|V  qdS )r   Ú_Nr	   )Ú.0Úxr	   r	   r
   ú	<genexpr>  s    rh   r5   c               @   s   e Zd ZdZedd„ ƒZdS )ÚForkProcessra   c             C   s   ddl m} || ƒS )Nr   )ÚPopen)Z
popen_forkrj   )rY   rj   r	   r	   r
   rX     s    zForkProcess._PopenN)r   r   r   rZ   rS   rX   r	   r	   r	   r
   ri     s   ri   c               @   s   e Zd ZdZedd„ ƒZdS )ÚSpawnProcessr;   c             C   s   ddl m} || ƒS )Nr   )rj   )Zpopen_spawn_posixrj   )rY   rj   r	   r	   r
   rX     s    zSpawnProcess._PopenN)r   r   r   rZ   rS   rX   r	   r	   r	   r
   rk     s   rk   c               @   s   e Zd ZdZedd„ ƒZdS )ÚForkServerProcessrE   c             C   s   ddl m} || ƒS )Nr   )rj   )Zpopen_forkserverrj   )rY   rj   r	   r	   r
   rX      s    zForkServerProcess._PopenN)r   r   r   rZ   rS   rX   r	   r	   r	   r
   rl     s   rl   c               @   s   e Zd ZdZeZdS )ÚForkContextra   N)r   r   r   rK   ri   rV   r	   r	   r	   r
   rm   %  s   rm   c               @   s   e Zd ZdZeZdS )ÚSpawnContextr;   N)r   r   r   rK   rk   rV   r	   r	   r	   r
   rn   )  s   rn   c               @   s   e Zd ZdZeZdd„ ZdS )ÚForkServerContextrE   c             C   s   t jstdƒ‚d S )Nz%forkserver start method not available)r   rb   rH   )r   r	   r	   r
   rI   0  s    z"ForkServerContext._check_availableN)r   r   r   rK   rl   rV   rI   r	   r	   r	   r
   ro   -  s   ro   )ra   r;   rE   ra   c               @   s   e Zd ZdZedd„ ƒZdS )rk   r;   c             C   s   ddl m} || ƒS )Nr   )rj   )Zpopen_spawn_win32rj   )rY   rj   r	   r	   r
   rX   ?  s    zSpawnProcess._PopenN)r   r   r   rZ   rS   rX   r	   r	   r	   r
   rk   =  s   c               @   s   e Zd ZdZeZdS )rn   r;   N)r   r   r   rK   rk   rV   r	   r	   r	   r
   rn   D  s   r;   c             C   s   t |  t_d S )N)rF   rW   r\   )rJ   r	   r	   r
   Ú_force_start_methodQ  s    rp   c               C   s   t tdd ƒS )NÚspawning_popen)r:   Ú_tlsr	   r	   r	   r
   Úget_spawning_popenZ  s    rs   c             C   s
   | t _d S )N)rr   rq   )Úpopenr	   r	   r
   Úset_spawning_popen]  s    ru   c             C   s    t ƒ d krtdt| ƒj ƒ‚d S )NzF%s objects should only be shared between processes through inheritance)rs   r`   Útyper   )Úobjr	   r	   r
   Úassert_spawning`  s    
rx   )"r   r8   Z	threadingr@   r   r   Ú__all__Ú	Exceptionr   r   r   r   Úobjectr   ZBaseProcessrV   r[   ÚlistÚdirr9   ri   rk   rl   rm   rn   ro   rF   rW   rp   Zlocalrr   rs   ru   rx   r	   r	   r	   r
   Ú<module>   sD    >'

