3 \* ã @ sÐ d ddgZ ddlZddlZddlZddlZddlZddlZddlZddlm Z m Z ddlZddlm Z ddlmZ ejjZdd lmZmZmZmZmZ G d d „ d eƒZeƒ ZG dd„ deƒZG dd„ deƒZdS ) ÚQueueÚSimpleQueueÚ JoinableQueueé N)ÚEmptyÚFullé )Ú connection)Úcontext)ÚdebugÚinfoÚFinalizeÚregister_after_forkÚ is_exitingc @ s® e Zd Zd(dd„Zdd„ Zdd„ Zdd „ Zd)dd „Zd*dd„Zdd„ Z dd„ Z dd„ Zdd„ Zdd„ Z dd„ Zdd„ Zdd„ Zd d!„ Zed"d#„ ƒZed$d%„ ƒZed&d'„ ƒZdS )+r r c C s’ |dkrddl m} || _tjdd�\| _| _|jƒ | _t j ƒ | _tj dkrTd | _n |jƒ | _|j|ƒ| _d| _| jƒ tj dkrŽt| tjƒ d S )Nr r )Ú SEM_VALUE_MAXF)ÚduplexÚwin32)Zsynchronizer Ú_maxsizer ÚPipeÚ_readerÚ_writerÚLockÚ_rlockÚosÚgetpidÚ_opidÚsysÚplatformÚ_wlockZBoundedSemaphoreÚ_semÚ _ignore_epipeÚ_after_forkr r )ÚselfÚmaxsizeÚctx© r$ ú./usr/lib64/python3.6/multiprocessing/queues.pyÚ__init__$ s zQueue.__init__c C s. t j| ƒ | j| j| j| j| j| j| j| j fS )N) r Úassert_spawningr r r r r r r r )r! r$ r$ r% Ú__getstate__9 s zQueue.__getstate__c C s0 |\| _ | _| _| _| _| _| _| _| jƒ d S )N) r r r r r r r r r )r! Ústater$ r$ r% Ú__setstate__> s $zQueue.__setstate__c C sb t dƒ tjtjƒ ƒ| _tjƒ | _d | _d | _ d| _ d| _d | _| j j| _| jj| _| jj| _d S )NzQueue._after_fork()F)r Ú threadingÚ Conditionr Ú _notemptyÚcollectionsÚdequeÚ_bufferÚ_threadÚ_jointhreadÚ_joincancelledÚ_closedÚ_closer Ú send_bytesÚ_send_bytesr Ú recv_bytesÚ_recv_bytesÚpollÚ_poll)r! r$ r$ r% r C s zQueue._after_forkTNc C s\ | j st‚| jj||ƒst‚| j�. | jd kr8| jƒ | jj |ƒ | jj ƒ W d Q R X d S )N)r4 ÚAssertionErrorr Úacquirer r- r1 Ú _start_threadr0 ÚappendÚnotify)r! ÚobjÚblockÚtimeoutr$ r$ r% ÚputP s z Queue.putc C s® |r2|d kr2| j � | jƒ }W d Q R X | jjƒ nr|rBtjƒ | }| j j||ƒsTt‚zB|rv|tjƒ }| j|ƒs‚t‚n| jƒ s‚t‚| jƒ }| jjƒ W d | j jƒ X t j |ƒS )N)r r9 r ÚreleaseÚtimeZ monotonicr= r r; Ú_ForkingPicklerÚloads)r! rB rC ÚresZdeadliner$ r$ r% Úget[ s&