Yf @s#ddlZddlZddlZddlZddlZddlZddlmZddlmZddlm Z dgZ ej dkrddl Z Gdd d e Zn>Gd d d e Zd d Zd dZejeeGddde ZGddde ZdS)N)context) reduction)util BufferWrapperwin32c@s@eZdZejZddZddZddZdS)ArenacCs||_xttdD]Z}dtjt|jf}tjd|d|}tjdkrfP|j qWt d||_ ||_ |j|j f|_ dS)Ndz pym-%d-%srtagnamerzCannot find name for new mmap)sizerangeosgetpidnext_randmmap_winapiZ GetLastErrorcloseFileExistsErrornamebuffer_state)selfr irZbufr9/opt/alt/python35/lib64/python3.5/multiprocessing/heap.py__init__#s    zArena.__init__cCstj||jS)N)rZassert_spawningr)rrrr __getstate__2s zArena.__getstate__cCs>|\|_|_|_tjd|jd|j|_dS)Nrr r )r rrrr)rstaterrr __setstate__6szArena.__setstate__N) __name__ __module__ __qualname__tempfileZ_RandomNameSequencerrrr rrrrrs    rc@seZdZdddZdS)rrc Cs-||_||_|d krtjddtjdtj\|_}tj|tj |tj |jft |jddd{}d }||krd |}x%t ||D]}|j |qW~|j d |||j|kstWdQRXtj|j|j|_dS) Nrprefixzpym-%d-dirwbclosefdFisr i)r fdr$ZmkstemprrrZ get_temp_dirunlinkFinalizeropenr writetellAssertionErrorrr)rr r)rfZbsZzeros_rrrrAs"    (   zArena.__init__Nr )r!r"r#rrrrrr?s cCs:|jdkrtdt|jtj|jffS)NrzDArena is unpicklable because forking was enabled when it was createdr )r) ValueError rebuild_arenar rZDupFd)arrr reduce_arenaTs r5cCst||jS)N)rdetach)r Zdupfdrrrr3Zsr3c@seZdZdZejddZeddZddZ dd Z d d Z d d Z ddZ ddZdS)HeapcCsmtj|_tj|_||_g|_i|_i|_ i|_ t |_ g|_ g|_dS)N)rr_lastpid threadingZLock_lock_size_lengths _len_to_seq_start_to_block_stop_to_blockset_allocated_blocks_arenas_pending_free_blocks)rr rrrrgs       z Heap.__init__cCs|d}|||@S)Nrr)nZ alignmentmaskrrr_roundupts z Heap._roundupc Cstj|j|}|t|jkr|jt|j|tj}|jd9_t j d|t |}|j j ||d|fS|j|}|j|}|j}|s|j|=|j|=|\}}}|j||f=|j||f=|S)Nz"allocating a new mmap of length %dr)bisectZ bisect_leftr=lenrGmaxr<rPAGESIZErinforrCappendr>popr?r@) rr rlengtharenaseqblockstartstoprrr_malloczs"!     z Heap._mallocc Cs$|\}}}y|j||f}Wntk r:YnX|j|\}}y|j||f}Wntk r{YnX|j|\}}|||f}||}y|j|j|Wn5tk r|g|j|rNrIZinsortr=) rrSrQrTrUZ prev_blockr1Z next_blockrPrrr_frees(    z Heap._freecCs}|\}}}|j||f=|j||f=||}|j|}|j||ss|j|=|jj|||fS)N)r?r@r>remover=)rrSrQrTrUrPrRrrrrXs    z Heap._absorbc CsQxJy|jj}Wntk r+PYnX|jj||j|qWdS)N)rDrO IndexErrorrBrZrY)rrSrrr_free_pending_blockss zHeap._free_pending_blocksc Cstj|jkst|jjds@|jj|n<z+|j|j j ||j |Wd|jj XdS)NF) rrr9r/r;acquirerDrNr\rBrZrYrelease)rrSrrrfrees  z Heap.freec Csd|kotjkns%ttj|jkrD|j|j|j|j t |d|j }|j |\}}}||}||kr|j |||f|||f}|jj||SWdQRXdS)Nrr)sysmaxsizer/rrr9rr;r\rGrK _alignmentrVrYrBadd)rr rQrTrUZnew_stoprSrrrmallocs%     z Heap.mallocN)r!r"r#rbrrLr staticmethodrGrVrYrXr\r_rdrrrrr7cs      r7c@s1eZdZeZddZddZdS)rcCsid|kotjkns%ttjj|}||f|_tj|tjj d|fdS)Nrargs) r`rar/r_heaprdrrr+r_)rr rSrrrrs%zBufferWrapper.__init__cCs3|j\\}}}}t|j|||S)N)r memoryviewr)rrQrTrUr rrrcreate_memoryviewszBufferWrapper.create_memoryviewN)r!r"r#r7rgrrirrrrrs   )rIrrr`r$r:rrr__all__platformrobjectrr5r3registerr7rrrrr s$