PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  oY]#@sddlZddlZddlZddlmZddlmZddlmZddlmZddl m Z Gdd d ej Z Gd d d ej ZGd d d eejZdS)N)compat) protocols) transports) coroutine)loggercsEeZdZddfddZddZddZdd Zd d Zd d ZddZ e j rddZ ddZ ddZddZddZddZddZddZed d!Zd"d#Zd$d%Zd&d'Zd(d)Zed*d+Zd,d-Zd.d/ZS)0BaseSubprocessTransportNc  stj| d|_||_||_d|_d|_d|_g|_t j |_ i|_ d|_ |tjkrd|j d<|tjkrd|j d<|tjkrd|j d ) r/__name__rappendrrrgetpipejoin)r)infor r rr0r0r1__repr__9s,      z BaseSubprocessTransport.__repr__cKs tdS)N)NotImplementedError)r)r r r r rrr.r0r0r1r VszBaseSubprocessTransport._startcCs ||_dS)N)r)r)r+r0r0r1 set_protocolYsz$BaseSubprocessTransport.set_protocolcCs|jS)N)r)r)r0r0r1 get_protocol\sz$BaseSubprocessTransport.get_protocolcCs|jS)N)r)r)r0r0r1 is_closing_sz"BaseSubprocessTransport.is_closingc Cs|jr dSd|_x3|jjD]"}|dkr;q&|jjq&W|jdk r|jdkr|jjdkr|jj rt j d|y|jj Wnt k rYnXdS)NTz$Close running child process: kill %r)rrvaluesr8r!rrpollrr#rwarningkillProcessLookupError)r)protor0r0r1r!bs     zBaseSubprocessTransport.closecCs+|js'tjd|t|jdS)Nzunclosed transport %r)rwarningswarnResourceWarningr!)r)r0r0r1__del__s zBaseSubprocessTransport.__del__cCs|jS)N)r)r)r0r0r1get_pidszBaseSubprocessTransport.get_pidcCs|jS)N)r)r)r0r0r1get_returncodesz&BaseSubprocessTransport.get_returncodecCs%||jkr|j|jSdSdS)N)rr8)r)fdr0r0r1get_pipe_transportsz*BaseSubprocessTransport.get_pipe_transportcCs|jdkrtdS)N)rrD)r)r0r0r1 _check_procsz#BaseSubprocessTransport._check_proccCs|j|jj|dS)N)rNr send_signal)r)signalr0r0r1rOs z#BaseSubprocessTransport.send_signalcCs|j|jjdS)N)rNr terminate)r)r0r0r1rQs z!BaseSubprocessTransport.terminatecCs|j|jjdS)N)rNrrC)r)r0r0r1rCs zBaseSubprocessTransport.killc #syLj}j}|jdk r]|jfdd|jEdH\}}|jd<|jdk r|jfdd|jEdH\}}|jd<|jdk r|jfdd|jEdH\}}|jd<jdk st |j j j x'jD]\}}|j ||q"Wd_WnKt k r}z+|dk r|j r|j|WYdd}~Xn'X|dk r|j r|jddS)Ncs tdS)Nr)WriteSubprocessPipeProtor0)r)r0r1sz8BaseSubprocessTransport._connect_pipes..rcs tdS)Nr)ReadSubprocessPipeProtor0)r)r0r1rSsrcs tdS)Nr )rTr0)r)r0r1rSsr )rrr Zconnect_write_piperr Zconnect_read_piperrAssertionError call_soonrconnection_made Exception cancelled set_exception set_result) r)r,procr*_r8callbackdataexcr0)r)r1r(s8       z&BaseSubprocessTransport._connect_pipescGs?|jdk r(|jj||fn|jj||dS)N)rr6rrV)r)cbr_r0r0r1_callszBaseSubprocessTransport._callcCs'|j|jj|||jdS)N)rbrZpipe_connection_lost _try_finish)r)rLr`r0r0r1_pipe_connection_lostsz-BaseSubprocessTransport._pipe_connection_lostcCs|j|jj||dS)N)rbrZpipe_data_received)r)rLr_r0r0r1_pipe_data_receivedsz+BaseSubprocessTransport._pipe_data_receivedcCs|dk st||jdks6t|j|jjrXtjd||||_|jjdkr||j_|j|j j |j x*|j D]}|j s|j|qWd|_ dS)Nz%r exited with return code %r)rUrrr#rr:r returncoderbrZprocess_exitedrcrrYr[)r)rfr,r0r0r1_process_exiteds      z'BaseSubprocessTransport._process_exitedccs>|jdk r|jS|jj}|jj||EdHS)zdWait until the process exit and return the process return code. This method is a coroutine.N)rrZ create_futurerr6)r)r,r0r0r1_waits zBaseSubprocessTransport._waitcCse|j st|jdkr#dStdd|jjDrad|_|j|jddS)Ncss$|]}|dk o|jVqdS)N) disconnected).0pr0r0r1 sz6BaseSubprocessTransport._try_finish..T)rrUrallrr@rb_call_connection_lost)r)r0r0r1rcs  z#BaseSubprocessTransport._try_finishc Cs7z|jj|Wdd|_d|_d|_XdS)N)rconnection_lostrr)r)r`r0r0r1rns   z-BaseSubprocessTransport._call_connection_lost)r5 __module__ __qualname__rr;r r=r>r?r!rZPY34rIrJrKrMrNrOrQrCrr(rbrdrergrhrcrnr0r0)r/r1r s0 )               %     rc@sXeZdZddZddZddZddZd d Zd d Zd S)rRcCs(||_||_d|_d|_dS)NF)r\rLr8ri)r)r\rLr0r0r1rs   z!WriteSubprocessPipeProto.__init__cCs ||_dS)N)r8)r)Z transportr0r0r1rW sz(WriteSubprocessPipeProto.connection_madecCsd|jj|j|jfS)Nz<%s fd=%s pipe=%r>)r/r5rLr8)r)r0r0r1r;sz!WriteSubprocessPipeProto.__repr__cCs,d|_|jj|j|d|_dS)NT)rir\rdrL)r)r`r0r0r1ros z(WriteSubprocessPipeProto.connection_lostcCs|jjjdS)N)r\r pause_writing)r)r0r0r1rrsz&WriteSubprocessPipeProto.pause_writingcCs|jjjdS)N)r\rresume_writing)r)r0r0r1rssz'WriteSubprocessPipeProto.resume_writingN) r5rprqrrWr;rorrrsr0r0r0r1rRs      rRc@seZdZddZdS)rTcCs|jj|j|dS)N)r\rerL)r)r_r0r0r1 data_received#sz%ReadSubprocessPipeProto.data_receivedN)r5rprqrtr0r0r0r1rT s rT)rrrFrrrZ coroutinesrlogrZSubprocessTransportrZ BaseProtocolrRZProtocolrTr0r0r0r1s