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��^}d }||kršd|}xt ||ƒD]}|j |ƒq†W~|j d||ƒ|jƒ|ks¼t‚WdQRXtj|j|jƒ|_dS) Nrzpym-%d-)ÚprefixÚdirÚwbF)Úclosefdiór i)r Úfdr#Zmkstempr rrZ get_temp_dirÚunlinkÚFinalizerÚopenr ÚwriteÚtellÚAssertionErrorrr)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 r5cCst||jƒƒS)N)rÚdetach)r Zdupfdrrrr3Ysr3c@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=ÚlenrGÚmaxr<rÚPAGESIZErÚinforrCÚ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>rNrIZinsortr=) rrSrQrTrUZ prev_blockr1Z next_blockrPrrrÚ_free�s(   z Heap._freecCs^|\}}}|j||f=|j||f=||}|j|}|j|ƒ|sV|j|=|jj|ƒ||fS)N)r?r@r>Úremover=)rrSrQrTrUrPrRrrrrX­s      z Heap._absorbc CsFx@y|jjƒ}Wntk r&PYnX|jj|ƒ|j|ƒqWdS)N)rDrOÚ IndexErrorrBrZrY)rrSrrrÚ_free_pending_blocks¼s zHeap._free_pending_blocksc Cs`tjƒ|jkst‚|jjdƒs,|jj|ƒn0z"|jƒ|j j |ƒ|j |ƒWd|jj ƒXdS)NF) r rr9r/r;ÚacquirerDrNr\rBrZrYÚrelease)rrSrrrÚfreeÆs   z Heap.freec Cs¬d|kotjknst‚tjƒ|jkr4|jƒ|j�h|jƒ|j t |dƒ|j ƒ}|j |ƒ\}}}||}||krˆ|j |||fƒ|||f}|jj|ƒ|SQRXdS)Nrr)ÚsysÚmaxsizer/r rr9rr;r\rGrKÚ _alignmentrVrYrBÚadd)rr rQrTrUZnew_stoprSrrrÚmallocÞs  z Heap.mallocN)r r!r"rbrrLrÚ staticmethodrGrVrYrXr\r_rdrrrrr7bs  r7c@s"eZdZeƒZdd„Zdd„ZdS)rcCsNd|kotjknst‚tjj|ƒ}||f|_tj|tjj |fd�dS)Nr)Úargs) r`rar/rÚ_heaprdrrr+r_)rr rSrrrrös  zBufferWrapper.__init__cCs&|j\\}}}}t|jƒ|||…S)N)rÚ memoryviewr)rrQrTrUr rrrÚcreate_memoryviewüszBufferWrapper.create_memoryviewN)r r!r"r7rgrrirrrrròs)rIrr r`r#r:ÚcontextrrÚrÚ__all__ÚplatformrÚobjectrr5r3Úregisterr7rrrrrÚ s$