\dj-"ddlZddlmZddlZddlZddlZddlZddlZddlm Z m Z ddl m Z dgZ ejdkrddlZGdd eZn%Gd d eZd Zd Ze jeeGd deZGddeZdS)N) defaultdict) reductionassert_spawning)util BufferWrapperwin32cBeZdZdZejZdZdZdZ dS)ArenazL A shared memory area backed by anonymous memory (Windows). ct||_tdD]p}dtjt |jfz}t jd||}tjdkrn$| qtd||_ ||_ |j|j f|_ dS)Ndz pym-%d-%stagnamerzCannot find name for new mmap)sizerangeosgetpidnext_randmmap_winapi GetLastErrorcloseFileExistsErrornamebuffer_state)selfrirbufs %..\python\lib\multiprocessing\heap.py__init__zArena.__init__&sDI3ZZ G G"bikk4 3C3C%DDiD$777'))Q..E %&EFFFDIDK9di0DKKKc.t||jSN)rr)rs r" __getstate__zArena.__getstate__5s D ! ! !; r$c~|x\|_|_|_tjd|j|j|_dS)Nrr)rrrrr)rstates r" __setstate__zArena.__setstate__9s716 6 DIty4;)B 49EEEDKKKr$N) __name__ __module__ __qualname____doc__tempfile_RandomNameSequencerr#r'r*r$r"r r sb  -,.. 1 1 1    F F F F Fr$r cBeZdZdZejdkrdgZngZddZdZdS) r zJ A shared memory area backed by a temporary file (POSIX). linuxz/dev/shmrc||_||_|dkrtjdt jz||\|_}t j|tj |tj |jft j |j|tj |j|j|_ dS)Nrzpym-%d-)prefixdir)rfdr/mkstemprr _choose_dirunlinkrFinalizer ftruncaterr)rrr7rs r"r#zArena.__init__MsDIDGRxx!) 0%bikk1))$//!1!1!1  $ dBHtwj999 TWd+++)DGTY77DKKKr$c|jD]-}tj|}|j|jz|kr|cS.t jSr&)_dir_candidatesrstatvfsf_bavailf_frsizer get_temp_dir)rrdsts r"r9zArena._choose_dir[sT)  Z]];,44HHH5$&& &r$N)r) r+r,r-r.sysplatformr>r#r9r1r$r"r r Cs^   <7 " ")lOO O 8 8 8 8 ' ' ' ' 'r$c|jdkrtdt|jt j|jffS)NrzDArena is unpicklable because forking was enabled when it was created)r7 ValueError rebuild_arenarrDupFd)as r" reduce_arenarLdsF 42::GHH Hqvyqt'<'<===r$cFt||Sr&)r detach)rdupfds r"rIrIjsT5<<>>***r$czeZdZdZdZdZejfdZe dZ dZ dZ dZ dZd Zd Zd Zd Zd ZdS)Heapi@ctj|_tj|_||_g|_i|_i|_ i|_ tt|_ g|_g|_d|_d|_dSNr)rr_lastpid threadingLock_lock_size_lengths _len_to_seq_start_to_block_stop_to_blockrset_allocated_blocks_arenas_pending_free_blocks _n_mallocs_n_frees)rrs r"r#z Heap.__init__{s  ^%%    "!"-S!1!1 %'! r$c|dz }||z|zS)Nrr1)n alignmentmasks r"_roundupz Heap._roundups1}DTE!!r$c.|t|j|tj}|j|jkr|xjdzc_t jd|t|}|j ||d|fS)Nz"allocating a new mmap of length %dr) rhmaxrYrPAGESIZE_DOUBLE_ARENA_SIZE_UNTILrinfor r`append)rrlengtharenas r" _new_arenazHeap._new_arenass4:t44dmDD :5 5 5 JJ!OJJ 6???f  E"""q&!!r$c\|j}||jkrdS|j|}|rJ|j|df=|j||f=|j||j|}||d|f|s$|j|=|j |dSdSrT) r_DISCARD_FREE_SPACE_LARGER_THANr_popr\r]r`remover[rZ)rrqrpblocksseqs r"_discard_arenazHeap._discard_arenas D8 8 8 F'++E22  % ,   0 E"""v& E1f%&&& ) ( M  ( ( ( ( ( ) )r$cHtj|j|}|t|jkr||S|j|}|j|}|}|s|j|=|j|=|\}}}|j||f=|j||f=|Sr&) bisect bisect_leftrZlenrrr[rur\r]) rrr rprxblockrqstartstops r"_mallocz Heap._mallocs  t}d 3 3 DM"" " "??4(( (]1%F"6*CGGIIE ?$V,dmA.>$t  % 0   . r$c|\}}} |j||f}||\}}n#t$rYnwxYw |j||f}||\}}n#t$rYnwxYw|||f}||z } |j||n5#t$r(|g|j|<t j|j|YnwxYw||j||f<||j||f<dSr&) r]_absorbKeyErrorr\r[ror{insortrZ) rr~rqrr prev_block_ next_blockrps r"_add_free_blockzHeap._add_free_blocksY$t 0,eU^>>  "5 ) - -ui.@ A A A5), - - - - - - - - - - - - - - - - - -sB0EEEN)r+r,r-rrtrmrrlr# staticmethodrhrrryrrrrrrrr1r$r"rQrQssJ&3#, M:""\" " " ")))$"333<   '''000%%%8-----r$rQc.eZdZeZdZdZdS)rcX|dkr"td|tj|kr"t d|t j|}||f|_tj |t jj |fdS)Nrrr)args) rHrrErrr_heaprrrr;r)rrr~s r"r#zBufferWrapper.__init__Fs !886==dCCDD D ;$   6 = =d C CDD D#**400dm  dM/4E8DDDDDDr$c\|j\\}}}}t|j|||zSr&)r memoryviewr)rrqrrrs r"create_memoryviewzBufferWrapper.create_memoryviewOs3%)["td%,''eDj(899r$N)r+r,r-rQrr#rr1r$r"rrBs@ DFFEEEE:::::r$)r{ collectionsrrrrEr/rVcontextrrr__all__rFrobjectr rLrIregisterrQrr1r$r"rs ###### ////////   <7NNNFFFFFFFFFH''''''''B>>> +++Iul+++ I-I-I-I-I-6I-I-I-^:::::F:::::r$