o
    svXj…$  ã                   @   s   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	ddl
mZ ddl
mZ ddl
mZ ddlmZmZ dgZejd  d	kZejd
krXG dd„ deƒZnG dd„ deƒZdd„ Zdd„ Ze ee¡ G dd„ deƒZG dd„ deƒZdS )é    )Úabsolute_importNé   )Úcontext)Ú	reduction)Úutil)Ú	_billiardÚwin32ÚBufferWrapperé   r   c                   @   s,   e Zd Ze ¡ Zdd„ Zdd„ Zdd„ ZdS )ÚArenac                 C   s„   || _ tdƒD ]!}dt ¡ t| jƒf }tjd||d�}t ¡ dkr$ n| 	¡  qt
dƒ}tj|_|‚|| _|| _| j | jf| _d S )Néd   z	pym-%d-%séÿÿÿÿ©Útagnamer   zCannot find name for new mmap)ÚsizeÚrangeÚosÚgetpidÚnextÚ_randÚmmapr   ÚGetLastErrorÚcloseÚIOErrorÚerrnoÚEEXISTÚnameÚbufferÚ_state)Úselfr   Úir   ÚbufÚexc© r#   úJ/var/www/html/myproject/venv/lib/python3.10/site-packages/billiard/heap.pyÚ__init__(   s   
úArena.__init__c                 C   s   t  | ¡ | jS ©N)r   Úassert_spawningr   ©r   r#   r#   r$   Ú__getstate__9   s   
zArena.__getstate__c                 C   s,   | \| _ | _| _tjd| j | jd�| _d S )Nr   r   )r   r   r   r   r   )r   Ústater#   r#   r$   Ú__setstate__=   s   zArena.__setstate__N)	Ú__name__Ú
__module__Ú__qualname__ÚtempfileÚ_RandomNameSequencer   r%   r*   r,   r#   r#   r#   r$   r   $   s
    r   c                   @   s   e Zd Zddd„ZdS )r   r   c                 C   s\  || _ || _|dkr£trptjdt ¡ f t ¡ d�\| _}t 	|¡ t 
