a XC?h�+�@s�ddlZddlZddlZddlmZddlmZdZGdd�de�ZGdd �d e�Z Gd d �d e�Z Gd d �d e�Z Gdd�de �Z Gdd�dej�ZGdd�de �Zejdk�rRGdd�dej�ZGdd�dej�ZGdd�dej�ZGdd�de �ZGdd�de �ZGdd �d e �Ze�e�e�d!�Zejd"k�rDeed#�Zn eed$�Zn8Gd%d�dej�ZGd&d�de �Zd#e�iZeed#�Zd'd(�Ze��Zd)d*�Zd+d,�Zd-d.�ZdS)/�N�)�process)� reduction�c@s eZdZdS)� ProcessErrorN��__name__� __module__� __qualname__rrr�d?��Z(e(j)d@d?��Z(dAdB�Z*d S)O� BaseContextcCs"t��}|durtd��n|SdS)Nzcannot determine number of cpus)�os� cpu_count�NotImplementedError)�selfZnumrrr r)s zBaseContext.cpu_countcCs&ddlm}||��d�}|��|S)Nr)� SyncManager��ctx)Zmanagersr� get_context�start)rr�mrrr �Manager1s zBaseContext.ManagerTcCsddlm}||�S)Nr)�Pipe)� connectionr)rZduplexrrrr r<s zBaseContext.PipecCsddlm}||��d�S)Nr)�Lockr)� synchronizerr)rrrrr rAs zBaseContext.LockcCsddlm}||��d�S)Nr)�RLockr)rrr)rrrrr rFs zBaseContext.RLockNcCsddlm}|||��d�S)Nr)� Conditionr)rr r)r�lockr rrr r Ks zBaseContext.ConditionrcCsddlm}|||��d�S)Nr)� Semaphorer)rr"r)r�valuer"rrr r"Ps zBaseContext.SemaphorecCsddlm}|||��d�S)Nr)�BoundedSemaphorer)rr$r)rr#r$rrr r$Us zBaseContext.BoundedSemaphorecCsddlm}||��d�S)Nr)�Eventr)rr%r)rr%rrr r%Zs zBaseContext.EventcCs ddlm}|||||��d�S)Nr)�Barrierr)rr&r)rZparties�actionZtimeoutr&rrr r&_s zBaseContext.BarrierrcCsddlm}|||��d�S)Nr)�Queuer)�queuesr(r)r�maxsizer(rrr r(ds zBaseContext.QueuecCsddlm}|||��d�S)Nr)� JoinableQueuer)r)r+r)rr*r+rrr r+is zBaseContext.JoinableQueuecCsddlm}||��d�S)Nr)� SimpleQueuer)r)r,r)rr,rrr r,ns zBaseContext.SimpleQueuercCs"ddlm}||||||��d�S)Nr)�Pool)�context)Zpoolr-r)rZ processesZ initializerZinitargsZmaxtasksperchildr-rrr r-ss  �zBaseContext.PoolcGsddlm}||g|�R�S)Nr)�RawValue)� sharedctypesr/)r�typecode_or_type�argsr/rrr r/zs zBaseContext.RawValuecCsddlm}|||�S)Nr)�RawArray)r0r3)rr1�size_or_initializerr3rrr r3s zBaseContext.RawArray)r!cGs(ddlm}||g|�R||��d��S)Nr)�Value�r!r)r0r5r)rr1r!r2r5rrr r5�s �zBaseContext.ValuecCs ddlm}|||||��d�S)Nr)�Arrayr6)r0r7r)rr1r4r!r7rrr r7�s �zBaseContext.ArraycCs,tjdkr(ttdd�r(ddlm}|�dS)N�win32�frozenFr)�freeze_support)�sys�platform�getattr�spawnr:)rr:rrr r:�s zBaseContext.freeze_supportcCsddlm}|�S)Nr)� get_logger)�utilr?)rr?rrr r?�s zBaseContext.get_loggercCsddlm}||�S)Nr)� log_to_stderr)r@rA)r�levelrArrr rA�s zBaseContext.log_to_stderrcCsddlm}dS)Nr)r)�r)rrrrr �allow_connection_pickling�sz%BaseContext.allow_connection_picklingcCsddlm}||�dS)Nr)�set_executable)r>rE)r� executablerErrr rE�s zBaseContext.set_executablecCsddlm}||�dS)Nr)�set_forkserver_preload)� forkserverrG)rZ module_namesrGrrr rG�s z"BaseContext.set_forkserver_preloadcCsF|dur |Sz t|}Wn ty8td|�d�Yn0|��|S)Nzcannot find context for %r)�_concrete_contexts�KeyError� ValueError�_check_available)r�methodrrrr r�s  zBaseContext.get_contextFcCs|jS�N)�_name�rZ allow_nonerrr �get_start_method�szBaseContext.get_start_methodcCs td��dS)Nz+cannot set start method of concrete context)rK�rrMZforcerrr �set_start_method�szBaseContext.set_start_methodcCs t��d�S�Nr)�globals�get�rrrr �reducer�szBaseContext.reducercCs|t�d<dSrT)rU)rrrrr rX�scCsdSrNrrWrrr rL�szBaseContext._check_available)T)N)r)r)NN)r)r)NNrN)N)N)F)F)+rr r rr r r� staticmethodrZcurrent_processZparent_processZactive_childrenrrrrrr r"r$r%r&r(r+r,r-r/r3r5r7r:r?rArDrErGrrQrS�propertyrX�setterrLrrrr rsR          �      rc@seZdZdZedd��ZdS)�ProcessNcCst��j�|�SrN)�_default_contextrr\�_Popen)� process_objrrr r^�szProcess._Popen�rr r Z _start_methodrYr^rrrr r\�sr\csFeZdZeZdd�Zd �fdd� Zddd�Zdd d �Zd d �Z�Z S)�DefaultContextcCs||_d|_dSrN)r]�_actual_context)rr.rrr �__init__�szDefaultContext.__init__Ncs0|dur |jdur|j|_|jSt��|�SdSrN)rbr]�superr)rrM�� __class__rr r�s  zDefaultContext.get_contextFcCs<|jdur|std��|dur,|r,d|_dS|�|�|_dS)Nzcontext has already been set)rb� RuntimeErrorrrRrrr rS�s  zDefaultContext.set_start_methodcCs"|jdur|rdS|j|_|jjSrN)rbr]rOrPrrr rQ�s  zDefaultContext.get_start_methodcCsBtjdkrdgStjdkr"ddgnddg}tjr:|�d�|SdS)Nr8r>�darwin�forkrH)r;r<r�HAVE_SEND_HANDLE�append)r�methodsrrr �get_all_start_methodss   z$DefaultContext.get_all_start_methods)N)F)F) rr r r\rcrrSrQrm� __classcell__rrrer ra�s   rar8c@seZdZdZedd��ZdS)� ForkProcessricCsddlm}||�S�Nr)�Popen)Z popen_forkrq�r_rqrrr r^s zForkProcess._PopenNr`rrrr rosroc@seZdZdZedd��ZdS)� SpawnProcessr>cCsddlm}||�Srp)Zpopen_spawn_posixrqrrrrr r^s �SpawnProcess._PopenNr`rrrr rssrsc@seZdZdZedd��ZdS)�ForkServerProcessrHcCsddlm}||�Srp)Zpopen_forkserverrqrrrrr r^ s zForkServerProcess._PopenNr`rrrr rusruc@seZdZdZeZdS)� ForkContextriN)rr r rOror\rrrr rv%srvc@seZdZdZeZdS�� SpawnContextr>N�rr r rOrsr\rrrr rx)srxc@seZdZdZeZdd�ZdS)�ForkServerContextrHcCstjstd��dS)Nz%forkserver start method not available)rrjrKrWrrr rL0sz"ForkServerContext._check_availableN)rr r rOrur\rLrrrr rz-srz)rir>rHrhr>ric@seZdZdZedd��ZdS)rsr>cCsddlm}||�Srp)Zpopen_spawn_win32rqrrrrr r^Ds rtNr`rrrr rsBsc@seZdZdZeZdSrwryrrrr rxIscCst|t_dSrN)rIr]rb)rMrrr �_force_start_methodVsr{cCs ttdd�S)N�spawning_popen)r=�_tlsrrrr �get_spawning_popen_sr~cCs |t_dSrN)r}r|)�popenrrr �set_spawning_popenbsr�cCs t�durtdt|�j��dS)NzF%s objects should only be shared between processes through inheritance)r~rg�typer)�objrrr �assert_spawninges  ��r�) rr;Z threadingrCrr�__all__� Exceptionrr r r�objectrZ BaseProcessr\rar<rorsrurvrxrzrIr]r{Zlocalr}r~r�r�rrrr �sJ  ?, � �