e f%-@s,dddgZddlZddlZddlZddlZddlZddlZddlZddlm Z m Z ddl Z ddl m Z ddl mZdd lmZmZmZmZmZdd lmZGd ddeZeZGd ddeZGd ddeZdS)Queue SimpleQueue JoinableQueueN)EmptyFull) connection)context)debuginfoFinalizeregister_after_fork is_exiting)ForkingPicklerc@s eZdZdddZddZddZdd Zd d d d Zd d ddZddZ ddZ ddZ ddZ ddZ ddZddZddZd d!Zed"d#Zed$d%Zed&d'Zd S)(rrcCs|dkrddlm}n||_tjdd\|_|_|j|_t j |_ t j dkrd|_n|j|_|j||_d|_|jt j dkrt|tjndS)Nrr) SEM_VALUE_MAXduplexFwin32)Z synchronizer_maxsizerPipe_reader_writerLock_rlockosgetpid_opidsysplatform_wlockZBoundedSemaphore_sem _ignore_epipe _after_forkr r)selfmaxsizectxr%;/opt/alt/python34/lib64/python3.4/multiprocessing/queues.py__init__$s     zQueue.__init__cCsAtj||j|j|j|j|j|j|j|j fS)N) r assert_spawningr rrrrrrr)r"r%r%r& __getstate__9s zQueue.__getstate__c CsD|\|_|_|_|_|_|_|_|_|jdS)N) r rrrrrrrr!)r"stater%r%r& __setstate__>s6zQueue.__setstate__cCstdtjtj|_tj|_d|_d|_ d|_ d|_ d|_ |j j|_|jj|_|jj|_dS)NzQueue._after_fork()F)r threading Conditionr _notempty collectionsdeque_buffer_thread _jointhread_joincancelled_closed_closer send_bytes _send_bytesr recv_bytes _recv_bytespoll_poll)r"r%r%r&r!Cs      zQueue._after_forkTNc Cs}|jj||stn|jjz=|jdkrJ|jn|jj||jjWd|jj XdS)N) racquirerr.r2 _start_threadr1appendnotifyrelease)r"objblocktimeoutr%r%r&putPs   z Queue.putc Cs|r>|dkr>|j|j}WdQX|jjn|rWtj|}n|jj||sutnzp|r|tj}|dks|j| rtqn|jstn|j}|jjWd|jjXtj |S)Nr) rr:rrAtimer=rr<rloads)r"rCrDresZdeadliner%r%r&get^s&      z Queue.getcCs|j|jjjS)N)rr_semlockZ _get_value)r"r%r%r&qsizevsz Queue.qsizecCs |j S)N)r<)r"r%r%r&emptyzsz Queue.emptycCs|jjjS)N)rrJ_is_zero)r"r%r%r&full}sz Queue.fullcCs |jdS)NF)rI)r"r%r%r& get_nowaitszQueue.get_nowaitcCs|j|dS)NF)rE)r"rBr%r%r& put_nowaitszQueue.put_nowaitc CsDd|_z|jjWd|j}|r?d|_|nXdS)NT)r5rcloser6)r"rQr%r%r&rQs   z Queue.closecCs$td|jr |jndS)NzQueue.join_thread())r r3)r"r%r%r& join_threads  zQueue.join_threadc Cs=tdd|_y|jjWntk r8YnXdS)NzQueue.cancel_join_thread()T)r r4r3ZcancelAttributeError)r"r%r%r&cancel_join_threads    zQueue.cancel_join_threadc Cstd|jjtjdtjd|j|j|j|j |j j |j fdd|_ d|j _td|j jtd|jtjk}|j r| rt|j tjtj|j gd d |_nt|tj|j|jgd d |_dS) NzQueue._start_thread()targetargsnameZQueueFeederThreadTzdoing self._thread.start()z... done self._thread.start()Z exitpriority )r r1clearr,ZThreadr_feedr.r8rrrQr r2Zdaemonstartrrrr4r _finalize_joinweakrefrefr3_finalize_closer6)r"Zcreated_by_this_processr%r%r&r>s*           zQueue._start_threadcCsDtd|}|dk r6|jtdn tddS)Nzjoining queue threadz... queue thread joinedz... queue thread already dead)r join)ZtwrZthreadr%r%r&r^s      zQueue._finalize_joinc CsAtd|jz|jt|jWd|jXdS)Nztelling queue thread to quit)r r=r? _sentinelr@rA)buffernotemptyr%r%r&ras    zQueue._finalize_closecCstd|j}|j}|j}|j} t} tjdkrX|j} |j} nd} yx|z|s~|nWd|Xy}xv| } | | krtd|dStj | } | dkr|| q| z|| Wd| XqWWqdt k rYqdXqdWWnt k r}zr|r[t |ddt jkr[dSy3trwtd|nddl}|jWnt k rYnXWYdd}~XnXdS)Nz$starting thread to feed data to piperz%feeder thread got sentinel -- exitingerrnorzerror in queue thread: %s)r r=rAwaitpopleftrcrrrdumps IndexError ExceptiongetattrrfZEPIPErr traceback print_exc)rdrer7Z writelockrQZ ignore_epipeZnacquireZnreleaseZnwaitZbpopleftsentinelZwacquireZwreleaserBermr%r%r&r\sV              !   z Queue._feed)__name__ __module__ __qualname__r'r)r+r!rErIrKrLrNrOrPrQrRrTr> staticmethodr^rar\r%r%r%r&r"s$            &  c@saeZdZdddZddZddZdd d d Zd d ZddZd S)rrcCs;tj||d||jd|_|j|_dS)Nr$r)rr'Z Semaphore_unfinished_tasksr-_cond)r"r#r$r%r%r&r'szJoinableQueue.__init__cCstj||j|jfS)N)rr)rvru)r"r%r%r&r)#szJoinableQueue.__getstate__cCs:tj||dd|dd\|_|_dS)Nrx)rr+rvru)r"r*r%r%r&r+&szJoinableQueue.__setstate__TNc Cs|jj||stn|jj|jjzJ|jdkrW|jn|jj||j j |jj Wd|jj |jj XdS)N) rr=rr.rvr2r>r1r?rurAr@)r"rBrCrDr%r%r&rE*s      zJoinableQueue.putc Csi|jjzG|jjds1tdn|jjjrS|jjnWd|jjXdS)NFz!task_done() called too many times)rvr=ru ValueErrorrJrMZ notify_allrA)r"r%r%r& task_done;s zJoinableQueue.task_donec CsH|jjz&|jjjs2|jjnWd|jjXdS)N)rvr=rurJrMrgrA)r"r%r%r&rbEs  zJoinableQueue.join) rqrrrsr'r)r+rErzrbr%r%r%r&rs    c@sXeZdZddZddZddZddZd d Zd d Zd S)rcCsjtjdd\|_|_|j|_|jj|_tj dkrWd|_ n|j|_ dS)NrFr) rrrrrrr;r<rrr)r"r$r%r%r&r'Ss  zSimpleQueue.__init__cCs |j S)N)r<)r"r%r%r&rL\szSimpleQueue.emptycCs)tj||j|j|j|jfS)N)r r(rrrr)r"r%r%r&r)_s zSimpleQueue.__getstate__cCs"|\|_|_|_|_dS)N)rrrr)r"r*r%r%r&r+cszSimpleQueue.__setstate__cCs,|j|jj}WdQXtj|S)N)rrr9rrG)r"rHr%r%r&rIfs zSimpleQueue.getc CsUtj|}|jdkr1|jj|n |j|jj|WdQXdS)N)rrirrr7)r"rBr%r%r&rEls  zSimpleQueue.putN) rqrrrsr'rLr)r+rIrEr%r%r%r&rQs     )__all__rrr,r/rFr_rfZqueuerrZ_multiprocessingrr utilr r r r rZ reductionrobjectrrcrrr%r%r%r& s"        ( 5