3 \ ã @ sÆ d dl Z d dlZd dlZd dlZd dlZd dlZddlmZmZ ddl m Z dgZejdkrvd dl Z G dd„ deƒZn,G d d„ deƒZd d„ Zdd „ Zejeeƒ G dd„ deƒZG dd„ deƒZdS )é Né )Ú reductionÚassert_spawning)ÚutilÚ BufferWrapperZwin32c @ s, e Zd Zejƒ Zdd„ Zdd„ Zdd„ ZdS )ÚArenac C sz || _ xTtdƒD ]@}dtjƒ t| jƒf }tjd||d�}tjƒ dkrHP |j ƒ qW t dƒ‚|| _|| _| j | jf| _ d S )Néd z pym-%d-%sr )Útagnamer zCannot find name for new mmapéÿÿÿÿ)ÚsizeÚrangeÚosÚgetpidÚnextÚ_randÚmmapÚ_winapiZGetLastErrorÚcloseÚFileExistsErrorÚnameÚbufferÚ_state)Úselfr Úir Zbuf© r ú,/usr/lib64/python3.6/multiprocessing/heap.pyÚ__init__" s zArena.__init__c C s t | ƒ | jS )N)r r )r r r r Ú__getstate__1 s zArena.__getstate__c C s, | \| _ | _| _tjd| j | jd�| _d S )Nr )r r )r r r r r )r Ústater r r Ú__setstate__5 s zArena.__setstate__N) Ú__name__Ú __module__Ú__qualname__ÚtempfileZ_RandomNameSequencer r r r r r r r r s r c @ s e Zd Zddd„ZdS )r r c C sÌ || _ || _|d kr¶tjdtjƒ tjƒ d�\| _}tj|ƒ tj | tj | jfƒ t| jddd��N}d }||kršd| }xt|| ƒD ]}|j |ƒ q†W ~|j d|| ƒ W d Q R X tj| j| j ƒ| _d S )Nr zpym-%d-)ÚprefixÚdirÚwbF)Úclosefdi ó r i )r Úfdr# Zmkstempr r r Zget_temp_dirÚunlinkÚFinalizer Úopenr Úwriter r )r r r) r ÚfZbsZzerosÚ_r r r r @ s" zArena.__init__Nr )r )r r! r" r r r r r r > s c C s( | j dkrtdƒ‚t| jtj| j ƒffS )Nr zDArena is unpicklable because forking was enabled when it was createdr )r) Ú ValueErrorÚ rebuild_arenar r ZDupFd)Úar r r Úreduce_arenaS s r3 c C s t | |jƒ ƒS )N)r Údetach)r Zdupfdr r r r1 Y s r1 c @ sZ e Zd ZdZejfdd„Zedd„ ƒZdd„ Z dd „ Z d d„ Zdd „ Zdd„ Z dd„ ZdS )ÚHeapé c C sJ t jƒ | _tjƒ | _|| _g | _i | _i | _ i | _ tƒ | _g | _ g | _d S )N)r r Ú_lastpidÚ threadingZLockÚ_lockÚ_sizeÚ_lengthsÚ_len_to_seqÚ_start_to_blockÚ_stop_to_blockÚsetÚ_allocated_blocksÚ_arenasÚ_pending_free_blocks)r r r r r r f s z Heap.__init__c C s |d }| | | @ S )Nr r )ÚnZ alignmentÚmaskr r r Ú_roundups s z Heap._roundupc C sÀ t j| j|ƒ}|t| jƒkrj| jt| j|ƒtjƒ}| jd9 _t j d|ƒ t|ƒ}| jj |ƒ |d|fS | j| }| j| }|jƒ }|sš| j|= | j|= |\}}}| j||f= | j||f= |S )Né z"allocating a new mmap of length %dr )ÚbisectZbisect_leftr; ÚlenrE Úmaxr: r ÚPAGESIZEr Úinfor rA Úappendr<