3 \ ã@sÆddlZddlZddlZddlZddlZddlZddlmZmZddl m Z dgZ ej dkrvddl Z Gdd„deƒZn,Gd d„deƒZd d „Zd d „ZejeeƒGdd„deƒZGdd„deƒZdS)éNé)Ú reductionÚassert_spawning)ÚutilÚ BufferWrapperZwin32c@s,eZdZejƒZdd„Zdd„Zdd„ZdS)ÚArenacCsz||_xTtdƒD]@}dtjƒt|jƒf}tjd||d�}tjƒdkrHP|j ƒqWt dƒ‚||_ ||_ |j|j f|_ dS)Nédz pym-%d-%sr)ÚtagnamerzCannot find name for new mmapéÿÿÿÿ)ÚsizeÚrangeÚosÚgetpidÚnextÚ_randÚmmapÚ_winapiZ GetLastErrorÚcloseÚFileExistsErrorÚnameÚbufferÚ_state)Úselfr ÚirZbuf©rú,/usr/lib64/python3.6/multiprocessing/heap.pyÚ__init__"s  zArena.__init__cCst|ƒ|jS)N)rr)rrrrÚ __getstate__1szArena.__getstate__cCs,|\|_|_|_tjd|j|jd�|_dS)Nr)r r )r rrrr)rÚstaterrrÚ __setstate__5szArena.__setstate__N) Ú__name__Ú __module__Ú __qualname__ÚtempfileZ_RandomNameSequencerrrrrrrrrsrc@seZdZddd„ZdS)rrc CsÌ||_||_|d kr¶tjdtjƒtjƒd�\|_}tj|ƒtj |tj |jfƒt |jddd��N}d }||kršd|}xt ||ƒD]}|j |ƒq†W~|j d||ƒWdQRXtj|j|jƒ|_dS) Nrzpym-%d-)ÚprefixÚdirÚwbF)Úclosefdiór i)r Úfdr#Zmkstempr rrZ get_temp_dirÚunlinkÚFinalizerÚopenr Úwriterr)rr r)rÚfZbsZzerosÚ_rrrr@s"  zArena.__init__Nr )r )r r!r"rrrrrr>scCs(|jdkrtdƒ‚t|jtj|jƒffS)NrzDArena is unpicklable because forking was enabled when it was createdr )r)Ú ValueErrorÚ rebuild_arenar rZDupFd)ÚarrrÚ reduce_arenaSs r3cCst||jƒƒS)N)rÚdetach)r Zdupfdrrrr1Ysr1c@sZeZdZdZejfdd„Zedd„ƒZdd„Z dd „Z d d „Z d d „Z dd„Z dd„ZdS)ÚHeapécCsJtjƒ|_tjƒ|_||_g|_i|_i|_ i|_ t ƒ|_ g|_ g|_dS)N)r rÚ_lastpidÚ threadingZLockÚ_lockÚ_sizeÚ_lengthsÚ _len_to_seqÚ_start_to_blockÚ_stop_to_blockÚsetÚ_allocated_blocksÚ_arenasÚ_pending_free_blocks)rr rrrrfs  z Heap.__init__cCs|d}|||@S)Nrr)ÚnZ alignmentÚmaskrrrÚ_roundupssz Heap._roundupc CsÀtj|j|ƒ}|t|jƒkrj|jt|j|ƒtjƒ}|jd9_t j d|ƒt |ƒ}|j j |ƒ|d|fS|j|}|j|}|jƒ}|sš|j|=|j|=|\}}}|j||f=|j||f=|S)Néz"allocating a new mmap of length %dr)ÚbisectZ bisect_leftr;ÚlenrEÚmaxr:rÚPAGESIZErÚinforrAÚappendr<Úpopr=r>) rr rÚlengthÚarenaÚseqÚblockÚstartÚstoprrrÚ_mallocys"        z Heap._mallocc Csì|\}}}y|j||f}Wntk r0YnX|j|ƒ\}}y|j||f}Wntk rfYnX|j|ƒ\}}|||f}||}y|j|j|ƒWn.tk rÊ|g|j|<tj|j|ƒYnX||j||f<||j||f<dS)N) r>ÚKeyErrorÚ_absorbr=r<rLrGZinsortr;) rrQrOrRrSZ prev_blockr/Z next_blockrNrrrÚ_free�s(   z Heap._freecCs^|\}}}|j||f=|j||f=||}|j|}|j|ƒ|sV|j|=|jj|ƒ||fS)N)r=r>r<Úremover;)rrQrOrRrSrNrPrrrrV­s      z Heap._absorbc CsFx@y|jjƒ}Wntk r&PYnX|jj|ƒ|j|ƒqWdS)N)rBrMÚ IndexErrorr@rXrW)rrQrrrÚ_free_pending_blocks¼s zHeap._free_pending_blocksc CsN|jjdƒs|jj|ƒn0z"|jƒ|jj|ƒ|j|ƒWd|jjƒXdS)NF) r9ÚacquirerBrLrZr@rXrWÚrelease)rrQrrrÚfreeÆs  z Heap.freec CsŽtjƒ|jkr|jƒ|j�h|jƒ|jt|dƒ|jƒ}|j |ƒ\}}}||}||krj|j |||fƒ|||f}|j j |ƒ|SQRXdS)Nr) r rr7rr9rZrErIÚ _alignmentrTrWr@Úadd)rr rOrRrSZnew_stoprQrrrÚmallocÞs  z Heap.mallocN)r r!r"r^rrJrÚ staticmethodrErTrWrVrZr]r`rrrrr5bs  r5c@s"eZdZeƒZdd„Zdd„ZdS)rcCs0tjj|ƒ}||f|_tj|tjj|fd�dS)N)Úargs)rÚ_heapr`rrr+r])rr rQrrrrös  zBufferWrapper.__init__cCs&|j\\}}}}t|jƒ|||…S)N)rÚ memoryviewr)rrOrRrSr rrrÚcreate_memoryviewüszBufferWrapper.create_memoryviewN)r r!r"r5rcrrerrrrròs)rGrr Úsysr#r8ÚcontextrrÚrÚ__all__ÚplatformrÚobjectrr3r1Úregisterr5rrrrrÚ s$