| tj| jf¡ tj| jddd��2}d}||krOd| }t|| ƒD ]}| |¡ qF~| d||  ¡ | ¡ |ks`J ‚W d   ƒ n1 sjw   Y  n3tjdt ¡ f t ¡ d�}t |tjtjB tjB d	¡| _t 
| tj| jf¡ t 	|¡ t | j|¡ t | j| j ¡| _d S )
Nr   zpym-%d-)ÚprefixÚdirÚwbF)Úclosefdi   ó    i€  )r   ÚfdÚPY3r0   Úmkstempr   r   r   Úget_temp_dirÚunlinkÚFinalizer   ÚioÚopenr   ÚwriteÚtellÚmktempÚO_RDWRÚO_CREATÚO_EXCLÚ	ftruncater   r   )r   r   r7   r   ÚfÚbsÚzerosÚ_r#   r#   r$   r%   H   s@   þ
ø€
þÿ
r&   N)r   )r-   r.   r/   r%   r#   r#   r#   r$   r   F   s    c                 C   s(   | j dkr	tdƒ‚t| jt | j ¡ffS )Nr   zCArena is unpicklable becauseforking was enabled when it was created)r7   Ú
ValueErrorÚrebuild_arenar   r   ÚDupFd)Úar#   r#   r$   Úreduce_arenaj   s   
rN   c                 C   s   t | | ¡ ƒS r'   )r   Údetach)r   Údupfdr#   r#   r$   rK   p   s   rK   c                   @   sZ   e Zd ZdZejfdd„Zedd„ ƒZdd„ Z	dd	„ Z
d
d„ Zdd„ Zdd„ Zdd„ ZdS )ÚHeapé   c                 C   sJ   t  ¡ | _t ¡ | _|| _g | _i | _i | _	i | _
tƒ | _g | _g | _d S r'   )r   r   Ú_lastpidÚ	threadingÚLockÚ_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%   ~   s   


zHeap.__init__c                 C   s   |d }| | | @ S ©Nr   r#   )ÚnÚ	alignmentÚmaskr#   r#   r$   Ú_roundup‹   s   zHeap._roundupc           	      C   sÀ   t  | j|¡}|t| jƒkr5|  t| j|ƒtj¡}|  jd9  _t	 
d|¡ t|ƒ}| j |¡ |d|fS | j| }| j| }| ¡ }|sM| j|= | j|= |\}}}| j||f= | j||f= |S )Né   z"allocating a new mmap of length %dr   )ÚbisectÚbisect_leftrX   Úlenrd   ÚmaxrW   r   ÚPAGESIZEr   Úinfor   r^   ÚappendrY   ÚpoprZ   r[   )	r   r   r    ÚlengthÚarenaÚseqÚblockÚstartÚstopr#   r#   r$   Ú_malloc‘   s"   



zHeap._mallocc           	      C   sæ   |\}}}z	| j ||f }W n	 ty   Y nw |  |¡\}}z	| j||f }W n	 ty1   Y nw |  |¡\}}|||f}|| }z
| j|  |¡ W n tyb   |g| j|< t | j|¡ Y nw || j||f< || j ||f< d S r'   )	r[   ÚKeyErrorÚ_absorbrZ   rY   rl   rf   ÚinsortrX   )	r   rq   ro   rr   rs   Ú
prev_blockrI   Ú
next_blockrn   r#   r#   r$   Ú_free§   s.   
ÿÿ
þz
Heap._freec                 C   s^   |\}}}| j ||f= | j||f= || }| j| }| |¡ |s+| j|= | j |¡ ||fS r'   )rZ   r[   rY   ÚremoverX   )r   rq   ro   rr   rs   rn   rp   r#   r#   r$   rv   Å   s   


zHeap._absorbc                 C   s>   	 z| j  ¡ }W n
 ty   Y d S w | j |¡ |  |¡ qr'   )r_   rm   Ú
IndexErrorr]   r{   rz   ©r   rq   r#   r#   r$   Ú_free_pending_blocksÔ   s   ÿ
úzHeap._free_pending_blocksc                 C   sj   t  ¡ | jks	J ‚| j d¡s| j |¡ d S z|  ¡  | j 	|¡ |  
|¡ W | j ¡  d S | j ¡  w )NF)r   r   rS   rV   Úacquirer_   rl   r~   r]   r{   rz   Úreleaser}   r#   r#   r$   ÚfreeÞ   s   z	Heap.freec                 C   sÄ   d|  krt jk sJ ‚ J ‚t ¡ | jkr|  ¡  | j�; |  ¡  |  t	|dƒ| j
¡}|  |¡\}}}|| }||k rD|  |||f¡ |||f}| j |¡ |W  d   ƒ S 1 s[w   Y  d S )Nr   r   )ÚsysÚmaxsizer   r   rS   r%   rV   r~   rd   ri   Ú
_alignmentrt   rz   r]   Úadd)r   r   ro   rr   rs   Únew_stoprq   r#   r#   r$   Úmalloc÷   s   
$÷zHeap.mallocN)r-   r.   r/   r„   r   rj   r%   Ústaticmethodrd   rt   rz   rv   r~   r�   r‡   r#   r#   r#   r$   rQ   z   s    

rQ   c                   @   s2   e Zd Zeƒ Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
r	   c                 C   sN   d|  krt jk sJ ‚ J ‚tj |¡}||f| _tj| tjj|fd� d S )Nr   )Úargs)	r‚   rƒ   r	   Ú_heapr‡   r   r   r<   r�   )r   r   rq   r#   r#   r$   r%     s   
zBufferWrapper.__init__c                 C   s4   | j \\}}}}t |j¡\}}||ksJ ‚|| S r'   )r   r   Úaddress_of_bufferr   )r   ro   rr   rs   r   Úaddressrn   r#   r#   r$   Úget_address  s   zBufferWrapper.get_addressc                 C   s
   | j d S r`   )r   r)   r#   r#   r$   Úget_size  s   
zBufferWrapper.get_sizec                 C   s&   | j \\}}}}t|jƒ||| … S r'   )r   Ú
memoryviewr   )r   ro   rr   rs   r   r#   r#   r$   Úcreate_memoryview  s   zBufferWrapper.create_memoryviewN)	r-   r.   r/   rQ   rŠ   r%   r�   rŽ   r�   r#   r#   r#   r$   r	     s    )Ú
__future__r   rf   r   r=   r   r   r‚   rT   r0   Ú r   r   r   Ú_extr   r   Ú__all__Úversion_infor8   ÚplatformÚobjectr   rN   rK   ÚregisterrQ   r	   r#   r#   r#   r$   Ú<module>   s0   
"$ 