__init__.py000064400000001624147207507420006670 0ustar00# # Package analogous to 'threading.py' but using processes # # multiprocessing/__init__.py # # This package is intended to duplicate the functionality (and much of # the API) of threading.py but uses processes instead of threads. A # subpackage 'multiprocessing.dummy' has the same API but is a simple # wrapper for 'threading'. # # Copyright (c) 2006-2008, R Oudkerk # Licensed to PSF under a Contributor Agreement. # import sys from . import context # # Copy stuff from default context # __all__ = [x for x in dir(context._default_context) if not x.startswith('_')] globals().update((name, getattr(context._default_context, name)) for name in __all__) # # XXX These should not really be documented or public. # SUBDEBUG = 5 SUBWARNING = 25 # # Alias for main module -- will be reset by bootstrapping child processes # if '__main__' in sys.modules: sys.modules['__mp_main__'] = sys.modules['__main__'] connection.pyc000064400000034547147207507420007445 0ustar00 rfc@sdddgZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z m Z ddl m Z mZmZmZddlmZmZdZd Zd ZejZd Zd gZeed rd Zed g7Znejd kr4dZedg7ZnedZdZdZdZ de!fdYZ"dddZ$ejd kre%dZ&nddlm'Z'e%dZ&de!fdYZ(dZ)ejd kr de!fdYZ*dZ+ndZ,dZ-d Z.d!Z/d"Z0d#Z1d$Z2d%e!fd&YZ3d'Z4d(Z5d)e"fd*YZ6d+Z7dS(,tClienttListenertPipeiN(tcurrent_processtAuthenticationError(t get_temp_dirtFinalizet sub_debugtdebug(t duplicatetclosei g4@tsha256tAF_INETtAF_UNIXtwin32tAF_PIPEcCstj|S(N(ttime(ttimeout((s2/usr/lib64/python2.7/multiprocessing/connection.pyt _init_timeoutMscCstj|kS(N(R(tt((s2/usr/lib64/python2.7/multiprocessing/connection.pyt_check_timeoutPscCsw|dkrd S|dkr5tjdddtS|dkrgtjdd tjtjfStd d S( s? Return an arbitrary free address for the given family R t localhostiR tprefixs listener-tdirRs\\.\pipe\pyc-%d-%d-sunrecognized familyN(Ri(ttempfiletmktempRtostgetpidt _mmap_countertnextt ValueError(tfamily((s2/usr/lib64/python2.7/multiprocessing/connection.pytarbitrary_addressWs    cCset|tkrdSt|tkr;|jdr;dSt|tkrQdStd|dS(s] Return the types of the address This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE' R s\\RR saddress type of %r unrecognizedN(ttypettupletstrt startswithR(taddress((s2/usr/lib64/python2.7/multiprocessing/connection.pyt address_typefs!cBsSeZdZdddddZdZdZedZedZ RS(s Returns a listener object. This is a wrapper for a bound socket which is 'listening' for connections, or for a Windows named pipe. icCs|p|rt|pt}|p-t|}|dkrQt|||_nt||||_|dk rt|t rt dn||_ dS(NRsauthkey should be a byte string( R&tdefault_familyR t PipeListenert _listenertSocketListenertNonet isinstancetbytest TypeErrort_authkey(tselfR%Rtbacklogtauthkey((s2/usr/lib64/python2.7/multiprocessing/connection.pyt__init__s  cCs?|jj}|jr;t||jt||jn|S(sz Accept a connection on the bound socket or named pipe of `self`. Returns a `Connection` object. (R)tacceptR/tdeliver_challengetanswer_challenge(R0tc((s2/usr/lib64/python2.7/multiprocessing/connection.pyR4s  cCs |jjS(sA Close the bound socket or named pipe of `self`. (R)R (R0((s2/usr/lib64/python2.7/multiprocessing/connection.pyR scCs |jjS(N(R)t_address(R0((s2/usr/lib64/python2.7/multiprocessing/connection.pytscCs |jjS(N(R)t_last_accepted(R0((s2/usr/lib64/python2.7/multiprocessing/connection.pyR9sN( t__name__t __module__t__doc__R+R3R4R tpropertyR%t last_accepted(((s2/usr/lib64/python2.7/multiprocessing/connection.pyRys  cCs|pt|}|dkr-t|}n t|}|dk rat|t ratdn|dk rt||t||n|S(s= Returns a connection to the address of a `Listener` Rsauthkey should be a byte stringN( R&t PipeClientt SocketClientR+R,R-R.R6R5(R%RR2R7((s2/usr/lib64/python2.7/multiprocessing/connection.pyRs     cCs|rtj\}}|jt|jttjtj|j}tjtj|j}|j |j n<tj \}}tj|dt }tj|dt }||fS(sL Returns pair of connection objects at either end of a pipe twritabletreadable( tsockett socketpairt setblockingtTruet_multiprocessingt ConnectionRtduptfilenoR tpipetFalse(tduplexts1ts2tc1tc2tfd1tfd2((s2/usr/lib64/python2.7/multiprocessing/connection.pyRs    (Rc CsUtd}|r;tj}tjtjB}tt}}ntj}tj}dt}}tj||tjtj Btj Bd||tj tj }tj ||dtj tjdtj }tj|tj ddytj|tj Wn/tk r }|jdtjkr!q!nXtj|d|} tj|d|} | | fS(sL Returns pair of connection objects at either end of a pipe RiiRBRCN(R RtPIPE_ACCESS_DUPLEXt GENERIC_READt GENERIC_WRITEtBUFSIZEtPIPE_ACCESS_INBOUNDtCreateNamedPipetPIPE_TYPE_MESSAGEtPIPE_READMODE_MESSAGEt PIPE_WAITtNMPWAIT_WAIT_FOREVERtNULLt CreateFilet OPEN_EXISTINGtSetNamedPipeHandleStateR+tConnectNamedPipet WindowsErrortargstERROR_PIPE_CONNECTEDRHtPipeConnection( RNR%topenmodetaccesstobsizetibsizeth1th2teRQRR((s2/usr/lib64/python2.7/multiprocessing/connection.pyRs2      $ R*cBs,eZdZddZdZdZRS(sO Representation of a socket which is bound to an address and listening icCstjtt||_yb|jjtjtjd|jjt|jj||jj ||jj |_ Wn$tj k r|jj nX||_d|_|dkrt|tjd|fdd|_n d|_dS(NiR Ret exitpriorityi(RDtgetattrt_sockett setsockoptt SOL_SOCKETt SO_REUSEADDRRFRGtbindtlistent getsocknameR8terrorR t_familyR+R:RRtunlinkt_unlink(R0R%RR1((s2/usr/lib64/python2.7/multiprocessing/connection.pyR3s     $cCsx\tr^y|jj\}|_Wn2tjk rY}|jdtjkr[q[qXPqW|j tt |j }t j |}|j|S(Ni(RGRqR4R:RDRxReterrnotEINTRRFR RKRHRIR (R0tsRntfdtconn((s2/usr/lib64/python2.7/multiprocessing/connection.pyR4s    cCs-|jj|jdk r)|jndS(N(RqR R{R+(R0((s2/usr/lib64/python2.7/multiprocessing/connection.pyR #s (R;R<R=R3R4R (((s2/usr/lib64/python2.7/multiprocessing/connection.pyR*s  cCst|}tjtt|}|jtt}xsy|j|WnXtjk r}|jdt j kst |rt d|nt jdq=XPq=t|j}tj|}|j|S(sO Return a connection object connected to the socket given by `address` isfailed to connect to address %sg{Gz?(R&RDRpRFRGRtconnectRxReR|t ECONNREFUSEDRRRtsleepR RKRHRIR (R%RR~RRnRR((s2/usr/lib64/python2.7/multiprocessing/connection.pyRA)s$   "  R(cBs2eZdZddZdZedZRS(s0 Representation of a named pipe c Cs||_tj|tjtjtjBtjBtjtttj tj }|g|_ d|_ td|jt|tjd|j |jfdd|_dS(Ns listener created with address=%rReRoi(R8RRZRUR[R\R]tPIPE_UNLIMITED_INSTANCESRXR^R_t _handle_queueR+R:RRR(t_finalize_pipe_listenerR (R0R%R1thandle((s2/usr/lib64/python2.7/multiprocessing/connection.pyR3Ns       c Cstj|jtjtjtjBtjBtjtttj tj }|j j ||j j d}ytj|tj Wn8tk r}|jdtjtjfkrqnXtj|S(Ni(RRZR8RUR[R\R]RRXR^R_RtappendtpopRcRdReRft ERROR_NO_DATARHRg(R0t newhandleRRn((s2/usr/lib64/python2.7/multiprocessing/connection.pyR4as    cCs,td|x|D]}t|qWdS(Ns closing listener with address=%r(RR (tqueueR%R((s2/usr/lib64/python2.7/multiprocessing/connection.pyRus  N(R;R<R=R+R3R4t staticmethodR(((s2/usr/lib64/python2.7/multiprocessing/connection.pyR(Js  cCst}xyHtj|dtj|tjtjBdtjtjdtj}WnDtk r}|j dtj tj fkst |rqq XPq tj |tjddtj|S(sU Return a connection object connected to the pipe given by `address` iiN(RRt WaitNamedPipeR`RVRWR_RaRdRetERROR_SEM_TIMEOUTtERROR_PIPE_BUSYRRbR\R+RHRg(R%RthRn((s2/usr/lib64/python2.7/multiprocessing/connection.pyR@{s  " is #CHALLENGE#s #WELCOME#s #FAILURE#cCsddl}t|tS(Ni(thashlibRptHMAC_DIGEST_NAME(R((s2/usr/lib64/python2.7/multiprocessing/connection.pytget_digestmod_for_hmacs cCsddl}t|ts!ttjt}|jt||j ||t j }|j d}||kr|jt n|jttddS(Niisdigest received was wrong(thmacR,R-tAssertionErrorRturandomtMESSAGE_LENGTHt send_bytest CHALLENGEtnewRtdigestt recv_bytestWELCOMEtFAILURER(t connectionR2RtmessageRtresponse((s2/usr/lib64/python2.7/multiprocessing/connection.pyR5s   cCsddl}t|ts!t|jd}|tt tksVtd||tt}|j||tj }|j ||jd}|t krt dndS(Niis message = %rsdigest sent was rejected( RR,R-RRtlenRRRRRRR(RR2RRRR((s2/usr/lib64/python2.7/multiprocessing/connection.pyR6s &  tConnectionWrappercBs#eZdZdZdZRS(cCsO||_||_||_x-dD]%}t||}t|||q"WdS(NRKR tpollRR(sfilenoscloseRs recv_bytess send_bytes(t_connt_dumpst_loadsRptsetattr(R0Rtdumpstloadstattrtobj((s2/usr/lib64/python2.7/multiprocessing/connection.pyR3s     cCs#|j|}|jj|dS(N(RRR(R0RR~((s2/usr/lib64/python2.7/multiprocessing/connection.pytsendscCs|jj}|j|S(N(RRR(R0R~((s2/usr/lib64/python2.7/multiprocessing/connection.pytrecvs(R;R<R3RR(((s2/usr/lib64/python2.7/multiprocessing/connection.pyRs  cCs%tj|fddddjdS(Nitutf8(t xmlrpclibRR+tencode(R((s2/usr/lib64/python2.7/multiprocessing/connection.pyt _xml_dumpsscCs%tj|jd\\}}|S(NR(RRtdecode(R~Rtmethod((s2/usr/lib64/python2.7/multiprocessing/connection.pyt _xml_loadss!t XmlListenercBseZdZRS(cCs+ddlatj|}t|ttS(Ni(RRR4RRR(R0R((s2/usr/lib64/python2.7/multiprocessing/connection.pyR4s (R;R<R4(((s2/usr/lib64/python2.7/multiprocessing/connection.pyRscOs%ddlatt||ttS(Ni(RRRRR(Retkwds((s2/usr/lib64/python2.7/multiprocessing/connection.pyt XmlClients (8t__all__RtsysRDR|RRt itertoolsRHtmultiprocessingRRtmultiprocessing.utilRRRRtmultiprocessing.forkingR R RXtCONNECTION_TIMEOUTRtcountRR'tfamiliesthasattrtplatformRRR R&tobjectRR+RRGRRR*RAR(R@RRRRRR5R6RRRRR(((s2/usr/lib64/python2.7/multiprocessing/connection.pyt#sd        "      , *. 1     heap.pyc000064400000015375147207507420006221 0ustar00 rfc@s ddlZddlZddlZddlZddlZddlZddlZddlZddlm Z m Z ddl m Z dgZ ejdkrddlmZdefdYZndefd YZd efd YZdefd YZdS( iN(tFinalizetinfo(tassert_spawningt BufferWrappertwin32(RtArenacBs/eZejZdZdZdZRS(cCs||_dtjtjjf|_tjd|jd|j|_t j dksjt d|j|jf|_ dS(Ns pym-%d-%dittagnameistagname already in use( tsizetostgetpidRt_countertnexttnametmmaptbufferRt GetLastErrortAssertionErrort_state(tselfR((s,/usr/lib64/python2.7/multiprocessing/heap.pyt__init__=s  "!cCst||jS(N(RR(R((s,/usr/lib64/python2.7/multiprocessing/heap.pyt __getstate__Ds cCsY|\|_|_|_tjd|jd|j|_tjtjksUtdS(NiR( RR RR RRRtERROR_ALREADY_EXISTSR(Rtstate((s,/usr/lib64/python2.7/multiprocessing/heap.pyt __setstate__Hs!(t__name__t __module__t itertoolstcountR RRR(((s,/usr/lib64/python2.7/multiprocessing/heap.pyR9s   cBseZdZRS(cCs+tjd||_||_d|_dS(Ni(R RRtNoneR (RR((s,/usr/lib64/python2.7/multiprocessing/heap.pyRQs (RRR(((s,/usr/lib64/python2.7/multiprocessing/heap.pyROstHeapcBsbeZdZejdZedZdZdZ dZ dZ dZ dZ RS( icCsmtj|_tj|_||_g|_i|_i|_ i|_ t |_ g|_ g|_dS(N(RR t_lastpidt threadingtLockt_lockt_sizet_lengthst _len_to_seqt_start_to_blockt_stop_to_blocktsett_allocated_blockst_arenast_pending_free_blocks(RR((s,/usr/lib64/python2.7/multiprocessing/heap.pyR^s       cCs|d}|||@S(Ni((tnt alignmenttmask((s,/usr/lib64/python2.7/multiprocessing/heap.pyt_roundupks c Cstj|j|}|t|jkr|jt|j|tj}|jd9_t d|t |}|j j ||d|fS|j|}|j |}|j}|s|j |=|j|=n|\}}}|j||f=|j||f=|S(Nis"allocating a new mmap of length %di(tbisectt bisect_leftR#tlenR.tmaxR"R tPAGESIZERRR)tappendR$tpopR%R&( RRtitlengthtarenatseqtblocktstarttstop((s,/usr/lib64/python2.7/multiprocessing/heap.pyt_mallocqs"!      c Cs!|\}}}y|j||f}Wntk r9nX|j|\}}y|j||f}Wntk rynX|j|\}}|||f}||}y|j|j|Wn4tk r|g|j|#s          queues.pyo000064400000026352147207507420006624 0ustar00 rfc@s8dddgZddlZddlZddlZddlZddlZddlZddlZddlm Z m Z ddl Z ddl m Z ddlmZmZmZmZddlmZmZmZmZdd lmZdefd YZeZdefd YZdefd YZdS( tQueuet SimpleQueuet JoinableQueueiN(tEmptytFull(tPipe(tLocktBoundedSemaphoret Semaphoret Condition(tdebugtinfotFinalizetregister_after_fork(tassert_spawningcBseZddZdZdZdZeddZeddZ dZ dZ d Z d Z d Zd Zd ZdZdZedZedZedZRS(icCs|dkrtjj}n||_tdt\|_|_t|_ t j |_ t jdkrud|_n t|_t||_|jt jdkrt|tjndS(Nitduplextwin32(t_multiprocessingtSemLockt SEM_VALUE_MAXt_maxsizeRtFalset_readert_writerRt_rlocktostgetpidt_opidtsystplatformtNonet_wlockRt_semt _after_forkR R(tselftmaxsize((s./usr/lib64/python2.7/multiprocessing/queues.pyt__init__:s      cCs8t||j|j|j|j|j|j|jfS(N(RRRRRRR R(R"((s./usr/lib64/python2.7/multiprocessing/queues.pyt __getstate__Ls cCs>|\|_|_|_|_|_|_|_|jdS(N(RRRRRR RR!(R"tstate((s./usr/lib64/python2.7/multiprocessing/queues.pyt __setstate__Qs0cCstdtjtj|_tj|_d|_ d|_ t |_ t |_ d|_|jj|_|jj|_|jj|_dS(NsQueue._after_fork()(R t threadingR Rt _notemptyt collectionstdequet_bufferRt_threadt _jointhreadRt_joincancelledt_closedt_closeRtsendt_sendRtrecvt_recvtpollt_poll(R"((s./usr/lib64/python2.7/multiprocessing/queues.pyR!Vs      cCs}|jj||stn|jjz=|jdkrJ|jn|jj||jj Wd|jj XdS(N( R tacquireRR)R-Rt _start_threadR,tappendtnotifytrelease(R"tobjtblockttimeout((s./usr/lib64/python2.7/multiprocessing/queues.pytputcs   cCs|rT|dkrT|jjz!|j}|jj|SWd|jjXn|rmtj|}n|jj||stnzt|r|tj}|dks|j| rtqn|jstn|j}|jj|SWd|jjXdS(Ni( RRR8R5R R<ttimeRR7(R"R>R?trestdeadline((s./usr/lib64/python2.7/multiprocessing/queues.pytgetqs,         cCs|j|jjjS(N(RR t_semlockt _get_value(R"((s./usr/lib64/python2.7/multiprocessing/queues.pytqsizescCs |j S(N(R7(R"((s./usr/lib64/python2.7/multiprocessing/queues.pytemptyscCs|jjjS(N(R REt_is_zero(R"((s./usr/lib64/python2.7/multiprocessing/queues.pytfullscCs |jtS(N(RDR(R"((s./usr/lib64/python2.7/multiprocessing/queues.pyt get_nowaitscCs|j|tS(N(R@R(R"R=((s./usr/lib64/python2.7/multiprocessing/queues.pyt put_nowaitscCs0t|_|jj|jr,|jndS(N(tTrueR0RtcloseR1(R"((s./usr/lib64/python2.7/multiprocessing/queues.pyRNs   cCs$td|jr |jndS(NsQueue.join_thread()(R R.(R"((s./usr/lib64/python2.7/multiprocessing/queues.pyt join_threads  cCs<tdt|_y|jjWntk r7nXdS(NsQueue.cancel_join_thread()(R RMR/R.tcanceltAttributeError(R"((s./usr/lib64/python2.7/multiprocessing/queues.pytcancel_join_threads    c Cstd|jjtjdtjd|j|j|j|j |j j fdd|_ t |j _td|j jtd|jst|j tjtj|j gdd |_nt|tj|j|jgdd |_dS( NsQueue._start_thread()ttargettargstnametQueueFeederThreadsdoing self._thread.start()s... done self._thread.start()t exitpriorityii (R R,tclearR(tThreadRt_feedR)R3RRRNR-RMtdaemontstartR/R t_finalize_jointweakreftrefR.t_finalize_closeR1(R"((s./usr/lib64/python2.7/multiprocessing/queues.pyR9s(            cCsDtd|}|dk r6|jtdn tddS(Nsjoining queue threads... queue thread joineds... queue thread already dead(R Rtjoin(ttwrtthread((s./usr/lib64/python2.7/multiprocessing/queues.pyR]s      cCsAtd|jz|jt|jWd|jXdS(Nstelling queue thread to quit(R R8R:t _sentinelR;R<(tbuffertnotempty((s./usr/lib64/python2.7/multiprocessing/queues.pyR`s    cCstdddlm}|j}|j}|j}|j} t} tj dkrh|j} |j} nd} yx|z|s|nWd|Xymxf| } | | krtd|dS| dkr|| q| z|| Wd| XqWqtt k rqtXqtWnZt k r{}y3|rMt d|nddl}|jWq|t k rwq|XnXdS(Ns$starting thread to feed data to pipei(t is_exitingRs%feeder thread got sentinel -- exitingserror in queue thread: %si(R tutilRgR8R<twaittpopleftRdRRRt IndexErrort ExceptionR t tracebackt print_exc(ReRfR2t writelockRNRgtnacquiretnreleasetnwaittbpoplefttsentineltwacquiretwreleaseR=teRm((s./usr/lib64/python2.7/multiprocessing/queues.pyRZsR                 N(t__name__t __module__R$R%R'R!RMRR@RDRGRHRJRKRLRNRORRR9t staticmethodR]R`RZ(((s./usr/lib64/python2.7/multiprocessing/queues.pyR8s$               cBsGeZddZdZdZeddZdZdZ RS(icCs/tj||td|_t|_dS(Ni(RR$Rt_unfinished_tasksR t_cond(R"R#((s./usr/lib64/python2.7/multiprocessing/queues.pyR$)scCstj||j|jfS(N(RR%R|R{(R"((s./usr/lib64/python2.7/multiprocessing/queues.pyR%.scCs.tj||d |d\|_|_dS(Ni(RR'R|R{(R"R&((s./usr/lib64/python2.7/multiprocessing/queues.pyR'1scCs|jj||stn|jj|jjzJ|jdkrW|jn|jj ||j j |jj Wd|jj |jj XdS(N( R R8RR)R|R-RR9R,R:R{R<R;(R"R=R>R?((s./usr/lib64/python2.7/multiprocessing/queues.pyR@5s      cCsi|jjzG|jjts1tdn|jjjrS|jjnWd|jjXdS(Ns!task_done() called too many times( R|R8R{Rt ValueErrorRERIt notify_allR<(R"((s./usr/lib64/python2.7/multiprocessing/queues.pyt task_doneFs cCsH|jjz&|jjjs2|jjnWd|jjXdS(N(R|R8R{RERIRiR<(R"((s./usr/lib64/python2.7/multiprocessing/queues.pyRaPs  N( RxRyR$R%R'RMRR@RRa(((s./usr/lib64/python2.7/multiprocessing/queues.pyR's     cBs5eZdZdZdZdZdZRS(cCs\tdt\|_|_t|_tjdkrBd|_ n t|_ |j dS(NRR( RRRRRRRRRRt _make_methods(R"((s./usr/lib64/python2.7/multiprocessing/queues.pyR$^s    cCs|jj S(N(RR6(R"((s./usr/lib64/python2.7/multiprocessing/queues.pyRHgscCs&t||j|j|j|jfS(N(RRRRR(R"((s./usr/lib64/python2.7/multiprocessing/queues.pyR%js cCs,|\|_|_|_|_|jdS(N(RRRRR(R"R&((s./usr/lib64/python2.7/multiprocessing/queues.pyR'nscs|jj|jj|jjfd}||_|jdkrd|jj |_ nC|jj |jj|jjfd}||_ dS(Ncs!z SWdXdS(N(((tracquireR4trrelease(s./usr/lib64/python2.7/multiprocessing/queues.pyRDus cs$z|SWdXdS(N((R=(R2RuRv(s./usr/lib64/python2.7/multiprocessing/queues.pyR@s( RR4RR8R<RDRRRR2R@(R"RDR@((RR4RR2RuRvs./usr/lib64/python2.7/multiprocessing/queues.pyRrs   (RxRyR$RHR%R'R(((s./usr/lib64/python2.7/multiprocessing/queues.pyR\s    (t__all__RRR(R*RAtatexitR^RRRRtmultiprocessingRtmultiprocessing.synchronizeRRRR tmultiprocessing.utilR R R R tmultiprocessing.forkingRtobjectRdRR(((s./usr/lib64/python2.7/multiprocessing/queues.pyt#s"        "" 5managers.pyo000064400000111771147207507420007112 0ustar00 rfc@sddddgZddlZddlZddlZddlZddlZddlZddlmZddl m Z m Z m Z m Z mZmZddlmZdd lmZmZmZmZdd lmZmZydd lmZWn!ek rdd lmZnXd Zejejegd ddfD]Z e!e"ie ^qDZ#de$fdYZ%fidZ&dZ'de(fdYZ)dZ*dZ+de$fdYZ,de$fdYZ-iej.ej/fd6ej0ej1fd6Z2de$fdYZ3de4fdYZ5de$fd YZ6d!Z7id"Z8e9e9e9e:d#Z;d$e$fd%YZ<d&e$fd'YZ=e:d(Z>d)e6fd*YZ?d+e6fd,YZ@d-e@fd.YZAd/e6fd0YZBd1e6fd2YZCd3e6fd4YZDe8d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKfZEdLeEfdMYZFe8dNd7d8d:d<d@dOdPdQdRd ddGdSdTdUdfZGe8dVd<d:d@d;dAfZHe8dWdXdYdZd[d\d]d^d_d`f ZIidadY6dad_6dbd[6dbd\6eI_Jde3fdcYZKeKjddejeKjdeejeKjdfejLeBeKjdgejMe@eKjdhejNe@eKjdiejOe@eKjdjejPe@eKjdkejQeAeKjdle eIeKjdmeReFeKjdneSeGeKjd&e=eDeKjdoe>eHeKjd$e<eCeKjdbdpe?dqeTeKjdadqeTdS(rt BaseManagert SyncManagert BaseProxytTokeniN(t format_exc(tProcesstcurrent_processtactive_childrentPooltutilt connection(tAuthenticationString(texittPopentassert_spawningtForkingPickler(tFinalizetinfo(t PicklingErrorcCstj|j|jffS(N(tarrayttypecodettostring(ta((s0/usr/lib64/python2.7/multiprocessing/managers.pyt reduce_array@stitemstkeystvaluescBs8eZdZdZdZdZdZdZRS( s4 Type to uniquely indentify a shared object ttypeidtaddresstidcCs!||||_|_|_dS(N(RRR(tselfRRR((s0/usr/lib64/python2.7/multiprocessing/managers.pyt__init__PscCs|j|j|jfS(N(RRR(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyt __getstate__SscCs|\|_|_|_dS(N(RRR(Rtstate((s0/usr/lib64/python2.7/multiprocessing/managers.pyt __setstate__VscCsd|j|j|jfS(Ns#Token(typeid=%r, address=%r, id=%r)(RRR(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyt__repr__Ys(stypeidsaddresssid(t__name__t __module__t__doc__t __slots__RR R"R#(((s0/usr/lib64/python2.7/multiprocessing/managers.pyRJs    cCsN|j||||f|j\}}|dkr;|St||dS(sL Send a message to manager using connection `c` and return response s#RETURNN(tsendtrecvtconvert_to_error(tcRt methodnametargstkwdstkindtresult((s0/usr/lib64/python2.7/multiprocessing/managers.pytdispatchas  cCsN|dkr|S|dkr&t|S|dkr@td|StdSdS(Ns#ERRORs #TRACEBACKs#UNSERIALIZABLEsUnserializable message: %s sUnrecognized message type(t RemoteErrort ValueError(R/R0((s0/usr/lib64/python2.7/multiprocessing/managers.pyR*ks    R2cBseZdZRS(cCs)ddddt|jdddS(Ns t-iKi(tstrR-(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyt__str__xs(R$R%R6(((s0/usr/lib64/python2.7/multiprocessing/managers.pyR2wscCsOg}xBt|D]4}t||}t|dr|j|qqW|S(s4 Return a list of names of methods of `obj` t__call__(tdirtgetattrthasattrtappend(tobjttemptnametfunc((s0/usr/lib64/python2.7/multiprocessing/managers.pyt all_methodss cCs-gt|D]}|ddkr |^q S(sP Return a list of names of methods of `obj` which do not start with '_' it_(R@(R<R>((s0/usr/lib64/python2.7/multiprocessing/managers.pytpublic_methodsstServerc BseZdZddddddddd g Zd Zd Zd Zd ZdZdZ dZ ie d6e d6ed6Z dZ dZ dZdZdZdZdZdZdZRS(sM Server class which runs in a process controlled by a manager object tshutdowntcreatetaccept_connectiont get_methodst debug_infotnumber_of_objectstdummytincreftdecrefcCs||_t||_t|\}}|d|dd|_|jj|_iddfd6|_i|_t j |_ d|_ dS(NRtbacklogit0i(( tregistryR tauthkeytlistener_clienttlistenerRtNonet id_to_objtid_to_refcountt threadingtRLocktmutextstop(RRORRPt serializertListenertClient((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs  cCs|t_zykxdy|jj}Wnttfk rDqnXtjd|jd|f}t |_ |j qWnt t fk rnXWdd|_|jjXdS(s( Run the server forever ttargetR-Ni(Rt_manager_serverRRtaccepttOSErrortIOErrorRVtThreadthandle_requesttTruetdaemontstarttKeyboardInterruptt SystemExitRYtclose(RR+tt((s0/usr/lib64/python2.7/multiprocessing/managers.pyt serve_forevers   c Cs`d}}}yWtj||jtj||j|j}|\}}}}t||}Wn tk rdtf} nFXy||||}Wn tk rdtf} n Xd|f} y|j | Wnqtk rQ} y|j dtfWntk rnXt j d| t j d|t j d| nX|j dS(s) Handle a new connection s #TRACEBACKs#RETURNsFailure to send message: %rs ... request was %rs ... exception was %rN( RSR tdeliver_challengeRPtanswer_challengeR)R9t ExceptionRR(R RRi( RR+tfuncnameR0trequesttignoreR-R.R?tmsgte((s0/usr/lib64/python2.7/multiprocessing/managers.pyRcs2     cCstjdtjj|j}|j}|j}x|jsyd}}|}|\}}} } ||\}} } || krt d|t || fnt ||} y| | | }Wnt k r}d|f}npX| o| j|d}|rP|j|||\}}t||j|}d||ff}n d|f}Wnt k r|dkrdtf}q?y8|j|}|||||| | }d|f}Wq?t k rdtf}q?XnVtk rtjdtjjtjdn t k r>dtf}nXy>y||Wn)t k r{}|d t|fnXWq7t k r}tjd tjjtjd |tjd ||jtjd q7Xq7WdS(sQ Handle requests from the proxies in a particular process/thread s$starting server thread to service %rs+method %r of %r object is not in exposed=%rs#ERRORs#PROXYs#RETURNs #TRACEBACKs$got EOF -- exiting thread serving %ris#UNSERIALIZABLEsexception in thread serving %rs ... message was %rs ... exception was %riN(R tdebugRVtcurrent_threadR>R)R(RTRYRStAttributeErrorttypeR9RntgetRERRRtfallback_mappingtEOFErrortsysR treprRRi(RtconnR)R(RTR,R<RptidentR-R.texposedt gettypeidtfunctiontresRsRrRtridenttrexposedttokent fallback_funcR0((s0/usr/lib64/python2.7/multiprocessing/managers.pyt serve_clientsl                 cCs|S(N((RR}R~R<((s0/usr/lib64/python2.7/multiprocessing/managers.pytfallback_getvalue+scCs t|S(N(R5(RR}R~R<((s0/usr/lib64/python2.7/multiprocessing/managers.pyt fallback_str.scCs t|S(N(R|(RR}R~R<((s0/usr/lib64/python2.7/multiprocessing/managers.pyt fallback_repr1sR6R#s #GETVALUEcCsdS(N((RR+((s0/usr/lib64/python2.7/multiprocessing/managers.pyRJ:scCs|jjzg}|jj}|jxS|D]K}|dkr6|jd||j|t|j|dd fq6q6Wdj|SWd|jj XdS(sO Return some info --- useful to spot problems with refcounting RNs %s: refcount=%s %siiKs N( RXtacquireRTRtsortR;RUR5tjointrelease(RR+R0RR~((s0/usr/lib64/python2.7/multiprocessing/managers.pyRH=s      'cCst|jdS(s* Number of shared objects i(tlenRT(RR+((s0/usr/lib64/python2.7/multiprocessing/managers.pyRIOscCszytjd|jd tjtjkrZtjdtjt_tjt_ntj dx(t D]}tjd|j qqWx(t D]}tjd|j qWtj tj dWnddl}|jnXWdtdXdS( s' Shutdown this process s!manager received shutdown messages#RETURNsresetting stdout, stderris&terminating a child process of managersmanager exiting with exitcode 0iN(s#RETURNN(R RtR(RSR{tstdoutt __stdout__t __stderr__tstderrt_run_finalizersRt terminateRRt tracebackt print_excR (RR+tpR((s0/usr/lib64/python2.7/multiprocessing/managers.pyRDUs*         c Os%|jjz|j|\}}}}|dkrB|d} n|||} |dkrlt| }n|dk rt|t|}ndt| } tjd|| | t ||f|j | <| |j krd|j | Create a new shared object and return its id is%xs&%r callable returned object with id %rN(RXRRORSRBtlistRR RttsetRTRURKttupleR( RR+RR-R.tcallableRtmethod_to_typeidt proxytypeR<R~((s0/usr/lib64/python2.7/multiprocessing/managers.pyREus$     cCst|j|jdS(sL Return the methods of the shared object indicated by token i(RRTR(RR+R((s0/usr/lib64/python2.7/multiprocessing/managers.pyRGscCs-|tj_|jd|j|dS(s= Spawn a new thread to serve this connection s#RETURNN(s#RETURNN(RVRuR>R(RSR(RR+R>((s0/usr/lib64/python2.7/multiprocessing/managers.pyRFs cCs9|jjz|j|cd7 Connect manager object to the server process RPRJN( RQRRRR1RSRRRR(RR[R\R}((s0/usr/lib64/python2.7/multiprocessing/managers.pytconnectsc CsL|d k r+t|d r+tdntjdt\}}tdt|jd|j |j |j |j |||f|_ djd|j jD}t|jd||j _|j j|j|j|_ |jtj|j_tj|t|jd|j |j |j |j|jfd d |_d S( s@ Spawn a server process for this manager object R7sinitializer must be a callabletduplexR]R-t:css|]}t|VqdS(N(R5(t.0ti((s0/usr/lib64/python2.7/multiprocessing/managers.pys sR4t exitpriorityiN(RSR:t TypeErrorR tPipetFalseRRwt _run_serverRRRRt_processRt _identityR$R>RfRiR)RRRRR Rt_finalize_managerRRD(Rt initializertinitargstreadertwriterR~((s0/usr/lib64/python2.7/multiprocessing/managers.pyRfs&   c Csl|dk r||n|j||||}|j|j|jtjd|j|jdS(s@ Create a server, report its address and run it smanager serving at %rN(RSt_ServerR(RRiR RRk( tclsRORRPRZRRRtserver((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs   cOsk|j|jd|j}z)t|dd|f||\}}Wd|jXt||j||fS(sP Create a new shared object; return the token and exposed tuple RPREN(RRRR1RSRiR(RRR-R.R}RR((s0/usr/lib64/python2.7/multiprocessing/managers.pyt_create0s ) cCs|jj|dS(sC Join the manager process (if it has been spawned) N(RR(Rttimeout((s0/usr/lib64/python2.7/multiprocessing/managers.pyR<scCsA|j|jd|j}zt|ddSWd|jXdS(sS Return some info about the servers shared objects and connections RPRHN(RRRR1RSRi(RR}((s0/usr/lib64/python2.7/multiprocessing/managers.pyt _debug_infoBscCsA|j|jd|j}zt|ddSWd|jXdS(s5 Return the number of shared objects RPRIN(RRRR1RSRi(RR}((s0/usr/lib64/python2.7/multiprocessing/managers.pyt_number_of_objectsLscCs|S(N((R((s0/usr/lib64/python2.7/multiprocessing/managers.pyt __enter__VscCs|jdS(N(RD(Rtexc_typetexc_valtexc_tb((s0/usr/lib64/python2.7/multiprocessing/managers.pyt__exit__YscCs|jrtjdy8||d|}zt|ddWd|jXWntk rdnX|jdd|jrtjdt|drtjd |j |jdd |jrtjd qqqnt j |_ yt j|=Wntk rnXdS( sQ Shutdown the manager process; will be registered as a finalizer s#sending shutdown message to managerRPRDNRg?smanager still aliveRs'trying to `terminate()` manager processg?s#manager still alive after terminate(tis_aliveR RR1RSRiRnRR:RRRRRt_address_to_localtKeyError(tprocessRRPR!RR}((s0/usr/lib64/python2.7/multiprocessing/managers.pyR\s.          cCs|jS(N(R(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyt|sc sd|jkr$|jj|_ndkr9tn|pNtdd}|pftdd}|rx|jD] \}}q|Wn|||f|j<|rfd} | _t|| ndS(s9 Register a typeid with the manager type Rt _exposed_t_method_to_typeid_c stjd|j||\}}||jd|d|jd|}|j|jd|j}t|dd|j f|S(Ns)requesting creation of a shared %r objecttmanagerRPRRL( R RtRRRRRR1RSR(RR-R.RtexptproxyR}(RR(s0/usr/lib64/python2.7/multiprocessing/managers.pyR=sN( t__dict__RtcopyRSt AutoProxyR9RR$tsetattr( RRRRRRt create_methodtkeyRR=((RRs0/usr/lib64/python2.7/multiprocessing/managers.pytregister~s   N(((R$R%R&RRCRRSRRRRRft classmethodRRRRRRRt staticmethodRtpropertyRRdR(((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs*   $     tProcessLocalSetcBseZdZdZRS(cCstj|ddS(NcSs |jS(N(tclear(R<((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs(R tregister_after_fork(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscCst|dfS(N((Rw(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs(R$R%RR(((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs cBseZdZiZejZd d d edZ dZ d idZ dZ dZ edZdZdZd Zd Zd ZRS(s. A base for proxies of shared objects cCs;tjjzPtjj|jd}|dkr\tjt f}|tj|jRVRuRRRRR1RSRR (RR>R}((s0/usr/lib64/python2.7/multiprocessing/managers.pyt_connects  c Cs5y|jj}Wn@tk rRtjdtjj|j|jj}nX|j |j |||f|j \}}|dkr|S|dkr"|\}}|j j |jd} | ||jd|j d|jd|} |j|jd|j}t|d d|jf| St||d S( sW Try to call a method of the referrent and return a copy of the result s#thread %r does not own a connections#RETURNs#PROXYiRRPRRLN(RR RvR RtRVRuR>RR(RR)RRRRRRRR1RSRR*( RR,R-R.R}R/R0RRRR((s0/usr/lib64/python2.7/multiprocessing/managers.pyt _callmethods*      cCs |jdS(s9 Get a copy of the value of the referent s #GETVALUE(R(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyt _getvaluesc Cs|j|jjd|j}t|dd|jftjd|jj |j j |j|j or|j j }tj|tjd|j|j||j|j |jfdd|_dS(NRPRKs INCREF %rR-Ri (RRRRR1RSRR RtRRtaddRRRRt_decrefRt_close(RR}R!((s0/usr/lib64/python2.7/multiprocessing/managers.pyR s cCs|j|j|dks.|jtjkryEtjd|j||jd|}t |dd|jfWqt k r}tjd|qXntjd|j| rt |drtjdt j j|jj|`ndS(Ns DECREF %rRPRLs... decref failed %ss%DECREF %r -- manager already shutdownR s-thread %r has no more proxies so closing conn(tdiscardRRSRRRR RtRR1RnR:RVRuR>R Ri(RRPR!ttlstidsetRR}Rs((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs  cCsBd|_y|jWn$tk r=}tjd|nXdS(Nsincref failed: %s(RSRRRnR R(RRs((s0/usr/lib64/python2.7/multiprocessing/managers.pyR6s  cCsi}tjr"|j|ds  cCs |jS(N(R(Rtmemo((s0/usr/lib64/python2.7/multiprocessing/managers.pyt __deepcopy__KscCs*dt|j|jjdt|fS(Ns<%s object, typeid %r at %s>s0x%x(RwR$RRR(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyR#NscCs8y|jdSWn tk r3t|d dSXdS(sV Return representation of the referent (or a fall-back if that fails) R#is; '__str__()' failed>N(RRnR|(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyR6Rs N((R$R%R&RR tForkAwareThreadLockRRSRdRRRRRRRRRRR#R6(((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs %      cCsttdd}|r?|j|jkr?|j|jdS|jdtodttdt }|||d||SdS(s Function used for unpickling proxy objects. If possible the shared object is returned, or otherwise a proxy for it. R^iRKt _inheritingN( R9RRSRRTRtpopRdR(R?RRZR.RRK((s0/usr/lib64/python2.7/multiprocessing/managers.pyR_s cBse|}y|||fSWnek r1nXi}x |D]}d||f|Uq?We|ef|}||_||||f<|S(sC Return an proxy type whose methods are given by `exposed` sLdef %s(self, *args, **kwds): return self._callmethod(%r, args, kwds)(RRRwRR(R>Rt_cachetdictmetht ProxyType((s0/usr/lib64/python2.7/multiprocessing/managers.pyt MakeProxyTypets    c Cst|d}|dkr\||jd|}zt|dd|f}Wd|jXn|dkr|dk r|j}n|dkrtj}ntd|j |}|||d|d|d|} t | _ | S(s* Return an auto-proxy for `token` iRPRGNs AutoProxy[%s]RRK( RQRSRR1RiRRRPRRRdR( RRZRRPRRKRR}RR((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs     t NamespacecBseZdZdZRS(cKs|jj|dS(N(Rtupdate(RR.((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscCss|jj}g}x=|D]5\}}|jds|jd||fqqW|jdtjd|S(NRAs%s=%rs Namespace(%s)s, (RRt startswithR;RR5R(RRR=R>R((s0/usr/lib64/python2.7/multiprocessing/managers.pyR#s (R$R%RR#(((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs tValuecBs>eZedZdZdZdZeeeZRS(cCs||_||_dS(N(t _typecodet_value(RRRtlock((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs cCs|jS(N(R (R((s0/usr/lib64/python2.7/multiprocessing/managers.pyRxscCs ||_dS(N(R (RR((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscCs dt|j|j|jfS(Ns %s(%r, %r)(RwR$R R (R((s0/usr/lib64/python2.7/multiprocessing/managers.pyR#s( R$R%RdRRxRR#RR(((s0/usr/lib64/python2.7/multiprocessing/managers.pyR s     cCstj||S(N(R(RtsequenceR ((s0/usr/lib64/python2.7/multiprocessing/managers.pytArrayst IteratorProxycBsDeZd ZdZdZdZdZd Zd ZRS( t__next__tnextR(tthrowRicCs|S(N((R((s0/usr/lib64/python2.7/multiprocessing/managers.pyt__iter__scGs|jd|S(NR(R(RR-((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscGs|jd|S(NR(R(RR-((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscGs|jd|S(NR((R(RR-((s0/usr/lib64/python2.7/multiprocessing/managers.pyR(scGs|jd|S(NR(R(RR-((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscGs|jd|S(NRi(R(RR-((s0/usr/lib64/python2.7/multiprocessing/managers.pyRis(s__next__snextssendsthrowsclose( R$R%RRRRR(RRi(((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs     t AcquirerProxycBs5eZdZedZdZdZdZRS(RRcCs|jd|fS(NR(R(Rtblocking((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscCs |jdS(NR(R(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscCs |jdS(NR(R(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscCs |jdS(NR(R(RRRR((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs(sacquiresrelease(R$R%RRdRRRR(((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs    tConditionProxycBs,eZdZd dZdZdZRS( RRtwaittnotifyt notify_allcCs|jd|fS(NR(R(RR((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscCs |jdS(NR(R(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscCs |jdS(NR(R(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs(sacquiresreleaseswaitsnotifys notify_allN(R$R%RRSRRR(((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs  t EventProxycBs5eZdZdZdZdZd dZRS( tis_setRRRcCs |jdS(NR(R(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscCs |jdS(NR(R(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscCs |jdS(NR(R(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscCs|jd|fS(NR(R(RR((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs(sis_setssetsclearswaitN(R$R%RRRRRSR(((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs    tNamespaceProxycBs)eZdZdZdZdZRS(t__getattribute__t __setattr__t __delattr__cCsB|ddkr tj||Stj|d}|d|fS(NiRARR(tobjectR(RRt callmethod((s0/usr/lib64/python2.7/multiprocessing/managers.pyt __getattr__scCsH|ddkr#tj|||Stj|d}|d||fS(NiRARR(R!RR(RRRR"((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscCsB|ddkr tj||Stj|d}|d|fS(NiRARR (R!R R(RRR"((s0/usr/lib64/python2.7/multiprocessing/managers.pyR s(s__getattribute__s __setattr__s __delattr__(R$R%RR#RR (((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs  t ValueProxycBs/eZdZdZdZeeeZRS(RxRcCs |jdS(NRx(R(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyRx scCs|jd|fS(NR(R(RR((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs(sgetsset(R$R%RRxRRR(((s0/usr/lib64/python2.7/multiprocessing/managers.pyR$ s  t BaseListProxyt__add__t __contains__t __delitem__t __delslice__t __getitem__t __getslice__t__len__t__mul__t __reversed__t__rmul__t __setitem__t __setslice__R;tcounttextendtindextinsertRtremovetreverseRt__imul__t ListProxycBseZdZdZRS(cCs|jd|f|S(NR3(R(RR((s0/usr/lib64/python2.7/multiprocessing/managers.pyt__iadd__scCs|jd|f|S(NR8(R(RR((s0/usr/lib64/python2.7/multiprocessing/managers.pyR8s(R$R%R:R8(((s0/usr/lib64/python2.7/multiprocessing/managers.pyR9s t DictProxyRRRxthas_keytpopitemt setdefaultRt ArrayProxyt PoolProxytapplyt apply_asyncRitimaptimap_unorderedRtmapt map_asyncRt AsyncResulttIteratorcBseZdZRS(s( Subclass of `BaseManager` which supports a number of shared object types. The types registered are those intended for the synchronization of threads, plus `dict`, `list` and `Namespace`. The `multiprocessing.Manager()` function creates started instances of this class. (R$R%R&(((s0/usr/lib64/python2.7/multiprocessing/managers.pyR?s tQueuet JoinableQueuetEventtLockRWt SemaphoretBoundedSemaphoret ConditionRRtdictRRR(Ut__all__tosR{tweakrefRVRRIRRtmultiprocessingRRRRR R tmultiprocessing.processR tmultiprocessing.forkingR R RRtmultiprocessing.utilRRtcPickleRt ImportErrorRRRR>RwR9t view_typesR!RR1R*RnR2R@RBRCRR[R\t XmlListenert XmlClientRQRRRRRRRSRdRRR RRRRRRR$R%R9R;R?R@RRRKRLRWRMRNRORRPR(((s0/usr/lib64/python2.7/multiprocessing/managers.pyt$s      ."  4  ,                 reduction.py000064400000022450147207507420007125 0ustar00# # Module which deals with pickling of objects. # # multiprocessing/reduction.py # # Copyright (c) 2006-2008, R Oudkerk # Licensed to PSF under a Contributor Agreement. # from abc import ABCMeta import copyreg import functools import io import os import pickle import socket import sys from . import context __all__ = ['send_handle', 'recv_handle', 'ForkingPickler', 'register', 'dump'] HAVE_SEND_HANDLE = (sys.platform == 'win32' or (hasattr(socket, 'CMSG_LEN') and hasattr(socket, 'SCM_RIGHTS') and hasattr(socket.socket, 'sendmsg'))) # # Pickler subclass # class ForkingPickler(pickle.Pickler): '''Pickler subclass used by multiprocessing.''' _extra_reducers = {} _copyreg_dispatch_table = copyreg.dispatch_table def __init__(self, *args): super().__init__(*args) self.dispatch_table = self._copyreg_dispatch_table.copy() self.dispatch_table.update(self._extra_reducers) @classmethod def register(cls, type, reduce): '''Register a reduce function for a type.''' cls._extra_reducers[type] = reduce @classmethod def dumps(cls, obj, protocol=None): buf = io.BytesIO() cls(buf, protocol).dump(obj) return buf.getbuffer() loads = pickle.loads register = ForkingPickler.register def dump(obj, file, protocol=None): '''Replacement for pickle.dump() using ForkingPickler.''' ForkingPickler(file, protocol).dump(obj) # # Platform specific definitions # if sys.platform == 'win32': # Windows __all__ += ['DupHandle', 'duplicate', 'steal_handle'] import _winapi def duplicate(handle, target_process=None, inheritable=False, *, source_process=None): '''Duplicate a handle. (target_process is a handle not a pid!)''' current_process = _winapi.GetCurrentProcess() if source_process is None: source_process = current_process if target_process is None: target_process = current_process return _winapi.DuplicateHandle( source_process, handle, target_process, 0, inheritable, _winapi.DUPLICATE_SAME_ACCESS) def steal_handle(source_pid, handle): '''Steal a handle from process identified by source_pid.''' source_process_handle = _winapi.OpenProcess( _winapi.PROCESS_DUP_HANDLE, False, source_pid) try: return _winapi.DuplicateHandle( source_process_handle, handle, _winapi.GetCurrentProcess(), 0, False, _winapi.DUPLICATE_SAME_ACCESS | _winapi.DUPLICATE_CLOSE_SOURCE) finally: _winapi.CloseHandle(source_process_handle) def send_handle(conn, handle, destination_pid): '''Send a handle over a local connection.''' dh = DupHandle(handle, _winapi.DUPLICATE_SAME_ACCESS, destination_pid) conn.send(dh) def recv_handle(conn): '''Receive a handle over a local connection.''' return conn.recv().detach() class DupHandle(object): '''Picklable wrapper for a handle.''' def __init__(self, handle, access, pid=None): if pid is None: # We just duplicate the handle in the current process and # let the receiving process steal the handle. pid = os.getpid() proc = _winapi.OpenProcess(_winapi.PROCESS_DUP_HANDLE, False, pid) try: self._handle = _winapi.DuplicateHandle( _winapi.GetCurrentProcess(), handle, proc, access, False, 0) finally: _winapi.CloseHandle(proc) self._access = access self._pid = pid def detach(self): '''Get the handle. This should only be called once.''' # retrieve handle from process which currently owns it if self._pid == os.getpid(): # The handle has already been duplicated for this process. return self._handle # We must steal the handle from the process whose pid is self._pid. proc = _winapi.OpenProcess(_winapi.PROCESS_DUP_HANDLE, False, self._pid) try: return _winapi.DuplicateHandle( proc, self._handle, _winapi.GetCurrentProcess(), self._access, False, _winapi.DUPLICATE_CLOSE_SOURCE) finally: _winapi.CloseHandle(proc) else: # Unix __all__ += ['DupFd', 'sendfds', 'recvfds'] import array # On MacOSX we should acknowledge receipt of fds -- see Issue14669 ACKNOWLEDGE = sys.platform == 'darwin' def sendfds(sock, fds): '''Send an array of fds over an AF_UNIX socket.''' fds = array.array('i', fds) msg = bytes([len(fds) % 256]) sock.sendmsg([msg], [(socket.SOL_SOCKET, socket.SCM_RIGHTS, fds)]) if ACKNOWLEDGE and sock.recv(1) != b'A': raise RuntimeError('did not receive acknowledgement of fd') def recvfds(sock, size): '''Receive an array of fds over an AF_UNIX socket.''' a = array.array('i') bytes_size = a.itemsize * size msg, ancdata, flags, addr = sock.recvmsg(1, socket.CMSG_SPACE(bytes_size)) if not msg and not ancdata: raise EOFError try: if ACKNOWLEDGE: sock.send(b'A') if len(ancdata) != 1: raise RuntimeError('received %d items of ancdata' % len(ancdata)) cmsg_level, cmsg_type, cmsg_data = ancdata[0] if (cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS): if len(cmsg_data) % a.itemsize != 0: raise ValueError a.frombytes(cmsg_data) if len(a) % 256 != msg[0]: raise AssertionError( "Len is {0:n} but msg[0] is {1!r}".format( len(a), msg[0])) return list(a) except (ValueError, IndexError): pass raise RuntimeError('Invalid data received') def send_handle(conn, handle, destination_pid): '''Send a handle over a local connection.''' with socket.fromfd(conn.fileno(), socket.AF_UNIX, socket.SOCK_STREAM) as s: sendfds(s, [handle]) def recv_handle(conn): '''Receive a handle over a local connection.''' with socket.fromfd(conn.fileno(), socket.AF_UNIX, socket.SOCK_STREAM) as s: return recvfds(s, 1)[0] def DupFd(fd): '''Return a wrapper for an fd.''' popen_obj = context.get_spawning_popen() if popen_obj is not None: return popen_obj.DupFd(popen_obj.duplicate_for_child(fd)) elif HAVE_SEND_HANDLE: from . import resource_sharer return resource_sharer.DupFd(fd) else: raise ValueError('SCM_RIGHTS appears not to be available') # # Try making some callable types picklable # def _reduce_method(m): if m.__self__ is None: return getattr, (m.__class__, m.__func__.__name__) else: return getattr, (m.__self__, m.__func__.__name__) class _C: def f(self): pass register(type(_C().f), _reduce_method) def _reduce_method_descriptor(m): return getattr, (m.__objclass__, m.__name__) register(type(list.append), _reduce_method_descriptor) register(type(int.__add__), _reduce_method_descriptor) def _reduce_partial(p): return _rebuild_partial, (p.func, p.args, p.keywords or {}) def _rebuild_partial(func, args, keywords): return functools.partial(func, *args, **keywords) register(functools.partial, _reduce_partial) # # Make sockets picklable # if sys.platform == 'win32': def _reduce_socket(s): from .resource_sharer import DupSocket return _rebuild_socket, (DupSocket(s),) def _rebuild_socket(ds): return ds.detach() register(socket.socket, _reduce_socket) else: def _reduce_socket(s): df = DupFd(s.fileno()) return _rebuild_socket, (df, s.family, s.type, s.proto) def _rebuild_socket(df, family, type, proto): fd = df.detach() return socket.socket(family, type, proto, fileno=fd) register(socket.socket, _reduce_socket) class AbstractReducer(metaclass=ABCMeta): '''Abstract base class for use in implementing a Reduction class suitable for use in replacing the standard reduction mechanism used in multiprocessing.''' ForkingPickler = ForkingPickler register = register dump = dump send_handle = send_handle recv_handle = recv_handle if sys.platform == 'win32': steal_handle = steal_handle duplicate = duplicate DupHandle = DupHandle else: sendfds = sendfds recvfds = recvfds DupFd = DupFd _reduce_method = _reduce_method _reduce_method_descriptor = _reduce_method_descriptor _rebuild_partial = _rebuild_partial _reduce_socket = _reduce_socket _rebuild_socket = _rebuild_socket def __init__(self, *args): register(type(_C().f), _reduce_method) register(type(list.append), _reduce_method_descriptor) register(type(int.__add__), _reduce_method_descriptor) register(functools.partial, _reduce_partial) register(socket.socket, _reduce_socket) managers.py000064400000137425147207507420006737 0ustar00# # Module providing manager classes for dealing # with shared objects # # multiprocessing/managers.py # # Copyright (c) 2006-2008, R Oudkerk # Licensed to PSF under a Contributor Agreement. # __all__ = [ 'BaseManager', 'SyncManager', 'BaseProxy', 'Token', 'SharedMemoryManager' ] # # Imports # import sys import threading import signal import array import queue import time import os from os import getpid from traceback import format_exc from . import connection from .context import reduction, get_spawning_popen, ProcessError from . import pool from . import process from . import util from . import get_context try: from . import shared_memory HAS_SHMEM = True except ImportError: HAS_SHMEM = False # # Register some things for pickling # def reduce_array(a): return array.array, (a.typecode, a.tobytes()) reduction.register(array.array, reduce_array) view_types = [type(getattr({}, name)()) for name in ('items','keys','values')] if view_types[0] is not list: # only needed in Py3.0 def rebuild_as_list(obj): return list, (list(obj),) for view_type in view_types: reduction.register(view_type, rebuild_as_list) # # Type for identifying shared objects # class Token(object): ''' Type to uniquely identify a shared object ''' __slots__ = ('typeid', 'address', 'id') def __init__(self, typeid, address, id): (self.typeid, self.address, self.id) = (typeid, address, id) def __getstate__(self): return (self.typeid, self.address, self.id) def __setstate__(self, state): (self.typeid, self.address, self.id) = state def __repr__(self): return '%s(typeid=%r, address=%r, id=%r)' % \ (self.__class__.__name__, self.typeid, self.address, self.id) # # Function for communication with a manager's server process # def dispatch(c, id, methodname, args=(), kwds={}): ''' Send a message to manager using connection `c` and return response ''' c.send((id, methodname, args, kwds)) kind, result = c.recv() if kind == '#RETURN': return result raise convert_to_error(kind, result) def convert_to_error(kind, result): if kind == '#ERROR': return result elif kind in ('#TRACEBACK', '#UNSERIALIZABLE'): if not isinstance(result, str): raise TypeError( "Result {0!r} (kind '{1}') type is {2}, not str".format( result, kind, type(result))) if kind == '#UNSERIALIZABLE': return RemoteError('Unserializable message: %s\n' % result) else: return RemoteError(result) else: return ValueError('Unrecognized message type {!r}'.format(kind)) class RemoteError(Exception): def __str__(self): return ('\n' + '-'*75 + '\n' + str(self.args[0]) + '-'*75) # # Functions for finding the method names of an object # def all_methods(obj): ''' Return a list of names of methods of `obj` ''' temp = [] for name in dir(obj): func = getattr(obj, name) if callable(func): temp.append(name) return temp def public_methods(obj): ''' Return a list of names of methods of `obj` which do not start with '_' ''' return [name for name in all_methods(obj) if name[0] != '_'] # # Server which is run in a process controlled by a manager # class Server(object): ''' Server class which runs in a process controlled by a manager object ''' public = ['shutdown', 'create', 'accept_connection', 'get_methods', 'debug_info', 'number_of_objects', 'dummy', 'incref', 'decref'] def __init__(self, registry, address, authkey, serializer): if not isinstance(authkey, bytes): raise TypeError( "Authkey {0!r} is type {1!s}, not bytes".format( authkey, type(authkey))) self.registry = registry self.authkey = process.AuthenticationString(authkey) Listener, Client = listener_client[serializer] # do authentication later self.listener = Listener(address=address, backlog=16) self.address = self.listener.address self.id_to_obj = {'0': (None, ())} self.id_to_refcount = {} self.id_to_local_proxy_obj = {} self.mutex = threading.Lock() def serve_forever(self): ''' Run the server forever ''' self.stop_event = threading.Event() process.current_process()._manager_server = self try: accepter = threading.Thread(target=self.accepter) accepter.daemon = True accepter.start() try: while not self.stop_event.is_set(): self.stop_event.wait(1) except (KeyboardInterrupt, SystemExit): pass finally: if sys.stdout != sys.__stdout__: # what about stderr? util.debug('resetting stdout, stderr') sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ sys.exit(0) def accepter(self): while True: try: c = self.listener.accept() except OSError: continue t = threading.Thread(target=self.handle_request, args=(c,)) t.daemon = True t.start() def handle_request(self, c): ''' Handle a new connection ''' funcname = result = request = None try: connection.deliver_challenge(c, self.authkey) connection.answer_challenge(c, self.authkey) request = c.recv() ignore, funcname, args, kwds = request assert funcname in self.public, '%r unrecognized' % funcname func = getattr(self, funcname) except Exception: msg = ('#TRACEBACK', format_exc()) else: try: result = func(c, *args, **kwds) except Exception: msg = ('#TRACEBACK', format_exc()) else: msg = ('#RETURN', result) try: c.send(msg) except Exception as e: try: c.send(('#TRACEBACK', format_exc())) except Exception: pass util.info('Failure to send message: %r', msg) util.info(' ... request was %r', request) util.info(' ... exception was %r', e) c.close() def serve_client(self, conn): ''' Handle requests from the proxies in a particular process/thread ''' util.debug('starting server thread to service %r', threading.current_thread().name) recv = conn.recv send = conn.send id_to_obj = self.id_to_obj while not self.stop_event.is_set(): try: methodname = obj = None request = recv() ident, methodname, args, kwds = request try: obj, exposed, gettypeid = id_to_obj[ident] except KeyError as ke: try: obj, exposed, gettypeid = \ self.id_to_local_proxy_obj[ident] except KeyError as second_ke: raise ke if methodname not in exposed: raise AttributeError( 'method %r of %r object is not in exposed=%r' % (methodname, type(obj), exposed) ) function = getattr(obj, methodname) try: res = function(*args, **kwds) except Exception as e: msg = ('#ERROR', e) else: typeid = gettypeid and gettypeid.get(methodname, None) if typeid: rident, rexposed = self.create(conn, typeid, res) token = Token(typeid, self.address, rident) msg = ('#PROXY', (rexposed, token)) else: msg = ('#RETURN', res) except AttributeError: if methodname is None: msg = ('#TRACEBACK', format_exc()) else: try: fallback_func = self.fallback_mapping[methodname] result = fallback_func( self, conn, ident, obj, *args, **kwds ) msg = ('#RETURN', result) except Exception: msg = ('#TRACEBACK', format_exc()) except EOFError: util.debug('got EOF -- exiting thread serving %r', threading.current_thread().name) sys.exit(0) except Exception: msg = ('#TRACEBACK', format_exc()) try: try: send(msg) except Exception as e: send(('#UNSERIALIZABLE', format_exc())) except Exception as e: util.info('exception in thread serving %r', threading.current_thread().name) util.info(' ... message was %r', msg) util.info(' ... exception was %r', e) conn.close() sys.exit(1) def fallback_getvalue(self, conn, ident, obj): return obj def fallback_str(self, conn, ident, obj): return str(obj) def fallback_repr(self, conn, ident, obj): return repr(obj) fallback_mapping = { '__str__':fallback_str, '__repr__':fallback_repr, '#GETVALUE':fallback_getvalue } def dummy(self, c): pass def debug_info(self, c): ''' Return some info --- useful to spot problems with refcounting ''' # Perhaps include debug info about 'c'? with self.mutex: result = [] keys = list(self.id_to_refcount.keys()) keys.sort() for ident in keys: if ident != '0': result.append(' %s: refcount=%s\n %s' % (ident, self.id_to_refcount[ident], str(self.id_to_obj[ident][0])[:75])) return '\n'.join(result) def number_of_objects(self, c): ''' Number of shared objects ''' # Doesn't use (len(self.id_to_obj) - 1) as we shouldn't count ident='0' return len(self.id_to_refcount) def shutdown(self, c): ''' Shutdown this process ''' try: util.debug('manager received shutdown message') c.send(('#RETURN', None)) except: import traceback traceback.print_exc() finally: self.stop_event.set() def create(*args, **kwds): ''' Create a new shared object and return its id ''' if len(args) >= 3: self, c, typeid, *args = args elif not args: raise TypeError("descriptor 'create' of 'Server' object " "needs an argument") else: if 'typeid' not in kwds: raise TypeError('create expected at least 2 positional ' 'arguments, got %d' % (len(args)-1)) typeid = kwds.pop('typeid') if len(args) >= 2: self, c, *args = args import warnings warnings.warn("Passing 'typeid' as keyword argument is deprecated", DeprecationWarning, stacklevel=2) else: if 'c' not in kwds: raise TypeError('create expected at least 2 positional ' 'arguments, got %d' % (len(args)-1)) c = kwds.pop('c') self, *args = args import warnings warnings.warn("Passing 'c' as keyword argument is deprecated", DeprecationWarning, stacklevel=2) args = tuple(args) with self.mutex: callable, exposed, method_to_typeid, proxytype = \ self.registry[typeid] if callable is None: if kwds or (len(args) != 1): raise ValueError( "Without callable, must have one non-keyword argument") obj = args[0] else: obj = callable(*args, **kwds) if exposed is None: exposed = public_methods(obj) if method_to_typeid is not None: if not isinstance(method_to_typeid, dict): raise TypeError( "Method_to_typeid {0!r}: type {1!s}, not dict".format( method_to_typeid, type(method_to_typeid))) exposed = list(exposed) + list(method_to_typeid) ident = '%x' % id(obj) # convert to string because xmlrpclib # only has 32 bit signed integers util.debug('%r callable returned object with id %r', typeid, ident) self.id_to_obj[ident] = (obj, set(exposed), method_to_typeid) if ident not in self.id_to_refcount: self.id_to_refcount[ident] = 0 self.incref(c, ident) return ident, tuple(exposed) create.__text_signature__ = '($self, c, typeid, /, *args, **kwds)' def get_methods(self, c, token): ''' Return the methods of the shared object indicated by token ''' return tuple(self.id_to_obj[token.id][1]) def accept_connection(self, c, name): ''' Spawn a new thread to serve this connection ''' threading.current_thread().name = name c.send(('#RETURN', None)) self.serve_client(c) def incref(self, c, ident): with self.mutex: try: self.id_to_refcount[ident] += 1 except KeyError as ke: # If no external references exist but an internal (to the # manager) still does and a new external reference is created # from it, restore the manager's tracking of it from the # previously stashed internal ref. if ident in self.id_to_local_proxy_obj: self.id_to_refcount[ident] = 1 self.id_to_obj[ident] = \ self.id_to_local_proxy_obj[ident] obj, exposed, gettypeid = self.id_to_obj[ident] util.debug('Server re-enabled tracking & INCREF %r', ident) else: raise ke def decref(self, c, ident): if ident not in self.id_to_refcount and \ ident in self.id_to_local_proxy_obj: util.debug('Server DECREF skipping %r', ident) return with self.mutex: if self.id_to_refcount[ident] <= 0: raise AssertionError( "Id {0!s} ({1!r}) has refcount {2:n}, not 1+".format( ident, self.id_to_obj[ident], self.id_to_refcount[ident])) self.id_to_refcount[ident] -= 1 if self.id_to_refcount[ident] == 0: del self.id_to_refcount[ident] if ident not in self.id_to_refcount: # Two-step process in case the object turns out to contain other # proxy objects (e.g. a managed list of managed lists). # Otherwise, deleting self.id_to_obj[ident] would trigger the # deleting of the stored value (another managed object) which would # in turn attempt to acquire the mutex that is already held here. self.id_to_obj[ident] = (None, (), None) # thread-safe util.debug('disposing of obj with id %r', ident) with self.mutex: del self.id_to_obj[ident] # # Class to represent state of a manager # class State(object): __slots__ = ['value'] INITIAL = 0 STARTED = 1 SHUTDOWN = 2 # # Mapping from serializer name to Listener and Client types # listener_client = { 'pickle' : (connection.Listener, connection.Client), 'xmlrpclib' : (connection.XmlListener, connection.XmlClient) } # # Definition of BaseManager # class BaseManager(object): ''' Base class for managers ''' _registry = {} _Server = Server def __init__(self, address=None, authkey=None, serializer='pickle', ctx=None): if authkey is None: authkey = process.current_process().authkey self._address = address # XXX not final address if eg ('', 0) self._authkey = process.AuthenticationString(authkey) self._state = State() self._state.value = State.INITIAL self._serializer = serializer self._Listener, self._Client = listener_client[serializer] self._ctx = ctx or get_context() def get_server(self): ''' Return server object with serve_forever() method and address attribute ''' if self._state.value != State.INITIAL: if self._state.value == State.STARTED: raise ProcessError("Already started server") elif self._state.value == State.SHUTDOWN: raise ProcessError("Manager has shut down") else: raise ProcessError( "Unknown state {!r}".format(self._state.value)) return Server(self._registry, self._address, self._authkey, self._serializer) def connect(self): ''' Connect manager object to the server process ''' Listener, Client = listener_client[self._serializer] conn = Client(self._address, authkey=self._authkey) dispatch(conn, None, 'dummy') self._state.value = State.STARTED def start(self, initializer=None, initargs=()): ''' Spawn a server process for this manager object ''' if self._state.value != State.INITIAL: if self._state.value == State.STARTED: raise ProcessError("Already started server") elif self._state.value == State.SHUTDOWN: raise ProcessError("Manager has shut down") else: raise ProcessError( "Unknown state {!r}".format(self._state.value)) if initializer is not None and not callable(initializer): raise TypeError('initializer must be a callable') # pipe over which we will retrieve address of server reader, writer = connection.Pipe(duplex=False) # spawn process which runs a server self._process = self._ctx.Process( target=type(self)._run_server, args=(self._registry, self._address, self._authkey, self._serializer, writer, initializer, initargs), ) ident = ':'.join(str(i) for i in self._process._identity) self._process.name = type(self).__name__ + '-' + ident self._process.start() # get address of server writer.close() self._address = reader.recv() reader.close() # register a finalizer self._state.value = State.STARTED self.shutdown = util.Finalize( self, type(self)._finalize_manager, args=(self._process, self._address, self._authkey, self._state, self._Client), exitpriority=0 ) @classmethod def _run_server(cls, registry, address, authkey, serializer, writer, initializer=None, initargs=()): ''' Create a server, report its address and run it ''' # bpo-36368: protect server process from KeyboardInterrupt signals signal.signal(signal.SIGINT, signal.SIG_IGN) if initializer is not None: initializer(*initargs) # create server server = cls._Server(registry, address, authkey, serializer) # inform parent process of the server's address writer.send(server.address) writer.close() # run the manager util.info('manager serving at %r', server.address) server.serve_forever() def _create(self, typeid, /, *args, **kwds): ''' Create a new shared object; return the token and exposed tuple ''' assert self._state.value == State.STARTED, 'server not yet started' conn = self._Client(self._address, authkey=self._authkey) try: id, exposed = dispatch(conn, None, 'create', (typeid,)+args, kwds) finally: conn.close() return Token(typeid, self._address, id), exposed def join(self, timeout=None): ''' Join the manager process (if it has been spawned) ''' if self._process is not None: self._process.join(timeout) if not self._process.is_alive(): self._process = None def _debug_info(self): ''' Return some info about the servers shared objects and connections ''' conn = self._Client(self._address, authkey=self._authkey) try: return dispatch(conn, None, 'debug_info') finally: conn.close() def _number_of_objects(self): ''' Return the number of shared objects ''' conn = self._Client(self._address, authkey=self._authkey) try: return dispatch(conn, None, 'number_of_objects') finally: conn.close() def __enter__(self): if self._state.value == State.INITIAL: self.start() if self._state.value != State.STARTED: if self._state.value == State.INITIAL: raise ProcessError("Unable to start server") elif self._state.value == State.SHUTDOWN: raise ProcessError("Manager has shut down") else: raise ProcessError( "Unknown state {!r}".format(self._state.value)) return self def __exit__(self, exc_type, exc_val, exc_tb): self.shutdown() @staticmethod def _finalize_manager(process, address, authkey, state, _Client): ''' Shutdown the manager process; will be registered as a finalizer ''' if process.is_alive(): util.info('sending shutdown message to manager') try: conn = _Client(address, authkey=authkey) try: dispatch(conn, None, 'shutdown') finally: conn.close() except Exception: pass process.join(timeout=1.0) if process.is_alive(): util.info('manager still alive') if hasattr(process, 'terminate'): util.info('trying to `terminate()` manager process') process.terminate() process.join(timeout=0.1) if process.is_alive(): util.info('manager still alive after terminate') state.value = State.SHUTDOWN try: del BaseProxy._address_to_local[address] except KeyError: pass @property def address(self): return self._address @classmethod def register(cls, typeid, callable=None, proxytype=None, exposed=None, method_to_typeid=None, create_method=True): ''' Register a typeid with the manager type ''' if '_registry' not in cls.__dict__: cls._registry = cls._registry.copy() if proxytype is None: proxytype = AutoProxy exposed = exposed or getattr(proxytype, '_exposed_', None) method_to_typeid = method_to_typeid or \ getattr(proxytype, '_method_to_typeid_', None) if method_to_typeid: for key, value in list(method_to_typeid.items()): # isinstance? assert type(key) is str, '%r is not a string' % key assert type(value) is str, '%r is not a string' % value cls._registry[typeid] = ( callable, exposed, method_to_typeid, proxytype ) if create_method: def temp(self, /, *args, **kwds): util.debug('requesting creation of a shared %r object', typeid) token, exp = self._create(typeid, *args, **kwds) proxy = proxytype( token, self._serializer, manager=self, authkey=self._authkey, exposed=exp ) conn = self._Client(token.address, authkey=self._authkey) dispatch(conn, None, 'decref', (token.id,)) return proxy temp.__name__ = typeid setattr(cls, typeid, temp) # # Subclass of set which get cleared after a fork # class ProcessLocalSet(set): def __init__(self): util.register_after_fork(self, lambda obj: obj.clear()) def __reduce__(self): return type(self), () # # Definition of BaseProxy # class BaseProxy(object): ''' A base for proxies of shared objects ''' _address_to_local = {} _mutex = util.ForkAwareThreadLock() def __init__(self, token, serializer, manager=None, authkey=None, exposed=None, incref=True, manager_owned=False): with BaseProxy._mutex: tls_idset = BaseProxy._address_to_local.get(token.address, None) if tls_idset is None: tls_idset = util.ForkAwareLocal(), ProcessLocalSet() BaseProxy._address_to_local[token.address] = tls_idset # self._tls is used to record the connection used by this # thread to communicate with the manager at token.address self._tls = tls_idset[0] # self._idset is used to record the identities of all shared # objects for which the current process owns references and # which are in the manager at token.address self._idset = tls_idset[1] self._token = token self._id = self._token.id self._manager = manager self._serializer = serializer self._Client = listener_client[serializer][1] # Should be set to True only when a proxy object is being created # on the manager server; primary use case: nested proxy objects. # RebuildProxy detects when a proxy is being created on the manager # and sets this value appropriately. self._owned_by_manager = manager_owned if authkey is not None: self._authkey = process.AuthenticationString(authkey) elif self._manager is not None: self._authkey = self._manager._authkey else: self._authkey = process.current_process().authkey if incref: self._incref() util.register_after_fork(self, BaseProxy._after_fork) def _connect(self): util.debug('making connection to manager') name = process.current_process().name if threading.current_thread().name != 'MainThread': name += '|' + threading.current_thread().name conn = self._Client(self._token.address, authkey=self._authkey) dispatch(conn, None, 'accept_connection', (name,)) self._tls.connection = conn def _callmethod(self, methodname, args=(), kwds={}): ''' Try to call a method of the referent and return a copy of the result ''' try: conn = self._tls.connection except AttributeError: util.debug('thread %r does not own a connection', threading.current_thread().name) self._connect() conn = self._tls.connection conn.send((self._id, methodname, args, kwds)) kind, result = conn.recv() if kind == '#RETURN': return result elif kind == '#PROXY': exposed, token = result proxytype = self._manager._registry[token.typeid][-1] token.address = self._token.address proxy = proxytype( token, self._serializer, manager=self._manager, authkey=self._authkey, exposed=exposed ) conn = self._Client(token.address, authkey=self._authkey) dispatch(conn, None, 'decref', (token.id,)) return proxy raise convert_to_error(kind, result) def _getvalue(self): ''' Get a copy of the value of the referent ''' return self._callmethod('#GETVALUE') def _incref(self): if self._owned_by_manager: util.debug('owned_by_manager skipped INCREF of %r', self._token.id) return conn = self._Client(self._token.address, authkey=self._authkey) dispatch(conn, None, 'incref', (self._id,)) util.debug('INCREF %r', self._token.id) self._idset.add(self._id) state = self._manager and self._manager._state self._close = util.Finalize( self, BaseProxy._decref, args=(self._token, self._authkey, state, self._tls, self._idset, self._Client), exitpriority=10 ) @staticmethod def _decref(token, authkey, state, tls, idset, _Client): idset.discard(token.id) # check whether manager is still alive if state is None or state.value == State.STARTED: # tell manager this process no longer cares about referent try: util.debug('DECREF %r', token.id) conn = _Client(token.address, authkey=authkey) dispatch(conn, None, 'decref', (token.id,)) except Exception as e: util.debug('... decref failed %s', e) else: util.debug('DECREF %r -- manager already shutdown', token.id) # check whether we can close this thread's connection because # the process owns no more references to objects for this manager if not idset and hasattr(tls, 'connection'): util.debug('thread %r has no more proxies so closing conn', threading.current_thread().name) tls.connection.close() del tls.connection def _after_fork(self): self._manager = None try: self._incref() except Exception as e: # the proxy may just be for a manager which has shutdown util.info('incref failed: %s' % e) def __reduce__(self): kwds = {} if get_spawning_popen() is not None: kwds['authkey'] = self._authkey if getattr(self, '_isauto', False): kwds['exposed'] = self._exposed_ return (RebuildProxy, (AutoProxy, self._token, self._serializer, kwds)) else: return (RebuildProxy, (type(self), self._token, self._serializer, kwds)) def __deepcopy__(self, memo): return self._getvalue() def __repr__(self): return '<%s object, typeid %r at %#x>' % \ (type(self).__name__, self._token.typeid, id(self)) def __str__(self): ''' Return representation of the referent (or a fall-back if that fails) ''' try: return self._callmethod('__repr__') except Exception: return repr(self)[:-1] + "; '__str__()' failed>" # # Function used for unpickling # def RebuildProxy(func, token, serializer, kwds): ''' Function used for unpickling proxy objects. ''' server = getattr(process.current_process(), '_manager_server', None) if server and server.address == token.address: util.debug('Rebuild a proxy owned by manager, token=%r', token) kwds['manager_owned'] = True if token.id not in server.id_to_local_proxy_obj: server.id_to_local_proxy_obj[token.id] = \ server.id_to_obj[token.id] incref = ( kwds.pop('incref', True) and not getattr(process.current_process(), '_inheriting', False) ) return func(token, serializer, incref=incref, **kwds) # # Functions to create proxies and proxy types # def MakeProxyType(name, exposed, _cache={}): ''' Return a proxy type whose methods are given by `exposed` ''' exposed = tuple(exposed) try: return _cache[(name, exposed)] except KeyError: pass dic = {} for meth in exposed: exec('''def %s(self, /, *args, **kwds): return self._callmethod(%r, args, kwds)''' % (meth, meth), dic) ProxyType = type(name, (BaseProxy,), dic) ProxyType._exposed_ = exposed _cache[(name, exposed)] = ProxyType return ProxyType def AutoProxy(token, serializer, manager=None, authkey=None, exposed=None, incref=True): ''' Return an auto-proxy for `token` ''' _Client = listener_client[serializer][1] if exposed is None: conn = _Client(token.address, authkey=authkey) try: exposed = dispatch(conn, None, 'get_methods', (token,)) finally: conn.close() if authkey is None and manager is not None: authkey = manager._authkey if authkey is None: authkey = process.current_process().authkey ProxyType = MakeProxyType('AutoProxy[%s]' % token.typeid, exposed) proxy = ProxyType(token, serializer, manager=manager, authkey=authkey, incref=incref) proxy._isauto = True return proxy # # Types/callables which we will register with SyncManager # class Namespace(object): def __init__(self, /, **kwds): self.__dict__.update(kwds) def __repr__(self): items = list(self.__dict__.items()) temp = [] for name, value in items: if not name.startswith('_'): temp.append('%s=%r' % (name, value)) temp.sort() return '%s(%s)' % (self.__class__.__name__, ', '.join(temp)) class Value(object): def __init__(self, typecode, value, lock=True): self._typecode = typecode self._value = value def get(self): return self._value def set(self, value): self._value = value def __repr__(self): return '%s(%r, %r)'%(type(self).__name__, self._typecode, self._value) value = property(get, set) def Array(typecode, sequence, lock=True): return array.array(typecode, sequence) # # Proxy types used by SyncManager # class IteratorProxy(BaseProxy): _exposed_ = ('__next__', 'send', 'throw', 'close') def __iter__(self): return self def __next__(self, *args): return self._callmethod('__next__', args) def send(self, *args): return self._callmethod('send', args) def throw(self, *args): return self._callmethod('throw', args) def close(self, *args): return self._callmethod('close', args) class AcquirerProxy(BaseProxy): _exposed_ = ('acquire', 'release') def acquire(self, blocking=True, timeout=None): args = (blocking,) if timeout is None else (blocking, timeout) return self._callmethod('acquire', args) def release(self): return self._callmethod('release') def __enter__(self): return self._callmethod('acquire') def __exit__(self, exc_type, exc_val, exc_tb): return self._callmethod('release') class ConditionProxy(AcquirerProxy): _exposed_ = ('acquire', 'release', 'wait', 'notify', 'notify_all') def wait(self, timeout=None): return self._callmethod('wait', (timeout,)) def notify(self, n=1): return self._callmethod('notify', (n,)) def notify_all(self): return self._callmethod('notify_all') def wait_for(self, predicate, timeout=None): result = predicate() if result: return result if timeout is not None: endtime = time.monotonic() + timeout else: endtime = None waittime = None while not result: if endtime is not None: waittime = endtime - time.monotonic() if waittime <= 0: break self.wait(waittime) result = predicate() return result class EventProxy(BaseProxy): _exposed_ = ('is_set', 'set', 'clear', 'wait') def is_set(self): return self._callmethod('is_set') def set(self): return self._callmethod('set') def clear(self): return self._callmethod('clear') def wait(self, timeout=None): return self._callmethod('wait', (timeout,)) class BarrierProxy(BaseProxy): _exposed_ = ('__getattribute__', 'wait', 'abort', 'reset') def wait(self, timeout=None): return self._callmethod('wait', (timeout,)) def abort(self): return self._callmethod('abort') def reset(self): return self._callmethod('reset') @property def parties(self): return self._callmethod('__getattribute__', ('parties',)) @property def n_waiting(self): return self._callmethod('__getattribute__', ('n_waiting',)) @property def broken(self): return self._callmethod('__getattribute__', ('broken',)) class NamespaceProxy(BaseProxy): _exposed_ = ('__getattribute__', '__setattr__', '__delattr__') def __getattr__(self, key): if key[0] == '_': return object.__getattribute__(self, key) callmethod = object.__getattribute__(self, '_callmethod') return callmethod('__getattribute__', (key,)) def __setattr__(self, key, value): if key[0] == '_': return object.__setattr__(self, key, value) callmethod = object.__getattribute__(self, '_callmethod') return callmethod('__setattr__', (key, value)) def __delattr__(self, key): if key[0] == '_': return object.__delattr__(self, key) callmethod = object.__getattribute__(self, '_callmethod') return callmethod('__delattr__', (key,)) class ValueProxy(BaseProxy): _exposed_ = ('get', 'set') def get(self): return self._callmethod('get') def set(self, value): return self._callmethod('set', (value,)) value = property(get, set) BaseListProxy = MakeProxyType('BaseListProxy', ( '__add__', '__contains__', '__delitem__', '__getitem__', '__len__', '__mul__', '__reversed__', '__rmul__', '__setitem__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort', '__imul__' )) class ListProxy(BaseListProxy): def __iadd__(self, value): self._callmethod('extend', (value,)) return self def __imul__(self, value): self._callmethod('__imul__', (value,)) return self DictProxy = MakeProxyType('DictProxy', ( '__contains__', '__delitem__', '__getitem__', '__iter__', '__len__', '__setitem__', 'clear', 'copy', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values' )) DictProxy._method_to_typeid_ = { '__iter__': 'Iterator', } ArrayProxy = MakeProxyType('ArrayProxy', ( '__len__', '__getitem__', '__setitem__' )) BasePoolProxy = MakeProxyType('PoolProxy', ( 'apply', 'apply_async', 'close', 'imap', 'imap_unordered', 'join', 'map', 'map_async', 'starmap', 'starmap_async', 'terminate', )) BasePoolProxy._method_to_typeid_ = { 'apply_async': 'AsyncResult', 'map_async': 'AsyncResult', 'starmap_async': 'AsyncResult', 'imap': 'Iterator', 'imap_unordered': 'Iterator' } class PoolProxy(BasePoolProxy): def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): self.terminate() # # Definition of SyncManager # class SyncManager(BaseManager): ''' Subclass of `BaseManager` which supports a number of shared object types. The types registered are those intended for the synchronization of threads, plus `dict`, `list` and `Namespace`. The `multiprocessing.Manager()` function creates started instances of this class. ''' SyncManager.register('Queue', queue.Queue) SyncManager.register('JoinableQueue', queue.Queue) SyncManager.register('Event', threading.Event, EventProxy) SyncManager.register('Lock', threading.Lock, AcquirerProxy) SyncManager.register('RLock', threading.RLock, AcquirerProxy) SyncManager.register('Semaphore', threading.Semaphore, AcquirerProxy) SyncManager.register('BoundedSemaphore', threading.BoundedSemaphore, AcquirerProxy) SyncManager.register('Condition', threading.Condition, ConditionProxy) SyncManager.register('Barrier', threading.Barrier, BarrierProxy) SyncManager.register('Pool', pool.Pool, PoolProxy) SyncManager.register('list', list, ListProxy) SyncManager.register('dict', dict, DictProxy) SyncManager.register('Value', Value, ValueProxy) SyncManager.register('Array', Array, ArrayProxy) SyncManager.register('Namespace', Namespace, NamespaceProxy) # types returned by methods of PoolProxy SyncManager.register('Iterator', proxytype=IteratorProxy, create_method=False) SyncManager.register('AsyncResult', create_method=False) # # Definition of SharedMemoryManager and SharedMemoryServer # if HAS_SHMEM: class _SharedMemoryTracker: "Manages one or more shared memory segments." def __init__(self, name, segment_names=[]): self.shared_memory_context_name = name self.segment_names = segment_names def register_segment(self, segment_name): "Adds the supplied shared memory block name to tracker." util.debug(f"Register segment {segment_name!r} in pid {getpid()}") self.segment_names.append(segment_name) def destroy_segment(self, segment_name): """Calls unlink() on the shared memory block with the supplied name and removes it from the list of blocks being tracked.""" util.debug(f"Destroy segment {segment_name!r} in pid {getpid()}") self.segment_names.remove(segment_name) segment = shared_memory.SharedMemory(segment_name) segment.close() segment.unlink() def unlink(self): "Calls destroy_segment() on all tracked shared memory blocks." for segment_name in self.segment_names[:]: self.destroy_segment(segment_name) def __del__(self): util.debug(f"Call {self.__class__.__name__}.__del__ in {getpid()}") self.unlink() def __getstate__(self): return (self.shared_memory_context_name, self.segment_names) def __setstate__(self, state): self.__init__(*state) class SharedMemoryServer(Server): public = Server.public + \ ['track_segment', 'release_segment', 'list_segments'] def __init__(self, *args, **kwargs): Server.__init__(self, *args, **kwargs) address = self.address # The address of Linux abstract namespaces can be bytes if isinstance(address, bytes): address = os.fsdecode(address) self.shared_memory_context = \ _SharedMemoryTracker(f"shm_{address}_{getpid()}") util.debug(f"SharedMemoryServer started by pid {getpid()}") def create(*args, **kwargs): """Create a new distributed-shared object (not backed by a shared memory block) and return its id to be used in a Proxy Object.""" # Unless set up as a shared proxy, don't make shared_memory_context # a standard part of kwargs. This makes things easier for supplying # simple functions. if len(args) >= 3: typeod = args[2] elif 'typeid' in kwargs: typeid = kwargs['typeid'] elif not args: raise TypeError("descriptor 'create' of 'SharedMemoryServer' " "object needs an argument") else: raise TypeError('create expected at least 2 positional ' 'arguments, got %d' % (len(args)-1)) if hasattr(self.registry[typeid][-1], "_shared_memory_proxy"): kwargs['shared_memory_context'] = self.shared_memory_context return Server.create(*args, **kwargs) create.__text_signature__ = '($self, c, typeid, /, *args, **kwargs)' def shutdown(self, c): "Call unlink() on all tracked shared memory, terminate the Server." self.shared_memory_context.unlink() return Server.shutdown(self, c) def track_segment(self, c, segment_name): "Adds the supplied shared memory block name to Server's tracker." self.shared_memory_context.register_segment(segment_name) def release_segment(self, c, segment_name): """Calls unlink() on the shared memory block with the supplied name and removes it from the tracker instance inside the Server.""" self.shared_memory_context.destroy_segment(segment_name) def list_segments(self, c): """Returns a list of names of shared memory blocks that the Server is currently tracking.""" return self.shared_memory_context.segment_names class SharedMemoryManager(BaseManager): """Like SyncManager but uses SharedMemoryServer instead of Server. It provides methods for creating and returning SharedMemory instances and for creating a list-like object (ShareableList) backed by shared memory. It also provides methods that create and return Proxy Objects that support synchronization across processes (i.e. multi-process-safe locks and semaphores). """ _Server = SharedMemoryServer def __init__(self, *args, **kwargs): if os.name == "posix": # bpo-36867: Ensure the resource_tracker is running before # launching the manager process, so that concurrent # shared_memory manipulation both in the manager and in the # current process does not create two resource_tracker # processes. from . import resource_tracker resource_tracker.ensure_running() BaseManager.__init__(self, *args, **kwargs) util.debug(f"{self.__class__.__name__} created by pid {getpid()}") def __del__(self): util.debug(f"{self.__class__.__name__}.__del__ by pid {getpid()}") pass def get_server(self): 'Better than monkeypatching for now; merge into Server ultimately' if self._state.value != State.INITIAL: if self._state.value == State.STARTED: raise ProcessError("Already started SharedMemoryServer") elif self._state.value == State.SHUTDOWN: raise ProcessError("SharedMemoryManager has shut down") else: raise ProcessError( "Unknown state {!r}".format(self._state.value)) return self._Server(self._registry, self._address, self._authkey, self._serializer) def SharedMemory(self, size): """Returns a new SharedMemory instance with the specified size in bytes, to be tracked by the manager.""" with self._Client(self._address, authkey=self._authkey) as conn: sms = shared_memory.SharedMemory(None, create=True, size=size) try: dispatch(conn, None, 'track_segment', (sms.name,)) except BaseException as e: sms.unlink() raise e return sms def ShareableList(self, sequence): """Returns a new ShareableList instance populated with the values from the input sequence, to be tracked by the manager.""" with self._Client(self._address, authkey=self._authkey) as conn: sl = shared_memory.ShareableList(sequence) try: dispatch(conn, None, 'track_segment', (sl.shm.name,)) except BaseException as e: sl.shm.unlink() raise e return sl synchronize.pyo000064400000024773147207507420007675 0ustar00 rfc@sddddddgZddlZddlZddlZddlmZmZddlZdd l m Z dd l m Z m Z mZdd lmZmZydd lmZWn)ek red dddnXed\ZZejjZdefdYZdefdYZdefdYZdefdYZdefdYZdefdYZdefdYZdS(tLocktRLockt SemaphoretBoundedSemaphoret ConditiontEventiN(ttimetsleep(tcurrent_process(tFinalizetregister_after_forktdebug(tassert_spawningtPopen(tSemLocks*This platform lacks a functioning sem_opens( implementation, therefore, the requireds+ synchronization primitives needed will nots function, see issue 3770.iRcBs>eZdZdZdZdZdZdZRS(cCsctj|||}|_td|j|jtjdkr_d}t||ndS(Nscreated semlock with handle %stwin32cSs|jjdS(N(t_semlockt _after_fork(tobj((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRPs( t_multiprocessingRRR thandlet _make_methodstsystplatformR (tselftkindtvaluetmaxvaluetslR((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyt__init__Js   cCs"|jj|_|jj|_dS(N(Rtacquiretrelease(R((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRTscCs |jjS(N(Rt __enter__(R((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyR XscGs|jj|S(N(Rt__exit__(Rtargs((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyR![scCs2t||j}tj|j|j|jfS(N(R RR tduplicate_for_childRRR(RR((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyt __getstate__^s  cCs5tjj||_td|d|jdS(Ns recreated blocker with handle %ri(RRt_rebuildRR R(Rtstate((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyt __setstate__cs(t__name__t __module__RRR R!R$R'(((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRHs     cBs&eZddZdZdZRS(icCstj|t|tdS(N(RRt SEMAPHOREt SEM_VALUE_MAX(RR((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRnscCs |jjS(N(Rt _get_value(R((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyt get_valueqscCs5y|jj}Wntk r,d}nXd|S(Ntunknowns(RR,t Exception(RR((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyt__repr__ts   (R(R)RR-R0(((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRls  cBseZddZdZRS(icCstj|t||dS(N(RRR*(RR((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRscCsAy|jj}Wntk r,d}nXd||jjfS(NR.s)(RR,R/R(RR((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyR0s   (R(R)RR0(((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRs cBseZdZdZRS(cCstj|tdddS(Ni(RRR*(R((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRscCsy|jjrPtj}tjjdkr|dtjj7}qnB|jjdkrnd}n$|jjdkrd}nd}Wntk rd}nXd |S( Nt MainThreadt|itNoneitSomeOtherThreadtSomeOtherProcessR.s( Rt_is_mineRtnamet threadingtcurrent_threadR,t_countR/(RR7((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyR0s      (R(R)RR0(((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRs cBseZdZdZRS(cCstj|tdddS(Ni(RRtRECURSIVE_MUTEX(R((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRscCsy|jjr_tj}tjjdkrM|dtjj7}n|jj}nT|jjdkrd \}}n0|jjdkrd \}}n d \}}Wntk rd\}}nXd ||fS(NR1R2iR3iR4tnonzeroR5R.s(sNonei(sSomeOtherThreadR<(sSomeOtherProcessR<(sunknownsunknown( RR6RR7R8R9R:R,R/(RR7tcount((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyR0s  (R(R)RR0(((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRs cBsheZd dZdZdZdZdZdZdZ d dZ dZ d Z RS( cCsM|p t|_td|_td|_td|_|jdS(Ni(Rt_lockRt_sleeping_countt _woken_countt_wait_semaphoreR(Rtlock((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRs cCs&t||j|j|j|jfS(N(R R>R?R@RA(R((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyR$s  cCs,|\|_|_|_|_|jdS(N(R>R?R@RAR(RR&((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyR'scCs |jjS(N(R>R (R((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyR scGs|jj|S(N(R>R!(RR"((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyR!scCs"|jj|_|jj|_dS(N(R>RR(R((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRscCsQy&|jjj|jjj}Wntk r?d}nXd|j|fS(Ntunkowns(R?RR,R@R/R>(Rt num_waiters((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyR0s   cCs|jj|jjj}x!t|D]}|jjq,Wz|jjt|Wd|j jx!t|D]}|jjqwWXdS(N( R?RR>RR:txrangeRARtTrueR@(RttimeoutR=ti((s3/usr/lib64/python2.7/multiprocessing/synchronize.pytwaits  cCsnx(|jjtr*|jjt}qW|jjtrj|jj|jj|jjtndS(N(R@RtFalseR?RAR(Rtres((s3/usr/lib64/python2.7/multiprocessing/synchronize.pytnotifys  cCsx(|jjtr*|jjt}qWd}x-|jjtr`|jj|d7}q4W|rx!t|D]}|jjqtWx|jjtrqWndS(Nii(R@RRJR?RARRE(RRKtsleepersRH((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyt notify_alls N( R(R)R3RR$R'R R!RR0RIRLRN(((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRs         cBs8eZdZdZdZdZddZRS(cCs%tt|_td|_dS(Ni(RRt_condRt_flag(R((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyR-scCsM|jjz+|jjtr3|jjtStSWd|jjXdS(N(RORRPRJRRF(R((s3/usr/lib64/python2.7/multiprocessing/synchronize.pytis_set1s  cCsP|jjz.|jjt|jj|jjWd|jjXdS(N(RORRPRJRRN(R((s3/usr/lib64/python2.7/multiprocessing/synchronize.pytset;s   cCs6|jjz|jjtWd|jjXdS(N(RORRPRJR(R((s3/usr/lib64/python2.7/multiprocessing/synchronize.pytclearDs cCs|jjz]|jjtr2|jjn|jj||jjtre|jjtStSWd|jjXdS(N(RORRPRJRRIRF(RRG((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRIKs  N(R(R)RRQRRRSR3RI(((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyR+s   (t__all__R8tosRRt_timeRt_sleepRtmultiprocessing.processRtmultiprocessing.utilR R R tmultiprocessing.forkingR R Rt ImportErrortrangeR;R*R+tobjectRRRRRR(((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyt$s.       $hheap.pyo000064400000014613147207507420006227 0ustar00 rfc@s ddlZddlZddlZddlZddlZddlZddlZddlZddlm Z m Z ddl m Z dgZ ejdkrddlmZdefdYZndefd YZd efd YZdefd YZdS( iN(tFinalizetinfo(tassert_spawningt BufferWrappertwin32(RtArenacBs/eZejZdZdZdZRS(cCse||_dtjtjjf|_tjd|jd|j|_|j|jf|_ dS(Ns pym-%d-%dittagname( tsizetostgetpidRt_countertnexttnametmmaptbuffert_state(tselfR((s,/usr/lib64/python2.7/multiprocessing/heap.pyt__init__=s "!cCst||jS(N(RR(R((s,/usr/lib64/python2.7/multiprocessing/heap.pyt __getstate__Ds cCs>|\|_|_|_tjd|jd|j|_dS(NiR(RR RR R(Rtstate((s,/usr/lib64/python2.7/multiprocessing/heap.pyt __setstate__Hs!(t__name__t __module__t itertoolstcountR RRR(((s,/usr/lib64/python2.7/multiprocessing/heap.pyR9s   cBseZdZRS(cCs+tjd||_||_d|_dS(Ni(R RRtNoneR (RR((s,/usr/lib64/python2.7/multiprocessing/heap.pyRQs (RRR(((s,/usr/lib64/python2.7/multiprocessing/heap.pyROstHeapcBsbeZdZejdZedZdZdZ dZ dZ dZ dZ RS( icCsmtj|_tj|_||_g|_i|_i|_ i|_ t |_ g|_ g|_dS(N(RR t_lastpidt threadingtLockt_lockt_sizet_lengthst _len_to_seqt_start_to_blockt_stop_to_blocktsett_allocated_blockst_arenast_pending_free_blocks(RR((s,/usr/lib64/python2.7/multiprocessing/heap.pyR^s       cCs|d}|||@S(Ni((tnt alignmenttmask((s,/usr/lib64/python2.7/multiprocessing/heap.pyt_roundupks c Cstj|j|}|t|jkr|jt|j|tj}|jd9_t d|t |}|j j ||d|fS|j|}|j |}|j}|s|j |=|j|=n|\}}}|j||f=|j||f=|S(Nis"allocating a new mmap of length %di(tbisectt bisect_leftR tlenR+tmaxRR tPAGESIZERRR&tappendR!tpopR"R#( RRtitlengthtarenatseqtblocktstarttstop((s,/usr/lib64/python2.7/multiprocessing/heap.pyt_mallocqs"!      c Cs!|\}}}y|j||f}Wntk r9nX|j|\}}y|j||f}Wntk rynX|j|\}}|||f}||}y|j|j|Wn4tk r|g|j|#s          reduction.pyc000064400000013575147207507420007300 0ustar00 rfc@sgZddlZddlZddlZddlZddlZddlmZddlm Z m Z m Z m Z ddl mZmZmZddlmZmZejdkpeedsednejdkrddlZdd lmZd Zd Znd Zd ZeadZedeeedZdZ dZ!dZ"dZ#dZ$e j%ej&e#ddZ'dZ(dZ)e j%eje(ejdkrdZ*dZ+e j%ej,e*ndS(iN(tcurrent_process(tPopent duplicatetclosetForkingPickler(tregister_after_forktdebugt sub_debug(tClienttListenertwin32trecvfds%pickling of connections not supported(R cCsJtjtjt|}z t||}|j|Wdt|XdS(N(R t OpenProcesstPROCESS_ALL_ACCESStFalseRtsendR(tconnthandletdestination_pidtprocess_handlet new_handle((s1/usr/lib64/python2.7/multiprocessing/reduction.pyt send_handleAs cCs |jS(N(trecv(R((s1/usr/lib64/python2.7/multiprocessing/reduction.pyt recv_handleKscCstj|j|dS(N(t_multiprocessingtsendfdtfileno(RRR((s1/usr/lib64/python2.7/multiprocessing/reduction.pyROscCstj|jS(N(RR R(R((s1/usr/lib64/python2.7/multiprocessing/reduction.pyRRscCs;xtD]}t|qWtjtjadadS(N(t_cacheRtcleart threadingtLockt_locktNonet _listener(tobjth((s1/usr/lib64/python2.7/multiprocessing/reduction.pyt_reset[s    cCstdkr~tjzWtdkrltdtdtjatj dt }t |_ |j nWdtjXntS(Ns0starting listener and thread for sending handlestauthkeyttarget(R!R RtacquireRR RR%RtThreadt_servetTruetdaemontstarttrelease(tt((s1/usr/lib64/python2.7/multiprocessing/reduction.pyt _get_listenerfs     cCsddlm}m}xyStj}|j\}}tj|t|||t ||j Wq|sddl }|dddd|j ddqqXqdS(Ni(t is_exitingt sub_warningis.thread for sharing handles raised exception : t-iOs ( tutilR0R1R!tacceptRRtremoveRRt tracebackt format_exc(R0R1Rt handle_wantedRR6((s1/usr/lib64/python2.7/multiprocessing/reduction.pyR)ws     cCs[tjr"dtj|tfSt|}tj|td|t j |t fS(Nsreducing handle %d( Rtthread_is_spawningR tduplicate_for_childR*RRtaddRR/taddressR(Rt dup_handle((s1/usr/lib64/python2.7/multiprocessing/reduction.pyt reduce_handles     cCsq|\}}}|r|Std|t|dtj}|j|tjft|}|j|S(Nsrebuilding handle %dR%( RRRR%RtostgetpidRR(t pickled_dataR<Rt inheritedRR((s1/usr/lib64/python2.7/multiprocessing/reduction.pytrebuild_handles   cCs+t|j}t||j|jffS(N(R>Rtrebuild_connectiontreadabletwritable(Rtrh((s1/usr/lib64/python2.7/multiprocessing/reduction.pytreduce_connectionscCs%t|}tj|d|d|S(NRERF(RCRt Connection(treduced_handleRERFR((s1/usr/lib64/python2.7/multiprocessing/reduction.pyRDs icCsCtj||||}|jtjk r?tjd|}n|S(Nt_sock(tsockettfromfdt __class__(tfdtfamilyttype_tprotots((s1/usr/lib64/python2.7/multiprocessing/reduction.pyRMscCs1t|j}t||j|j|jffS(N(R>Rtrebuild_socketRPttypeRR(RSRJ((s1/usr/lib64/python2.7/multiprocessing/reduction.pyt reduce_socketscCs/t|}t||||}t||S(N(RCRMR(RJRPRQRRRORK((s1/usr/lib64/python2.7/multiprocessing/reduction.pyRTs  cCs+t|j}t||j|jffS(N(R>Rtrebuild_pipe_connectionRERF(RRG((s1/usr/lib64/python2.7/multiprocessing/reduction.pytreduce_pipe_connectionscCs%t|}tj|d|d|S(NRERF(RCRtPipeConnection(RJRERFR((s1/usr/lib64/python2.7/multiprocessing/reduction.pyRWs (-t__all__R?tsysRLRRtmultiprocessingRtmultiprocessing.forkingRRRRtmultiprocessing.utilRRRtmultiprocessing.connectionRR tplatformthasattrt ImportErrort _subprocessR RRtsetRR$R R/R)R>RCRHRDtregisterRIRMRVRTRXRWRY(((s1/usr/lib64/python2.7/multiprocessing/reduction.pyt$sJ     "                   process.pyo000064400000021102147207507420006757 0ustar00 rfc@s2dddgZddlZddlZddlZddlZyejjejZWne k rtdZnXdZ dZ dZ defdYZd efd YZd efd YZea[iZxGejjD]6\ZZed dkrdekreee ks(Rt_countertnextt _identityt_authkeyt _daemonict_tempdirtostgetpidt _parent_pidR Rt_targetttuplet_argstdictt_kwargsttypet__name__tjoint_name(tselftgroupttargettnametargstkwargstcount((s//usr/lib64/python2.7/multiprocessing/process.pyt__init__^s     cCs&|jr"|j|j|jndS(sQ Method to be run in sub-process; can be overridden in sub-class N(RRR(R#((s//usr/lib64/python2.7/multiprocessing/process.pytrunms cCsUt|jdk r"|j}nddlm}|||_tjj|dS(s% Start child process i(tPopenN( Rt_PopenR tforkingR,RRRtadd(R#R,((s//usr/lib64/python2.7/multiprocessing/process.pytstartts  cCs|jjdS(sT Terminate process; sends SIGTERM signal or uses TerminateProcess() N(Rt terminate(R#((s//usr/lib64/python2.7/multiprocessing/process.pyR1scCs5|jj|}|dk r1tjj|ndS(s5 Wait until child process terminates N(RtwaitR RRR (R#ttimeouttres((s//usr/lib64/python2.7/multiprocessing/process.pyR!s cCs@|tkrtS|jdkr#tS|jj|jjdkS(s1 Return whether process is alive N(RtTrueRR tFalseRt returncode(R#((s//usr/lib64/python2.7/multiprocessing/process.pytis_alives   cCs|jS(N(R"(R#((s//usr/lib64/python2.7/multiprocessing/process.pyR&scCs ||_dS(N(R"(R#R&((s//usr/lib64/python2.7/multiprocessing/process.pyR&scCs|jS(s4 Return whether process is a daemon (R(R#((s//usr/lib64/python2.7/multiprocessing/process.pytdaemonscCs ||_dS(s1 Set whether process is a daemon N(R(R#tdaemonic((s//usr/lib64/python2.7/multiprocessing/process.pyR9scCs|jS(N(R(R#((s//usr/lib64/python2.7/multiprocessing/process.pytauthkeyscCst||_dS(s2 Set authorization key of process N(tAuthenticationStringR(R#R;((s//usr/lib64/python2.7/multiprocessing/process.pyR;scCs#|jdkr|jS|jjS(sM Return exit code of process or `None` if it has yet to stop N(RR R(R#((s//usr/lib64/python2.7/multiprocessing/process.pytexitcodescCs-|tkrtjS|jo(|jjSdS(sU Return identifier (PID) of process or `None` if it has yet to start N(RRRRtpid(R#((s//usr/lib64/python2.7/multiprocessing/process.pytidents  cCs|tkrd}n]|jtjkr3d}n?|jdkrKd}n'|jjdk rl|j}nd}t|t kr|dkrd}qdt j ||}ndt|j |j ||jrdpd fS( Ntstartedtunknowntinitialitstoppeds stopped[%s]s<%s(%s, %s%s)>s daemont(RRRRRR RR=Rtintt_exitcode_to_nametgetR R"R(R#tstatus((s//usr/lib64/python2.7/multiprocessing/process.pyt__repr__s       cCsddlm}yt|_tjd|_y#tjj t t j t_Wnt tfk rmnX|a|jj|j|jdz|jd}Wd|jXWntk rX}|jsd}qt|jdtr|jd}qtjjt|jddtjjt|jdtrOdnd}nGd}ddl}tjjd|jtjj|j nX|jd||S( Ni(tutils child process calling self.run()is is Process %s: s process exiting with exitcode %d(!RDRJtsetRt itertoolsR)RtsyststdintclosetopenRtdevnulltOSErrort ValueErrorRt_finalizer_registrytcleart_run_after_forkerstinfoR+t_exit_functiont SystemExitR't isinstanceREtstderrtwriteRtflusht tracebackR&t print_exc(R#RJR=teR^((s//usr/lib64/python2.7/multiprocessing/process.pyt _bootstrapsB         ! %  N((R t __module__t__doc__R R-R*R+R0R1R!R8tpropertyR&tsetterR9R;R=R?R>RIRa(((s//usr/lib64/python2.7/multiprocessing/process.pyRVs&       R<cBseZdZRS(cCs>ddlm}|js+tdntt|ffS(Ni(R,sJPickling an AuthenticationString object is disallowed for security reasons(R.R,tthread_is_spawningt TypeErrorR<tbytes(R#R,((s//usr/lib64/python2.7/multiprocessing/process.pyt __reduce__s   (R RbRi(((s//usr/lib64/python2.7/multiprocessing/process.pyR<st _MainProcesscBseZdZRS(cCspd|_t|_d|_d|_d|_tjd|_ t |_ t t jd|_d|_dS(Nt MainProcessii ((RR6RR"R RRRLR)RRKRR<RturandomRR(R#((s//usr/lib64/python2.7/multiprocessing/process.pyR*-s      (R RbR*(((s//usr/lib64/python2.7/multiprocessing/process.pyRj+sitSIGt_(t__all__RRMtsignalRLtpathtabspathtgetcwdt ORIGINAL_DIRRRR RRRtobjectRRhR<RjRRFt__dict__titemsR&tsignum(((s//usr/lib64/python2.7/multiprocessing/process.pyt#s(         __init__.pyc000064400000020421147207507420007027 0ustar00 rfc@sdZddddddddd d d d d ddddddddddddddgZdZddlZddlZddlmZmZmZdd l m Z m Z d!e fd"YZ d e fd#YZd e fd$YZd%e fd&YZddlZd'Zed(Zd)Zd*Zd+Zdd,Zd-Zd.Zd/Zdd0Zd1d2Zd1d3Zd4Z d5d6Z!d5d7Z"ddd@dd8Z#d9Z$d:Z%d;Z&d<Z'ej(d=krd>Z)ed?g7ZndS(As0.70a1tProcesstcurrent_processtactive_childrentfreeze_supporttManagertPipet cpu_countt log_to_stderrt get_loggertallow_connection_picklingtBufferTooShortt TimeoutErrortLocktRLockt SemaphoretBoundedSemaphoret ConditiontEventtQueuet JoinableQueuetPooltValuetArraytRawValuetRawArraytSUBDEBUGt SUBWARNINGs"R. Oudkerk (r.m.oudkerk@gmail.com)iN(RRR(RRt ProcessErrorcBseZRS((t__name__t __module__(((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRGscBseZRS((RR(((s0/usr/lib64/python2.7/multiprocessing/__init__.pyR JscBseZRS((RR(((s0/usr/lib64/python2.7/multiprocessing/__init__.pyR MstAuthenticationErrorcBseZRS((RR(((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRPscCs'ddlm}|}|j|S(s Returns a manager associated with a running server process The managers methods such as `Lock()`, `Condition()` and `Queue()` can be used to create shared objects. i(t SyncManager(tmultiprocessing.managersRtstart(Rtm((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRZs  cCsddlm}||S(s; Returns two connection object connected by a pipe i(R(tmultiprocessing.connectionR(tduplexR((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRfscCs*tjdkrIyttjd}Wq ttfk rEd}q Xndtjksgtjdkrd}tjdkrd|}ny.tj|}t|j}WdQXWq tk rd}q Xn6ytj d }Wn tt t fk r d}nX|d kr|St d dS( s2 Returns the number of CPUs in the system twin32tNUMBER_OF_PROCESSORSitbsdtdarwins/sbin/sysctl -n hw.ncpus/usrNtSC_NPROCESSORS_ONLNiscannot determine number of cpus( tsystplatformtinttostenviront ValueErrortKeyErrortpopentreadtsysconftOSErrortAttributeErrortNotImplementedError(tnumtcommtp((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRms*      cCs?tjdkr;ttdtr;ddlm}|ndS(s Check whether this is a fake forked process in a frozen executable. If so then run code specified by commandline and exit. R%tfrozeni(RN(R*R+tgetattrtFalsetmultiprocessing.forkingR(R((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRs!cCsddlm}|S(sR Return package logger -- if it does not already exist then it is created i(R(tmultiprocessing.utilR(R((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRscCsddlm}||S(sB Turn on logging and add a handler which prints to stderr i(R(R>R(tlevelR((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRscCsddlm}dS(sO Install support for sending connections and sockets between processes i(t reductionN(tmultiprocessingR@(R@((s0/usr/lib64/python2.7/multiprocessing/__init__.pyR scCsddlm}|S(s- Returns a non-recursive lock object i(R (tmultiprocessing.synchronizeR (R ((s0/usr/lib64/python2.7/multiprocessing/__init__.pyR scCsddlm}|S(s) Returns a recursive lock object i(R (RBR (R ((s0/usr/lib64/python2.7/multiprocessing/__init__.pyR scCsddlm}||S(s$ Returns a condition object i(R(RBR(tlockR((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRsicCsddlm}||S(s$ Returns a semaphore object i(R(RBR(tvalueR((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRscCsddlm}||S(s, Returns a bounded semaphore object i(R(RBR(RDR((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRscCsddlm}|S(s! Returns an event object i(R(RBR(R((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRsicCsddlm}||S(s Returns a queue object i(R(tmultiprocessing.queuesR(tmaxsizeR((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRscCsddlm}||S(s Returns a queue object i(R(RER(RFR((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRscCs#ddlm}|||||S(s' Returns a process pool object i(R(tmultiprocessing.poolR(t processest initializertinitargstmaxtasksperchildR((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRscGsddlm}|||S(s! Returns a shared object i(R(tmultiprocessing.sharedctypesR(ttypecode_or_typetargsR((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRscCsddlm}|||S(s Returns a shared array i(R(RLR(RMtsize_or_initializerR((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRscOs ddlm}||||S(s. Returns a synchronized shared object i(R(RLR(RMRNtkwdsR((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRscKs ddlm}||||S(s- Returns a synchronized shared array i(R(RLR(RMRORPR((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRsR%cCsddlm}||dS(s Sets the path to a python.exe or pythonw.exe binary used to run child processes on Windows instead of sys.executable. Useful for people embedding Python. i(tset_executableN(R=RQ(t executableRQ((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRQ sRQ((*t __version__t__all__t __author__R-R*tmultiprocessing.processRRRR>RRt ExceptionRR R Rt_multiprocessingRtTrueRRRRtNoneRR R R RRRRRRRRRRRR+RQ(((s0/usr/lib64/python2.7/multiprocessing/__init__.pyt,sN                      sharedctypes.pyc000064400000020620147207507420007767 0ustar00 rfc@sddlZddlZddlZddlmZmZddlmZmZdddddd gZ i ej d 6ej d 6ej d 6ej d 6ejd6ejd6ejd6ejd6ejd6ejd6ejd6ejd6ZdZdZdZdZdZdZddZdZdZ dZ!d Z"iZ#ej$Z%d!e&fd"YZ'd#e'fd$YZ(d%e'fd&YZ)d'e)fd(YZ*dS()iN(theaptRLock(tassert_spawningtForkingPicklertRawValuetRawArraytValuetArraytcopyt synchronizedtctutbtBthtHtitItltLtftdcCs.tj|}tj|}t||dS(N(tctypestsizeofRt BufferWrappert rebuild_ctypetNone(ttype_tsizetwrapper((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyt _new_value=scGsTtj||}t|}tjtj|dtj||j||S(s> Returns a ctypes object allocated from shared memory i(ttypecode_to_typetgetRRtmemsett addressofRt__init__(ttypecode_or_typetargsRtobj((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyRBs  % cCstj||}t|ttfrf||}t|}tjtj|dtj ||S|t |}t|}|j ||SdS(s= Returns a ctypes array allocated from shared memory iN( RR t isinstancetinttlongRRR!R"RtlenR#(R$tsize_or_initializerRR&tresult((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyRLs  %  cOs|jdd}|r1td|jnt||}|tkrP|S|tdfkrnt}nt|dst d|nt ||S(s6 Return a synchronization wrapper for a Value tlocks$unrecognized keyword argument(s): %stacquires'%r' has no method 'acquire'N( tpopRt ValueErrortkeysRtFalsetTrueRthasattrtAttributeErrorR (R$R%tkwdsR-R&((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyR\s  cKs|jdd}|r1td|jnt||}|tkrP|S|tdfkrnt}nt|dst d|nt ||S(s9 Return a synchronization wrapper for a RawArray R-s$unrecognized keyword argument(s): %sR.s'%r' has no method 'acquire'N( R/RR0R1RR2R3RR4R5R (R$R+R6R-R&((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyRls  cCs)tt|}|tj|d<|S(Ni(RttypeRtpointer(R&tnew_obj((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyR|scCst|t stdt|tjr;t||St|tjry|jtjkrlt ||St ||St |}yt |}Wnqt k rg|jD]}|d^q}td|D}d|j}t |tf|}t |st Synchronized(R'tSynchronizedBasetAssertionErrorRt _SimpleCDataR=Rt_type_tc_chartSynchronizedStringtSynchronizedArrayR7t class_cachetKeyErrort_fields_tdictt__name__(R&R-tclstsclstfieldtnamesRt classname((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyR s        !cCsXt|t|tjr8t|j|j|jffStt||jdffSdS(N( RR'RRRRAt_wrappert_length_R7R(R&((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyt reduce_ctypes cCsK|dk r||}ntj|t|j|j}||_|S(N(RRtregisterRQt from_addresst get_addressRO(RRtlengthR&((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyRs    cBsPy e|SWn=ek rKi}e|fd|U||e|<||SXdS(Ni(t prop_cacheRFttemplate(R<R((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyR:s  s def get%s(self): self.acquire() try: return self._obj.%s finally: self.release() def set%s(self, value): self.acquire() try: self._obj.%s = value finally: self.release() %s = property(get%s, set%s) R>cBs8eZddZdZdZdZdZRS(cCs=||_|pt|_|jj|_|jj|_dS(N(t_objRt_lockR.trelease(tselfR&R-((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyR#s cCs t|t|j|jffS(N(RR RXRY(R[((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyt __reduce__s cCs|jS(N(RX(R[((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pytget_objscCs|jS(N(RY(R[((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pytget_lockscCsdt|j|jfS(Ns<%s wrapper for %s>(R7RIRX(R[((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyt__repr__sN(RIt __module__RR#R\R]R^R_(((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyR>s     R=cBseZedZRS(tvalue(RIR`R:Ra(((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyR=sRDcBs5eZdZdZdZdZdZRS(cCs t|jS(N(R*RX(R[((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyt__len__scCs+|jz|j|SWd|jXdS(N(R.RXRZ(R[R((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyt __getitem__s cCs-|jz||j|R=RDRC(((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyt#s:            "process.pyc000064400000022463147207507420006756 0ustar00 rfc@s2dddgZddlZddlZddlZddlZyejjejZWne k rtdZnXdZ dZ dZ defdYZd efd YZd efd YZea[iZxGejjD]6\ZZed dkrdekreee ks(R tAssertionErrorRt_countertnextt _identityt_authkeyt _daemonict_tempdirtostgetpidt _parent_pidRt_targetttuplet_argstdictt_kwargsttypet__name__tjoint_name(tselftgroupttargettnametargstkwargstcount((s//usr/lib64/python2.7/multiprocessing/process.pyt__init__^s     cCs&|jr"|j|j|jndS(sQ Method to be run in sub-process; can be overridden in sub-class N(RRR(R$((s//usr/lib64/python2.7/multiprocessing/process.pytrunms cCs|jdkstd|jtjks<tdtj sRtdt|j dk rt|j }nddl m }|||_tj j |dS(s% Start child process scannot start a process twices:can only start a process object created by current processs3daemonic processes are not allowed to have childreni(tPopenN(RR RRRRRRRt_PopentforkingR-Rtadd(R$R-((s//usr/lib64/python2.7/multiprocessing/process.pytstartts    cCs|jjdS(sT Terminate process; sends SIGTERM signal or uses TerminateProcess() N(Rt terminate(R$((s//usr/lib64/python2.7/multiprocessing/process.pyR2scCsq|jtjks!td|jdk s<td|jj|}|dk rmtjj |ndS(s5 Wait until child process terminates scan only join a child processscan only join a started processN( RRRRRR twaitRRR (R$ttimeouttres((s//usr/lib64/python2.7/multiprocessing/process.pyR"s ! cCsa|tkrtS|jtjks1td|jdkrDtS|jj |jj dkS(s1 Return whether process is alive scan only test a child processN( RtTrueRRRRRR tFalseRt returncode(R$((s//usr/lib64/python2.7/multiprocessing/process.pytis_alives ! cCs|jS(N(R#(R$((s//usr/lib64/python2.7/multiprocessing/process.pyR'scCs(t|tstd||_dS(Nsname must be a string(t isinstancet basestringRR#(R$R'((s//usr/lib64/python2.7/multiprocessing/process.pyR'scCs|jS(s4 Return whether process is a daemon (R(R$((s//usr/lib64/python2.7/multiprocessing/process.pytdaemonscCs(|jdkstd||_dS(s1 Set whether process is a daemon sprocess has already startedN(RR RR(R$tdaemonic((s//usr/lib64/python2.7/multiprocessing/process.pyR<scCs|jS(N(R(R$((s//usr/lib64/python2.7/multiprocessing/process.pytauthkeyscCst||_dS(s2 Set authorization key of process N(tAuthenticationStringR(R$R>((s//usr/lib64/python2.7/multiprocessing/process.pyR>scCs#|jdkr|jS|jjS(sM Return exit code of process or `None` if it has yet to stop N(RR R(R$((s//usr/lib64/python2.7/multiprocessing/process.pytexitcodescCs-|tkrtjS|jo(|jjSdS(sU Return identifier (PID) of process or `None` if it has yet to start N(RRRRtpid(R$((s//usr/lib64/python2.7/multiprocessing/process.pytidents  cCs|tkrd}n]|jtjkr3d}n?|jdkrKd}n'|jjdk rl|j}nd}t|t kr|dkrd}qdt j ||}ndt|j |j ||jrdpd fS( Ntstartedtunknowntinitialitstoppeds stopped[%s]s<%s(%s, %s%s)>s daemont(RRRRRR RR@R tintt_exitcode_to_nametgetR!R#R(R$tstatus((s//usr/lib64/python2.7/multiprocessing/process.pyt__repr__s       cCsddlm}yt|_tjd|_y#tjj t t j t_Wnt tfk rmnX|a|jj|j|jdz|jd}Wd|jXWntk rX}|jsd}qt|jdtr|jd}qtjjt|jddtjjt|jdtrOdnd}nGd}ddl}tjjd|jtjj|j nX|jd||S( Ni(tutils child process calling self.run()is is Process %s: s process exiting with exitcode %d(!RGRMtsetRt itertoolsR*RtsyststdintclosetopenRtdevnulltOSErrort ValueErrorRt_finalizer_registrytcleart_run_after_forkerstinfoR,t_exit_functiont SystemExitR(R:RHtstderrtwriteRtflusht tracebackR't print_exc(R$RMR@teR`((s//usr/lib64/python2.7/multiprocessing/process.pyt _bootstrapsB         ! %  N((R!t __module__t__doc__R R.R+R,R1R2R"R9tpropertyR'tsetterR<R>R@RBRARLRc(((s//usr/lib64/python2.7/multiprocessing/process.pyRVs&       R?cBseZdZRS(cCs>ddlm}|js+tdntt|ffS(Ni(R-sJPickling an AuthenticationString object is disallowed for security reasons(R/R-tthread_is_spawningt TypeErrorR?tbytes(R$R-((s//usr/lib64/python2.7/multiprocessing/process.pyt __reduce__s   (R!RdRk(((s//usr/lib64/python2.7/multiprocessing/process.pyR?st _MainProcesscBseZdZRS(cCspd|_t|_d|_d|_d|_tjd|_ t |_ t t jd|_d|_dS(Nt MainProcessii ((RR7RR#R RRROR*RRNRR?RturandomRR(R$((s//usr/lib64/python2.7/multiprocessing/process.pyR+-s      (R!RdR+(((s//usr/lib64/python2.7/multiprocessing/process.pyRl+sitSIGt_(t__all__RRPtsignalROtpathtabspathtgetcwdt ORIGINAL_DIRRUR RRRtobjectRRjR?RlRRIt__dict__titemsR'tsignum(((s//usr/lib64/python2.7/multiprocessing/process.pyt#s(         util.pyo000064400000023214147207507420006264 0ustar00 rfc@sddlZddlZddlZddlZddlmZddlmZmZdddddd d d d d ddddgZ dZ dZ dZ dZ dZdZdZdaeadZdZdZdZdZddZdZejZejZd Z d!Z!iZ"ejZ#d e$fd"YZ%dd#Z&d$Z'ea(eee&eed%Z)ej*e)de$fd&YZ+dej,fd'YZ-dS((iN(t_args_from_interpreter_flags(tcurrent_processtactive_childrent sub_debugtdebugtinfot sub_warningt get_loggert log_to_stderrt get_temp_dirtregister_after_forkt is_exitingtFinalizetForkAwareThreadLocktForkAwareLocaltSUBDEBUGt SUBWARNINGiii iitmultiprocessings+[%(levelname)s/%(processName)s] %(message)scGs trtjt||ndS(N(t_loggertlogR(tmsgtargs((s,/usr/lib64/python2.7/multiprocessing/util.pyRCscGs trtjt||ndS(N(RRtDEBUG(RR((s,/usr/lib64/python2.7/multiprocessing/util.pyRGscGs trtjt||ndS(N(RRtINFO(RR((s,/usr/lib64/python2.7/multiprocessing/util.pyRKscGs trtjt||ndS(N(RRR(RR((s,/usr/lib64/python2.7/multiprocessing/util.pyROscCsddl}ddl}|jzts|jtadt_|jtd|jt dt |dr|j t |j t q|jjt dif|jjt difnWd|jXtS( s0 Returns logger used by multiprocessing iNiRRt unregister(((tloggingtatexitt _acquireLockRt getLoggert LOGGER_NAMEt propagatet addLevelNameRRthasattrRt_exit_functiontregistert _exithandlerstremovetappendt _releaseLock(RR((s,/usr/lib64/python2.7/multiprocessing/util.pyRSs     cCsjddl}t}|jt}|j}|j||j||r`|j|nta t S(sB Turn on logging and add a handler which prints to stderr iN( RRt FormattertDEFAULT_LOGGING_FORMATt StreamHandlert setFormattert addHandlertsetLeveltTruet_log_to_stderrR(tlevelRtloggert formatterthandler((s,/usr/lib64/python2.7/multiprocessing/util.pyRps     cCstjdkrwddl}ddl}|jdd}td|td|jd|gdd|t_ntjS(Nitprefixspymp-screated temp directory %sRt exitpriorityi( Rt_tempdirtNonetshutilttempfiletmkdtempRR trmtree(R7R8ttempdir((s,/usr/lib64/python2.7/multiprocessing/util.pyR s cCsqttj}|jxN|D]F\\}}}}y||Wq#tk rh}td|q#Xq#WdS(Ns after forker raised exception %s(tlistt_afterfork_registrytitemstsortt ExceptionR(R>tindextidenttfunctobjte((s,/usr/lib64/python2.7/multiprocessing/util.pyt_run_after_forkerss cCs#|ttjt||fs( RLtAttributeErrort TypeErrorR6tgetattrRMRNtstrRORQ(RSRDtx((s,/usr/lib64/python2.7/multiprocessing/util.pyt__repr__s    (N( R]t __module__t__doc__R6RVRZR[R\Rd(((s,/usr/lib64/python2.7/multiprocessing/util.pyR s   cstdkrdSdkr(d}nfd}gtjD]}||rD|^qD}|jdtxV|D]N\}}td|y |Wqytk rddl}|jqyXqyWdkrtj ndS(s Run all finalizers whose exit priority is not None and at least minpriority Finalizers with highest priority are called first; finalizers with the same priority will be called in reverse order of creation. NcSs|dddk S(Ni(R6(tp((s,/usr/lib64/python2.7/multiprocessing/util.pytscs&|dddk o%|ddkS(Ni(R6(Rg(t minpriority(s,/usr/lib64/python2.7/multiprocessing/util.pyRhstreverses calling %si( RRR6R>R?R-RR@t tracebackt print_exctclear(RitfRcR>tkeyt finalizerRk((Ris,/usr/lib64/python2.7/multiprocessing/util.pyt_run_finalizerss    +     cCstptdkS(s6 Returns true if the process is shutting down N(t_exitingR6(((s,/usr/lib64/python2.7/multiprocessing/util.pyR scCs|d|d|d|dk rx:|D]/}|jr7|d|j|jjq7q7Wx.|D] }|d|j|jqtWn|d|dS(Nsprocess shutting downs2running all "atexit" finalizers with priority >= 0is!calling terminate() for daemon %sscalling join() for process %ss)running the remaining "atexit" finalizers(R6t _daemonictnamet_popent terminatetjoin(RRRqRRRg((s,/usr/lib64/python2.7/multiprocessing/util.pyR! s      cBseZdZdZRS(cCs|jt|tjdS(N(t_resetR R (RS((s,/usr/lib64/python2.7/multiprocessing/util.pyRVKs cCs1tj|_|jj|_|jj|_dS(N(t threadingtLockt_locktacquiretrelease(RS((s,/usr/lib64/python2.7/multiprocessing/util.pyRxOs(R]ReRVRx(((s,/usr/lib64/python2.7/multiprocessing/util.pyR Js cBseZdZdZRS(cCst|ddS(NcSs |jjS(N(t__dict__Rm(RD((s,/usr/lib64/python2.7/multiprocessing/util.pyRhVs(R (RS((s,/usr/lib64/python2.7/multiprocessing/util.pyRVUscCst|dfS(N((ttype(RS((s,/usr/lib64/python2.7/multiprocessing/util.pyt __reduce__Ws(R]ReRVR(((s,/usr/lib64/python2.7/multiprocessing/util.pyRTs (.t itertoolsRJRRyt subprocessRtmultiprocessing.processRRt__all__tNOTSETRRRRRR(R6RtFalseR.RRRRRRR tWeakValueDictionaryR=tcountRGRFR RRRPtobjectR RqR RrR!R"R tlocalR(((s,/usr/lib64/python2.7/multiprocessing/util.pyt#sR                  I $   "  connection.pyo000064400000034324147207507420007452 0ustar00 rfc@sdddgZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z m Z ddl m Z mZmZmZddlmZmZdZd Zd ZejZd Zd gZeed rd Zed g7Znejd kr4dZedg7ZnedZdZdZdZ de!fdYZ"dddZ$ejd kre%dZ&nddlm'Z'e%dZ&de!fdYZ(dZ)ejd kr de!fdYZ*dZ+ndZ,dZ-d Z.d!Z/d"Z0d#Z1d$Z2d%e!fd&YZ3d'Z4d(Z5d)e"fd*YZ6d+Z7dS(,tClienttListenertPipeiN(tcurrent_processtAuthenticationError(t get_temp_dirtFinalizet sub_debugtdebug(t duplicatetclosei g4@tsha256tAF_INETtAF_UNIXtwin32tAF_PIPEcCstj|S(N(ttime(ttimeout((s2/usr/lib64/python2.7/multiprocessing/connection.pyt _init_timeoutMscCstj|kS(N(R(tt((s2/usr/lib64/python2.7/multiprocessing/connection.pyt_check_timeoutPscCsw|dkrd S|dkr5tjdddtS|dkrgtjdd tjtjfStd d S( s? Return an arbitrary free address for the given family R t localhostiR tprefixs listener-tdirRs\\.\pipe\pyc-%d-%d-sunrecognized familyN(Ri(ttempfiletmktempRtostgetpidt _mmap_countertnextt ValueError(tfamily((s2/usr/lib64/python2.7/multiprocessing/connection.pytarbitrary_addressWs    cCset|tkrdSt|tkr;|jdr;dSt|tkrQdStd|dS(s] Return the types of the address This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE' R s\\RR saddress type of %r unrecognizedN(ttypettupletstrt startswithR(taddress((s2/usr/lib64/python2.7/multiprocessing/connection.pyt address_typefs!cBsSeZdZdddddZdZdZedZedZ RS(s Returns a listener object. This is a wrapper for a bound socket which is 'listening' for connections, or for a Windows named pipe. icCs|p|rt|pt}|p-t|}|dkrQt|||_nt||||_|dk rt|t rt dn||_ dS(NRsauthkey should be a byte string( R&tdefault_familyR t PipeListenert _listenertSocketListenertNonet isinstancetbytest TypeErrort_authkey(tselfR%Rtbacklogtauthkey((s2/usr/lib64/python2.7/multiprocessing/connection.pyt__init__s  cCs?|jj}|jr;t||jt||jn|S(sz Accept a connection on the bound socket or named pipe of `self`. Returns a `Connection` object. (R)tacceptR/tdeliver_challengetanswer_challenge(R0tc((s2/usr/lib64/python2.7/multiprocessing/connection.pyR4s  cCs |jjS(sA Close the bound socket or named pipe of `self`. (R)R (R0((s2/usr/lib64/python2.7/multiprocessing/connection.pyR scCs |jjS(N(R)t_address(R0((s2/usr/lib64/python2.7/multiprocessing/connection.pytscCs |jjS(N(R)t_last_accepted(R0((s2/usr/lib64/python2.7/multiprocessing/connection.pyR9sN( t__name__t __module__t__doc__R+R3R4R tpropertyR%t last_accepted(((s2/usr/lib64/python2.7/multiprocessing/connection.pyRys  cCs|pt|}|dkr-t|}n t|}|dk rat|t ratdn|dk rt||t||n|S(s= Returns a connection to the address of a `Listener` Rsauthkey should be a byte stringN( R&t PipeClientt SocketClientR+R,R-R.R6R5(R%RR2R7((s2/usr/lib64/python2.7/multiprocessing/connection.pyRs     cCs|rtj\}}|jt|jttjtj|j}tjtj|j}|j |j n<tj \}}tj|dt }tj|dt }||fS(sL Returns pair of connection objects at either end of a pipe twritabletreadable( tsockett socketpairt setblockingtTruet_multiprocessingt ConnectionRtduptfilenoR tpipetFalse(tduplexts1ts2tc1tc2tfd1tfd2((s2/usr/lib64/python2.7/multiprocessing/connection.pyRs    (Rc CsUtd}|r;tj}tjtjB}tt}}ntj}tj}dt}}tj||tjtj Btj Bd||tj tj }tj ||dtj tjdtj }tj|tj ddytj|tj Wn/tk r }|jdtjkr!q!nXtj|d|} tj|d|} | | fS(sL Returns pair of connection objects at either end of a pipe RiiRBRCN(R RtPIPE_ACCESS_DUPLEXt GENERIC_READt GENERIC_WRITEtBUFSIZEtPIPE_ACCESS_INBOUNDtCreateNamedPipetPIPE_TYPE_MESSAGEtPIPE_READMODE_MESSAGEt PIPE_WAITtNMPWAIT_WAIT_FOREVERtNULLt CreateFilet OPEN_EXISTINGtSetNamedPipeHandleStateR+tConnectNamedPipet WindowsErrortargstERROR_PIPE_CONNECTEDRHtPipeConnection( RNR%topenmodetaccesstobsizetibsizeth1th2teRQRR((s2/usr/lib64/python2.7/multiprocessing/connection.pyRs2      $ R*cBs,eZdZddZdZdZRS(sO Representation of a socket which is bound to an address and listening icCstjtt||_yb|jjtjtjd|jjt|jj||jj ||jj |_ Wn$tj k r|jj nX||_d|_|dkrt|tjd|fdd|_n d|_dS(NiR Ret exitpriorityi(RDtgetattrt_sockett setsockoptt SOL_SOCKETt SO_REUSEADDRRFRGtbindtlistent getsocknameR8terrorR t_familyR+R:RRtunlinkt_unlink(R0R%RR1((s2/usr/lib64/python2.7/multiprocessing/connection.pyR3s     $cCsx\tr^y|jj\}|_Wn2tjk rY}|jdtjkr[q[qXPqW|j tt |j }t j |}|j|S(Ni(RGRqR4R:RDRxReterrnotEINTRRFR RKRHRIR (R0tsRntfdtconn((s2/usr/lib64/python2.7/multiprocessing/connection.pyR4s    cCs-|jj|jdk r)|jndS(N(RqR R{R+(R0((s2/usr/lib64/python2.7/multiprocessing/connection.pyR #s (R;R<R=R3R4R (((s2/usr/lib64/python2.7/multiprocessing/connection.pyR*s  cCst|}tjtt|}|jtt}xsy|j|WnXtjk r}|jdt j kst |rt d|nt jdq=XPq=t|j}tj|}|j|S(sO Return a connection object connected to the socket given by `address` isfailed to connect to address %sg{Gz?(R&RDRpRFRGRtconnectRxReR|t ECONNREFUSEDRRRtsleepR RKRHRIR (R%RR~RRnRR((s2/usr/lib64/python2.7/multiprocessing/connection.pyRA)s$   "  R(cBs2eZdZddZdZedZRS(s0 Representation of a named pipe c Cs||_tj|tjtjtjBtjBtjtttj tj }|g|_ d|_ td|jt|tjd|j |jfdd|_dS(Ns listener created with address=%rReRoi(R8RRZRUR[R\R]tPIPE_UNLIMITED_INSTANCESRXR^R_t _handle_queueR+R:RRR(t_finalize_pipe_listenerR (R0R%R1thandle((s2/usr/lib64/python2.7/multiprocessing/connection.pyR3Ns       c Cstj|jtjtjtjBtjBtjtttj tj }|j j ||j j d}ytj|tj Wn8tk r}|jdtjtjfkrqnXtj|S(Ni(RRZR8RUR[R\R]RRXR^R_RtappendtpopRcRdReRft ERROR_NO_DATARHRg(R0t newhandleRRn((s2/usr/lib64/python2.7/multiprocessing/connection.pyR4as    cCs,td|x|D]}t|qWdS(Ns closing listener with address=%r(RR (tqueueR%R((s2/usr/lib64/python2.7/multiprocessing/connection.pyRus  N(R;R<R=R+R3R4t staticmethodR(((s2/usr/lib64/python2.7/multiprocessing/connection.pyR(Js  cCst}xyHtj|dtj|tjtjBdtjtjdtj}WnDtk r}|j dtj tj fkst |rqq XPq tj |tjddtj|S(sU Return a connection object connected to the pipe given by `address` iiN(RRt WaitNamedPipeR`RVRWR_RaRdRetERROR_SEM_TIMEOUTtERROR_PIPE_BUSYRRbR\R+RHRg(R%RthRn((s2/usr/lib64/python2.7/multiprocessing/connection.pyR@{s  " is #CHALLENGE#s #WELCOME#s #FAILURE#cCsddl}t|tS(Ni(thashlibRptHMAC_DIGEST_NAME(R((s2/usr/lib64/python2.7/multiprocessing/connection.pytget_digestmod_for_hmacs cCsddl}tjt}|jt||j||tj}|j d}||kru|jt n|jt t ddS(Niisdigest received was wrong( thmacRturandomtMESSAGE_LENGTHt send_bytest CHALLENGEtnewRtdigestt recv_bytestWELCOMEtFAILURER(t connectionR2RtmessageRtresponse((s2/usr/lib64/python2.7/multiprocessing/connection.pyR5s   cCsddl}|jd}|tt}|j||tj}|j||jd}|tkrt dndS(Niisdigest sent was rejected( RRtlenRRRRRRR(RR2RRRR((s2/usr/lib64/python2.7/multiprocessing/connection.pyR6s   tConnectionWrappercBs#eZdZdZdZRS(cCsO||_||_||_x-dD]%}t||}t|||q"WdS(NRKR tpollRR(sfilenoscloseRs recv_bytess send_bytes(t_connt_dumpst_loadsRptsetattr(R0Rtdumpstloadstattrtobj((s2/usr/lib64/python2.7/multiprocessing/connection.pyR3s     cCs#|j|}|jj|dS(N(RRR(R0RR~((s2/usr/lib64/python2.7/multiprocessing/connection.pytsendscCs|jj}|j|S(N(RRR(R0R~((s2/usr/lib64/python2.7/multiprocessing/connection.pytrecvs(R;R<R3RR(((s2/usr/lib64/python2.7/multiprocessing/connection.pyRs  cCs%tj|fddddjdS(Nitutf8(t xmlrpclibRR+tencode(R((s2/usr/lib64/python2.7/multiprocessing/connection.pyt _xml_dumpsscCs%tj|jd\\}}|S(NR(RRtdecode(R~Rtmethod((s2/usr/lib64/python2.7/multiprocessing/connection.pyt _xml_loadss!t XmlListenercBseZdZRS(cCs+ddlatj|}t|ttS(Ni(RRR4RRR(R0R((s2/usr/lib64/python2.7/multiprocessing/connection.pyR4s (R;R<R4(((s2/usr/lib64/python2.7/multiprocessing/connection.pyRscOs%ddlatt||ttS(Ni(RRRRR(Retkwds((s2/usr/lib64/python2.7/multiprocessing/connection.pyt XmlClients (8t__all__RtsysRDR|RRt itertoolsRHtmultiprocessingRRtmultiprocessing.utilRRRRtmultiprocessing.forkingR R RXtCONNECTION_TIMEOUTRtcountRR'tfamiliesthasattrtplatformRRR R&tobjectRR+RRGRRR*RAR(R@RRRRRR5R6RRRRR(((s2/usr/lib64/python2.7/multiprocessing/connection.pyt#sd        "      , *. 1     pool.pyc000064400000053313147207507420006247 0ustar00 rfc@sTdgZddlZddlZddlZddlZddlZddlmZmZm Z ddl m Z m Z dZ dZdZejZdZd efd YZefed Zdefd YZd efdYZeZdefdYZdefdYZdefdYZdefdYZdS(tPooliN(tProcesst cpu_countt TimeoutError(tFinalizetdebugiiicCs t|S(N(tmap(targs((s,/usr/lib64/python2.7/multiprocessing/pool.pytmapstar@stMaybeEncodingErrorcBs)eZdZdZdZdZRS(sVWraps possible unpickleable errors, so they can be safely sent through the socket.cCsAt||_t||_tt|j|j|jdS(N(treprtexctvaluetsuperR t__init__(tselfR R ((s,/usr/lib64/python2.7/multiprocessing/pool.pyRKscCsd|j|jfS(Ns(Error sending result: '%s'. Reason: '%s'(R R (R((s,/usr/lib64/python2.7/multiprocessing/pool.pyt__str__Ps cCsdt|S(Ns(tstr(R((s,/usr/lib64/python2.7/multiprocessing/pool.pyt__repr__Ts(t__name__t __module__t__doc__RRR(((s,/usr/lib64/python2.7/multiprocessing/pool.pyR Gs  c Cs|dks0t|tkr*|dks0t|j}|j}t|drn|jj|j jn|dk r||nd}x/|dks|r||kry |}Wn"t t fk rt dPnX|dkrt dPn|\} } } } } yt | | | f}Wntk rI}t|f}nXy|| | |fWnMtk r}t||d}t d||| | t|ffnX|d7}qWt d|dS(Nit_writers)worker got EOFError or IOError -- exitingsworker got sentinel -- exitingis0Possible encoding error while sending result: %ssworker exiting after %d tasks(tNonettypetinttAssertionErrortputtgetthasattrRtcloset_readertEOFErrortIOErrorRtTruet ExceptiontFalseR (tinqueuetoutqueuet initializertinitargstmaxtasksRRt completedttasktjobtitfuncRtkwdstresulttetwrapped((s,/usr/lib64/python2.7/multiprocessing/pool.pytworkerXs@0     !    cBseZdZeZdddddZdZdZdZdZ didZ ddZ dd Z dd Z didd Zddd Zed ZedZedZedZdZdZdZdZedZedZRS(sH Class which supports an async version of the `apply()` builtin c Cs)|jtj|_i|_t|_||_||_||_|dkr|y t }Wq|t k rxd}q|Xn|dkrt dn|dk rt |d rtdn||_g|_|jtjdtjd|f|_t|j_t|j_|jjtjdtjd|j|j|j|jf|_t|j_t|j_|jjtjdtjd|j|j|jf|_ t|j _t|j _|j jt!||j"d|j|j#|j|j|j|j|j |jfdd|_$dS( Nis&Number of processes must be at least 1t__call__sinitializer must be a callablettargetRt exitpriorityi(%t _setup_queuestQueuet _taskqueuet_cachetRUNt_statet_maxtasksperchildt _initializert _initargsRRtNotImplementedErrort ValueErrorRt TypeErrort _processest_poolt_repopulate_poolt threadingtThreadRt_handle_workerst_worker_handlerR"tdaemontstartt _handle_taskst _quick_putt _outqueuet _task_handlert_handle_resultst _quick_gett_result_handlerRt_terminate_poolt_inqueuet _terminate(Rt processesR'R(tmaxtasksperchild((s,/usr/lib64/python2.7/multiprocessing/pool.pyRsV                     $          cCswt}xjttt|jD]M}|j|}|jdk r"td||jt }|j|=q"q"W|S(sCleanup after any worker processes which have exited due to reaching their specified lifetime. Returns True if any workers were cleaned up. scleaning up worker %dN( R$treversedtrangetlenRDtexitcodeRRtjoinR"(RtcleanedR-R3((s,/usr/lib64/python2.7/multiprocessing/pool.pyt_join_exited_workerss"  c Csxt|jt|jD]}|jdtd|j|j|j|j |j f}|jj ||j j dd|_ t|_|jtdqWdS(sBring the number of pool processes up to the specified number, for use after reaping workers which have exited. R5RRt PoolWorkers added workerN(RYRCRZRDRR3RTRNR>R?R=tappendtnametreplaceR"RJRKR(RR-tw((s,/usr/lib64/python2.7/multiprocessing/pool.pyREs#   cCs|jr|jndS(sEClean up any exited workers and start replacements for them. N(R^RE(R((s,/usr/lib64/python2.7/multiprocessing/pool.pyt_maintain_pools cCsPddlm}||_||_|jjj|_|jjj|_ dS(Ni(t SimpleQueue( tqueuesReRTRNRtsendRMRtrecvRQ(RRe((s,/usr/lib64/python2.7/multiprocessing/pool.pyR7s   cCs.|jtkst|j|||jS(s1 Equivalent of `apply()` builtin (R<R;Rt apply_asyncR(RR.RR/((s,/usr/lib64/python2.7/multiprocessing/pool.pytapplyscCs.|jtkst|j|||jS(s/ Equivalent of `map()` builtin (R<R;Rt map_asyncR(RR.titerablet chunksize((s,/usr/lib64/python2.7/multiprocessing/pool.pyRsics|jtkst|dkrft|j|jjfdt|DjfS|dksxtt j ||}t|j|jjfdt|DjfdDSdS(sZ Equivalent of `itertools.imap()` -- can be MUCH slower than `Pool.map()` ic3s0|]&\}}j||fifVqdS(N(t_job(t.0R-tx(R.R0(s,/usr/lib64/python2.7/multiprocessing/pool.pys sc3s0|]&\}}j|t|fifVqdS(N(RnR(RoR-Rp(R0(s,/usr/lib64/python2.7/multiprocessing/pool.pys scss"|]}|D] }|Vq qdS(N((Rotchunktitem((s,/usr/lib64/python2.7/multiprocessing/pool.pys sN( R<R;Rt IMapIteratorR:R9Rt enumeratet _set_lengthRt _get_tasks(RR.RlRmt task_batches((R.R0s,/usr/lib64/python2.7/multiprocessing/pool.pytimaps cs|jtkst|dkrft|j|jjfdt|DjfS|dksxtt j ||}t|j|jjfdt|DjfdDSdS(sK Like `imap()` method but ordering of results is arbitrary ic3s0|]&\}}j||fifVqdS(N(Rn(RoR-Rp(R.R0(s,/usr/lib64/python2.7/multiprocessing/pool.pys sc3s0|]&\}}j|t|fifVqdS(N(RnR(RoR-Rp(R0(s,/usr/lib64/python2.7/multiprocessing/pool.pys scss"|]}|D] }|Vq qdS(N((RoRqRr((s,/usr/lib64/python2.7/multiprocessing/pool.pys sN( R<R;RtIMapUnorderedIteratorR:R9RRtRuRRv(RR.RlRmRw((R.R0s,/usr/lib64/python2.7/multiprocessing/pool.pytimap_unordereds cCsV|jtkstt|j|}|jj|jd|||fgdf|S(s> Asynchronous equivalent of `apply()` builtin N( R<R;Rt ApplyResultR:R9RRnR(RR.RR/tcallbackR0((s,/usr/lib64/python2.7/multiprocessing/pool.pyRi s+cs|jtkstt|ds3t|}n|dkr}tt|t|jd\}}|r}|d7}q}nt|dkrd}nt j |||}t |j |t|||j jfdt|DdfS(s< Asynchronous equivalent of `map()` builtin t__len__iiic3s0|]&\}}j|t|fifVqdS(N(RnR(RoR-Rp(R0(s,/usr/lib64/python2.7/multiprocessing/pool.pys :sN(R<R;RRtlistRtdivmodRZRDRRvt MapResultR:R9RRt(RR.RlRmR|textraRw((R0s,/usr/lib64/python2.7/multiprocessing/pool.pyRk)s ( cCsotj}xB|jtks6|jrP|jtkrP|jtjdqW|j j dt ddS(Ng?sworker handler exiting( RFtcurrent_threadR<R;R:t TERMINATERdttimetsleepR9RRR(tpooltthread((s,/usr/lib64/python2.7/multiprocessing/pool.pyRH>s  * c Cs1tj}xt|jdD]\}}d}xt|D]P\}}|jratdPny||Wq>tk rtdPq>Xq>W|rtd||dqqPqWtdy@td|j dtdx|D]} |dqWWntk r"td nXtd dS( Nis'task handler found thread._state != RUNscould not put task on queuesdoing set_length()istask handler got sentinels/task handler sending sentinel to result handlers(task handler sending sentinel to workerss/task handler got IOError when sending sentinelsstask handler exiting( RFRtiterRRRtR<RR!R( t taskqueueRR&RRttaskseqt set_lengthR-R+tp((s,/usr/lib64/python2.7/multiprocessing/pool.pyRLKs6             cCstj}xy |}Wn"ttfk r@tddSX|jrm|jtks_ttdPn|dkrtdPn|\}}}y||j ||Wqt k rqXqx|ri|jtkriy |}Wn"ttfk rtddSX|dkr+tdqn|\}}}y||j ||Wqt k reqXqWt |drtdy5x.t dD] }|j jsPn|qWWqttfk rqXntdt||jdS( Ns.result handler got EOFError/IOError -- exitings,result handler found thread._state=TERMINATEsresult handler got sentinels&result handler ignoring extra sentinelRs"ensuring that outqueue is not fulli s7result handler exiting: len(cache)=%s, thread._state=%s(RFRR!R RR<RRRt_settKeyErrorRRYRtpollRZ(R&RtcacheRR+R,R-tobj((s,/usr/lib64/python2.7/multiprocessing/pool.pyRPrsX              ccsCt|}x0ttj||}|s1dS||fVqdS(N(Rttuplet itertoolstislice(R.tittsizeRp((s,/usr/lib64/python2.7/multiprocessing/pool.pyRvs  cCstddS(Ns:pool objects cannot be passed between processes or pickled(R@(R((s,/usr/lib64/python2.7/multiprocessing/pool.pyt __reduce__scCs5td|jtkr1t|_t|j_ndS(Ns closing pool(RR<R;tCLOSERI(R((s,/usr/lib64/python2.7/multiprocessing/pool.pyRs  cCs-tdt|_t|j_|jdS(Nsterminating pool(RRR<RIRU(R((s,/usr/lib64/python2.7/multiprocessing/pool.pyt terminates   cCsntd|jttfks%t|jj|jj|jjx|j D]}|jqVWdS(Ns joining pool( RR<RRRRIR\RORRRD(RR((s,/usr/lib64/python2.7/multiprocessing/pool.pyR\s    cCsWtd|jjx9|jrR|jjrR|jjtjdqWdS(Ns7removing tasks from inqueue until task handler finishedi( Rt_rlocktacquiretis_aliveRRRhRR(R%t task_handlerR((s,/usr/lib64/python2.7/multiprocessing/pool.pyt_help_stuff_finishs    c Cstdt|_t|_td|j||t||jsct|dksctt|_|jdtdt j |k r|j dn|rt |ddrtdx-|D]"} | j dkr| jqqWntdt j |k r$|j dntd t j |k rP|j dn|rt |ddrtd x;|D]0} | jrztd | j| j qzqzWndS( Nsfinalizing pools&helping task handler/workers to finishisjoining worker handlerg}Ô%ITRsterminating workerssjoining task handlersjoining result handlersjoining pool workersscleaning up worker %d(RRR<RRZRRRRRFRR\RR[Rtpid( tclsRR%R&Rtworker_handlerRtresult_handlerRR((s,/usr/lib64/python2.7/multiprocessing/pool.pyRSs8    $          N((((RRRRRRR^RERdR7RjRRxRzRiRkt staticmethodRHRLRPRvRRRR\Rt classmethodRS(((s,/usr/lib64/python2.7/multiprocessing/pool.pyRs0  9         ':     R{cBsDeZdZdZdZddZddZdZRS(cCsStjtj|_tj|_||_t|_ ||_ |||js RscBs>eZdZdZddZeZdZdZRS(cCsktjtj|_tj|_||_tj |_ d|_ d|_ i|_|||j#s,        *.-Ipool.py000064400000077375147207507420006122 0ustar00# # Module providing the `Pool` class for managing a process pool # # multiprocessing/pool.py # # Copyright (c) 2006-2008, R Oudkerk # Licensed to PSF under a Contributor Agreement. # __all__ = ['Pool', 'ThreadPool'] # # Imports # import collections import itertools import os import queue import threading import time import traceback import warnings from queue import Empty # If threading is available then ThreadPool should be provided. Therefore # we avoid top-level imports which are liable to fail on some systems. from . import util from . import get_context, TimeoutError from .connection import wait # # Constants representing the state of a pool # INIT = "INIT" RUN = "RUN" CLOSE = "CLOSE" TERMINATE = "TERMINATE" # # Miscellaneous # job_counter = itertools.count() def mapstar(args): return list(map(*args)) def starmapstar(args): return list(itertools.starmap(args[0], args[1])) # # Hack to embed stringification of remote traceback in local traceback # class RemoteTraceback(Exception): def __init__(self, tb): self.tb = tb def __str__(self): return self.tb class ExceptionWithTraceback: def __init__(self, exc, tb): tb = traceback.format_exception(type(exc), exc, tb) tb = ''.join(tb) self.exc = exc self.tb = '\n"""\n%s"""' % tb def __reduce__(self): return rebuild_exc, (self.exc, self.tb) def rebuild_exc(exc, tb): exc.__cause__ = RemoteTraceback(tb) return exc # # Code run by worker processes # class MaybeEncodingError(Exception): """Wraps possible unpickleable errors, so they can be safely sent through the socket.""" def __init__(self, exc, value): self.exc = repr(exc) self.value = repr(value) super(MaybeEncodingError, self).__init__(self.exc, self.value) def __str__(self): return "Error sending result: '%s'. Reason: '%s'" % (self.value, self.exc) def __repr__(self): return "<%s: %s>" % (self.__class__.__name__, self) def worker(inqueue, outqueue, initializer=None, initargs=(), maxtasks=None, wrap_exception=False): if (maxtasks is not None) and not (isinstance(maxtasks, int) and maxtasks >= 1): raise AssertionError("Maxtasks {!r} is not valid".format(maxtasks)) put = outqueue.put get = inqueue.get if hasattr(inqueue, '_writer'): inqueue._writer.close() outqueue._reader.close() if initializer is not None: initializer(*initargs) completed = 0 while maxtasks is None or (maxtasks and completed < maxtasks): try: task = get() except (EOFError, OSError): util.debug('worker got EOFError or OSError -- exiting') break if task is None: util.debug('worker got sentinel -- exiting') break job, i, func, args, kwds = task try: result = (True, func(*args, **kwds)) except Exception as e: if wrap_exception and func is not _helper_reraises_exception: e = ExceptionWithTraceback(e, e.__traceback__) result = (False, e) try: put((job, i, result)) except Exception as e: wrapped = MaybeEncodingError(e, result[1]) util.debug("Possible encoding error while sending result: %s" % ( wrapped)) put((job, i, (False, wrapped))) task = job = result = func = args = kwds = None completed += 1 util.debug('worker exiting after %d tasks' % completed) def _helper_reraises_exception(ex): 'Pickle-able helper function for use by _guarded_task_generation.' raise ex # # Class representing a process pool # class _PoolCache(dict): """ Class that implements a cache for the Pool class that will notify the pool management threads every time the cache is emptied. The notification is done by the use of a queue that is provided when instantiating the cache. """ def __init__(self, /, *args, notifier=None, **kwds): self.notifier = notifier super().__init__(*args, **kwds) def __delitem__(self, item): super().__delitem__(item) # Notify that the cache is empty. This is important because the # pool keeps maintaining workers until the cache gets drained. This # eliminates a race condition in which a task is finished after the # the pool's _handle_workers method has enter another iteration of the # loop. In this situation, the only event that can wake up the pool # is the cache to be emptied (no more tasks available). if not self: self.notifier.put(None) class Pool(object): ''' Class which supports an async version of applying functions to arguments. ''' _wrap_exception = True @staticmethod def Process(ctx, *args, **kwds): return ctx.Process(*args, **kwds) def __init__(self, processes=None, initializer=None, initargs=(), maxtasksperchild=None, context=None): # Attributes initialized early to make sure that they exist in # __del__() if __init__() raises an exception self._pool = [] self._state = INIT self._ctx = context or get_context() self._setup_queues() self._taskqueue = queue.SimpleQueue() # The _change_notifier queue exist to wake up self._handle_workers() # when the cache (self._cache) is empty or when there is a change in # the _state variable of the thread that runs _handle_workers. self._change_notifier = self._ctx.SimpleQueue() self._cache = _PoolCache(notifier=self._change_notifier) self._maxtasksperchild = maxtasksperchild self._initializer = initializer self._initargs = initargs if processes is None: processes = os.cpu_count() or 1 if processes < 1: raise ValueError("Number of processes must be at least 1") if initializer is not None and not callable(initializer): raise TypeError('initializer must be a callable') self._processes = processes try: self._repopulate_pool() except Exception: for p in self._pool: if p.exitcode is None: p.terminate() for p in self._pool: p.join() raise sentinels = self._get_sentinels() self._worker_handler = threading.Thread( target=Pool._handle_workers, args=(self._cache, self._taskqueue, self._ctx, self.Process, self._processes, self._pool, self._inqueue, self._outqueue, self._initializer, self._initargs, self._maxtasksperchild, self._wrap_exception, sentinels, self._change_notifier) ) self._worker_handler.daemon = True self._worker_handler._state = RUN self._worker_handler.start() self._task_handler = threading.Thread( target=Pool._handle_tasks, args=(self._taskqueue, self._quick_put, self._outqueue, self._pool, self._cache) ) self._task_handler.daemon = True self._task_handler._state = RUN self._task_handler.start() self._result_handler = threading.Thread( target=Pool._handle_results, args=(self._outqueue, self._quick_get, self._cache) ) self._result_handler.daemon = True self._result_handler._state = RUN self._result_handler.start() self._terminate = util.Finalize( self, self._terminate_pool, args=(self._taskqueue, self._inqueue, self._outqueue, self._pool, self._change_notifier, self._worker_handler, self._task_handler, self._result_handler, self._cache), exitpriority=15 ) self._state = RUN # Copy globals as function locals to make sure that they are available # during Python shutdown when the Pool is destroyed. def __del__(self, _warn=warnings.warn, RUN=RUN): if self._state == RUN: _warn(f"unclosed running multiprocessing pool {self!r}", ResourceWarning, source=self) if getattr(self, '_change_notifier', None) is not None: self._change_notifier.put(None) def __repr__(self): cls = self.__class__ return (f'<{cls.__module__}.{cls.__qualname__} ' f'state={self._state} ' f'pool_size={len(self._pool)}>') def _get_sentinels(self): task_queue_sentinels = [self._outqueue._reader] self_notifier_sentinels = [self._change_notifier._reader] return [*task_queue_sentinels, *self_notifier_sentinels] @staticmethod def _get_worker_sentinels(workers): return [worker.sentinel for worker in workers if hasattr(worker, "sentinel")] @staticmethod def _join_exited_workers(pool): """Cleanup after any worker processes which have exited due to reaching their specified lifetime. Returns True if any workers were cleaned up. """ cleaned = False for i in reversed(range(len(pool))): worker = pool[i] if worker.exitcode is not None: # worker exited util.debug('cleaning up worker %d' % i) worker.join() cleaned = True del pool[i] return cleaned def _repopulate_pool(self): return self._repopulate_pool_static(self._ctx, self.Process, self._processes, self._pool, self._inqueue, self._outqueue, self._initializer, self._initargs, self._maxtasksperchild, self._wrap_exception) @staticmethod def _repopulate_pool_static(ctx, Process, processes, pool, inqueue, outqueue, initializer, initargs, maxtasksperchild, wrap_exception): """Bring the number of pool processes up to the specified number, for use after reaping workers which have exited. """ for i in range(processes - len(pool)): w = Process(ctx, target=worker, args=(inqueue, outqueue, initializer, initargs, maxtasksperchild, wrap_exception)) w.name = w.name.replace('Process', 'PoolWorker') w.daemon = True w.start() pool.append(w) util.debug('added worker') @staticmethod def _maintain_pool(ctx, Process, processes, pool, inqueue, outqueue, initializer, initargs, maxtasksperchild, wrap_exception): """Clean up any exited workers and start replacements for them. """ if Pool._join_exited_workers(pool): Pool._repopulate_pool_static(ctx, Process, processes, pool, inqueue, outqueue, initializer, initargs, maxtasksperchild, wrap_exception) def _setup_queues(self): self._inqueue = self._ctx.SimpleQueue() self._outqueue = self._ctx.SimpleQueue() self._quick_put = self._inqueue._writer.send self._quick_get = self._outqueue._reader.recv def _check_running(self): if self._state != RUN: raise ValueError("Pool not running") def apply(self, func, args=(), kwds={}): ''' Equivalent of `func(*args, **kwds)`. Pool must be running. ''' return self.apply_async(func, args, kwds).get() def map(self, func, iterable, chunksize=None): ''' Apply `func` to each element in `iterable`, collecting the results in a list that is returned. ''' return self._map_async(func, iterable, mapstar, chunksize).get() def starmap(self, func, iterable, chunksize=None): ''' Like `map()` method but the elements of the `iterable` are expected to be iterables as well and will be unpacked as arguments. Hence `func` and (a, b) becomes func(a, b). ''' return self._map_async(func, iterable, starmapstar, chunksize).get() def starmap_async(self, func, iterable, chunksize=None, callback=None, error_callback=None): ''' Asynchronous version of `starmap()` method. ''' return self._map_async(func, iterable, starmapstar, chunksize, callback, error_callback) def _guarded_task_generation(self, result_job, func, iterable): '''Provides a generator of tasks for imap and imap_unordered with appropriate handling for iterables which throw exceptions during iteration.''' try: i = -1 for i, x in enumerate(iterable): yield (result_job, i, func, (x,), {}) except Exception as e: yield (result_job, i+1, _helper_reraises_exception, (e,), {}) def imap(self, func, iterable, chunksize=1): ''' Equivalent of `map()` -- can be MUCH slower than `Pool.map()`. ''' self._check_running() if chunksize == 1: result = IMapIterator(self) self._taskqueue.put( ( self._guarded_task_generation(result._job, func, iterable), result._set_length )) return result else: if chunksize < 1: raise ValueError( "Chunksize must be 1+, not {0:n}".format( chunksize)) task_batches = Pool._get_tasks(func, iterable, chunksize) result = IMapIterator(self) self._taskqueue.put( ( self._guarded_task_generation(result._job, mapstar, task_batches), result._set_length )) return (item for chunk in result for item in chunk) def imap_unordered(self, func, iterable, chunksize=1): ''' Like `imap()` method but ordering of results is arbitrary. ''' self._check_running() if chunksize == 1: result = IMapUnorderedIterator(self) self._taskqueue.put( ( self._guarded_task_generation(result._job, func, iterable), result._set_length )) return result else: if chunksize < 1: raise ValueError( "Chunksize must be 1+, not {0!r}".format(chunksize)) task_batches = Pool._get_tasks(func, iterable, chunksize) result = IMapUnorderedIterator(self) self._taskqueue.put( ( self._guarded_task_generation(result._job, mapstar, task_batches), result._set_length )) return (item for chunk in result for item in chunk) def apply_async(self, func, args=(), kwds={}, callback=None, error_callback=None): ''' Asynchronous version of `apply()` method. ''' self._check_running() result = ApplyResult(self, callback, error_callback) self._taskqueue.put(([(result._job, 0, func, args, kwds)], None)) return result def map_async(self, func, iterable, chunksize=None, callback=None, error_callback=None): ''' Asynchronous version of `map()` method. ''' return self._map_async(func, iterable, mapstar, chunksize, callback, error_callback) def _map_async(self, func, iterable, mapper, chunksize=None, callback=None, error_callback=None): ''' Helper function to implement map, starmap and their async counterparts. ''' self._check_running() if not hasattr(iterable, '__len__'): iterable = list(iterable) if chunksize is None: chunksize, extra = divmod(len(iterable), len(self._pool) * 4) if extra: chunksize += 1 if len(iterable) == 0: chunksize = 0 task_batches = Pool._get_tasks(func, iterable, chunksize) result = MapResult(self, chunksize, len(iterable), callback, error_callback=error_callback) self._taskqueue.put( ( self._guarded_task_generation(result._job, mapper, task_batches), None ) ) return result @staticmethod def _wait_for_updates(sentinels, change_notifier, timeout=None): wait(sentinels, timeout=timeout) while not change_notifier.empty(): change_notifier.get() @classmethod def _handle_workers(cls, cache, taskqueue, ctx, Process, processes, pool, inqueue, outqueue, initializer, initargs, maxtasksperchild, wrap_exception, sentinels, change_notifier): thread = threading.current_thread() # Keep maintaining workers until the cache gets drained, unless the pool # is terminated. while thread._state == RUN or (cache and thread._state != TERMINATE): cls._maintain_pool(ctx, Process, processes, pool, inqueue, outqueue, initializer, initargs, maxtasksperchild, wrap_exception) current_sentinels = [*cls._get_worker_sentinels(pool), *sentinels] cls._wait_for_updates(current_sentinels, change_notifier) # send sentinel to stop workers taskqueue.put(None) util.debug('worker handler exiting') @staticmethod def _handle_tasks(taskqueue, put, outqueue, pool, cache): thread = threading.current_thread() for taskseq, set_length in iter(taskqueue.get, None): task = None try: # iterating taskseq cannot fail for task in taskseq: if thread._state != RUN: util.debug('task handler found thread._state != RUN') break try: put(task) except Exception as e: job, idx = task[:2] try: cache[job]._set(idx, (False, e)) except KeyError: pass else: if set_length: util.debug('doing set_length()') idx = task[1] if task else -1 set_length(idx + 1) continue break finally: task = taskseq = job = None else: util.debug('task handler got sentinel') try: # tell result handler to finish when cache is empty util.debug('task handler sending sentinel to result handler') outqueue.put(None) # tell workers there is no more work util.debug('task handler sending sentinel to workers') for p in pool: put(None) except OSError: util.debug('task handler got OSError when sending sentinels') util.debug('task handler exiting') @staticmethod def _handle_results(outqueue, get, cache): thread = threading.current_thread() while 1: try: task = get() except (OSError, EOFError): util.debug('result handler got EOFError/OSError -- exiting') return if thread._state != RUN: assert thread._state == TERMINATE, "Thread not in TERMINATE" util.debug('result handler found thread._state=TERMINATE') break if task is None: util.debug('result handler got sentinel') break job, i, obj = task try: cache[job]._set(i, obj) except KeyError: pass task = job = obj = None while cache and thread._state != TERMINATE: try: task = get() except (OSError, EOFError): util.debug('result handler got EOFError/OSError -- exiting') return if task is None: util.debug('result handler ignoring extra sentinel') continue job, i, obj = task try: cache[job]._set(i, obj) except KeyError: pass task = job = obj = None if hasattr(outqueue, '_reader'): util.debug('ensuring that outqueue is not full') # If we don't make room available in outqueue then # attempts to add the sentinel (None) to outqueue may # block. There is guaranteed to be no more than 2 sentinels. try: for i in range(10): if not outqueue._reader.poll(): break get() except (OSError, EOFError): pass util.debug('result handler exiting: len(cache)=%s, thread._state=%s', len(cache), thread._state) @staticmethod def _get_tasks(func, it, size): it = iter(it) while 1: x = tuple(itertools.islice(it, size)) if not x: return yield (func, x) def __reduce__(self): raise NotImplementedError( 'pool objects cannot be passed between processes or pickled' ) def close(self): util.debug('closing pool') if self._state == RUN: self._state = CLOSE self._worker_handler._state = CLOSE self._change_notifier.put(None) def terminate(self): util.debug('terminating pool') self._state = TERMINATE self._terminate() def join(self): util.debug('joining pool') if self._state == RUN: raise ValueError("Pool is still running") elif self._state not in (CLOSE, TERMINATE): raise ValueError("In unknown state") self._worker_handler.join() self._task_handler.join() self._result_handler.join() for p in self._pool: p.join() @staticmethod def _help_stuff_finish(inqueue, task_handler, size): # task_handler may be blocked trying to put items on inqueue util.debug('removing tasks from inqueue until task handler finished') inqueue._rlock.acquire() while task_handler.is_alive() and inqueue._reader.poll(): inqueue._reader.recv() time.sleep(0) @classmethod def _terminate_pool(cls, taskqueue, inqueue, outqueue, pool, change_notifier, worker_handler, task_handler, result_handler, cache): # this is guaranteed to only be called once util.debug('finalizing pool') # Notify that the worker_handler state has been changed so the # _handle_workers loop can be unblocked (and exited) in order to # send the finalization sentinel all the workers. worker_handler._state = TERMINATE change_notifier.put(None) task_handler._state = TERMINATE util.debug('helping task handler/workers to finish') cls._help_stuff_finish(inqueue, task_handler, len(pool)) if (not result_handler.is_alive()) and (len(cache) != 0): raise AssertionError( "Cannot have cache with result_hander not alive") result_handler._state = TERMINATE change_notifier.put(None) outqueue.put(None) # sentinel # We must wait for the worker handler to exit before terminating # workers because we don't want workers to be restarted behind our back. util.debug('joining worker handler') if threading.current_thread() is not worker_handler: worker_handler.join() # Terminate workers which haven't already finished. if pool and hasattr(pool[0], 'terminate'): util.debug('terminating workers') for p in pool: if p.exitcode is None: p.terminate() util.debug('joining task handler') if threading.current_thread() is not task_handler: task_handler.join() util.debug('joining result handler') if threading.current_thread() is not result_handler: result_handler.join() if pool and hasattr(pool[0], 'terminate'): util.debug('joining pool workers') for p in pool: if p.is_alive(): # worker has not yet exited util.debug('cleaning up worker %d' % p.pid) p.join() def __enter__(self): self._check_running() return self def __exit__(self, exc_type, exc_val, exc_tb): self.terminate() # # Class whose instances are returned by `Pool.apply_async()` # class ApplyResult(object): def __init__(self, pool, callback, error_callback): self._pool = pool self._event = threading.Event() self._job = next(job_counter) self._cache = pool._cache self._callback = callback self._error_callback = error_callback self._cache[self._job] = self def ready(self): return self._event.is_set() def successful(self): if not self.ready(): raise ValueError("{0!r} not ready".format(self)) return self._success def wait(self, timeout=None): self._event.wait(timeout) def get(self, timeout=None): self.wait(timeout) if not self.ready(): raise TimeoutError if self._success: return self._value else: raise self._value def _set(self, i, obj): self._success, self._value = obj if self._callback and self._success: self._callback(self._value) if self._error_callback and not self._success: self._error_callback(self._value) self._event.set() del self._cache[self._job] self._pool = None AsyncResult = ApplyResult # create alias -- see #17805 # # Class whose instances are returned by `Pool.map_async()` # class MapResult(ApplyResult): def __init__(self, pool, chunksize, length, callback, error_callback): ApplyResult.__init__(self, pool, callback, error_callback=error_callback) self._success = True self._value = [None] * length self._chunksize = chunksize if chunksize <= 0: self._number_left = 0 self._event.set() del self._cache[self._job] else: self._number_left = length//chunksize + bool(length % chunksize) def _set(self, i, success_result): self._number_left -= 1 success, result = success_result if success and self._success: self._value[i*self._chunksize:(i+1)*self._chunksize] = result if self._number_left == 0: if self._callback: self._callback(self._value) del self._cache[self._job] self._event.set() self._pool = None else: if not success and self._success: # only store first exception self._success = False self._value = result if self._number_left == 0: # only consider the result ready once all jobs are done if self._error_callback: self._error_callback(self._value) del self._cache[self._job] self._event.set() self._pool = None # # Class whose instances are returned by `Pool.imap()` # class IMapIterator(object): def __init__(self, pool): self._pool = pool self._cond = threading.Condition(threading.Lock()) self._job = next(job_counter) self._cache = pool._cache self._items = collections.deque() self._index = 0 self._length = None self._unsorted = {} self._cache[self._job] = self def __iter__(self): return self def next(self, timeout=None): with self._cond: try: item = self._items.popleft() except IndexError: if self._index == self._length: self._pool = None raise StopIteration from None self._cond.wait(timeout) try: item = self._items.popleft() except IndexError: if self._index == self._length: self._pool = None raise StopIteration from None raise TimeoutError from None success, value = item if success: return value raise value __next__ = next # XXX def _set(self, i, obj): with self._cond: if self._index == i: self._items.append(obj) self._index += 1 while self._index in self._unsorted: obj = self._unsorted.pop(self._index) self._items.append(obj) self._index += 1 self._cond.notify() else: self._unsorted[i] = obj if self._index == self._length: del self._cache[self._job] self._pool = None def _set_length(self, length): with self._cond: self._length = length if self._index == self._length: self._cond.notify() del self._cache[self._job] self._pool = None # # Class whose instances are returned by `Pool.imap_unordered()` # class IMapUnorderedIterator(IMapIterator): def _set(self, i, obj): with self._cond: self._items.append(obj) self._index += 1 self._cond.notify() if self._index == self._length: del self._cache[self._job] self._pool = None # # # class ThreadPool(Pool): _wrap_exception = False @staticmethod def Process(ctx, *args, **kwds): from .dummy import Process return Process(*args, **kwds) def __init__(self, processes=None, initializer=None, initargs=()): Pool.__init__(self, processes, initializer, initargs) def _setup_queues(self): self._inqueue = queue.SimpleQueue() self._outqueue = queue.SimpleQueue() self._quick_put = self._inqueue.put self._quick_get = self._outqueue.get def _get_sentinels(self): return [self._change_notifier._reader] @staticmethod def _get_worker_sentinels(workers): return [] @staticmethod def _help_stuff_finish(inqueue, task_handler, size): # drain inqueue, and put sentinels at its head to make workers finish try: while True: inqueue.get(block=False) except queue.Empty: pass for i in range(size): inqueue.put(None) def _wait_for_updates(self, sentinels, change_notifier, timeout): time.sleep(timeout) synchronize.py000064400000026532147207507420007511 0ustar00# # Module implementing synchronization primitives # # multiprocessing/synchronize.py # # Copyright (c) 2006-2008, R Oudkerk # Licensed to PSF under a Contributor Agreement. # __all__ = [ 'Lock', 'RLock', 'Semaphore', 'BoundedSemaphore', 'Condition', 'Event' ] import threading import sys import tempfile import _multiprocessing import time from . import context from . import process from . import util # Try to import the mp.synchronize module cleanly, if it fails # raise ImportError for platforms lacking a working sem_open implementation. # See issue 3770 try: from _multiprocessing import SemLock, sem_unlink except (ImportError): raise ImportError("This platform lacks a functioning sem_open" + " implementation, therefore, the required" + " synchronization primitives needed will not" + " function, see issue 3770.") # # Constants # RECURSIVE_MUTEX, SEMAPHORE = list(range(2)) SEM_VALUE_MAX = _multiprocessing.SemLock.SEM_VALUE_MAX # # Base class for semaphores and mutexes; wraps `_multiprocessing.SemLock` # class SemLock(object): _rand = tempfile._RandomNameSequence() def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() name = ctx.get_start_method() unlink_now = sys.platform == 'win32' or name == 'fork' for i in range(100): try: sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) except FileExistsError: pass else: break else: raise FileExistsError('cannot find name for semaphore') util.debug('created semlock with handle %s' % sl.handle) self._make_methods() if sys.platform != 'win32': def _after_fork(obj): obj._semlock._after_fork() util.register_after_fork(self, _after_fork) if self._semlock.name is not None: # We only get here if we are on Unix with forking # disabled. When the object is garbage collected or the # process shuts down we unlink the semaphore name from .resource_tracker import register register(self._semlock.name, "semaphore") util.Finalize(self, SemLock._cleanup, (self._semlock.name,), exitpriority=0) @staticmethod def _cleanup(name): from .resource_tracker import unregister sem_unlink(name) unregister(name, "semaphore") def _make_methods(self): self.acquire = self._semlock.acquire self.release = self._semlock.release def __enter__(self): return self._semlock.__enter__() def __exit__(self, *args): return self._semlock.__exit__(*args) def __getstate__(self): context.assert_spawning(self) sl = self._semlock if sys.platform == 'win32': h = context.get_spawning_popen().duplicate_for_child(sl.handle) else: h = sl.handle return (h, sl.kind, sl.maxvalue, sl.name) def __setstate__(self, state): self._semlock = _multiprocessing.SemLock._rebuild(*state) util.debug('recreated blocker with handle %r' % state[0]) self._make_methods() @staticmethod def _make_name(): return '%s-%s' % (process.current_process()._config['semprefix'], next(SemLock._rand)) # # Semaphore # class Semaphore(SemLock): def __init__(self, value=1, *, ctx): SemLock.__init__(self, SEMAPHORE, value, SEM_VALUE_MAX, ctx=ctx) def get_value(self): return self._semlock._get_value() def __repr__(self): try: value = self._semlock._get_value() except Exception: value = 'unknown' return '<%s(value=%s)>' % (self.__class__.__name__, value) # # Bounded semaphore # class BoundedSemaphore(Semaphore): def __init__(self, value=1, *, ctx): SemLock.__init__(self, SEMAPHORE, value, value, ctx=ctx) def __repr__(self): try: value = self._semlock._get_value() except Exception: value = 'unknown' return '<%s(value=%s, maxvalue=%s)>' % \ (self.__class__.__name__, value, self._semlock.maxvalue) # # Non-recursive lock # class Lock(SemLock): def __init__(self, *, ctx): SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) def __repr__(self): try: if self._semlock._is_mine(): name = process.current_process().name if threading.current_thread().name != 'MainThread': name += '|' + threading.current_thread().name elif self._semlock._get_value() == 1: name = 'None' elif self._semlock._count() > 0: name = 'SomeOtherThread' else: name = 'SomeOtherProcess' except Exception: name = 'unknown' return '<%s(owner=%s)>' % (self.__class__.__name__, name) # # Recursive lock # class RLock(SemLock): def __init__(self, *, ctx): SemLock.__init__(self, RECURSIVE_MUTEX, 1, 1, ctx=ctx) def __repr__(self): try: if self._semlock._is_mine(): name = process.current_process().name if threading.current_thread().name != 'MainThread': name += '|' + threading.current_thread().name count = self._semlock._count() elif self._semlock._get_value() == 1: name, count = 'None', 0 elif self._semlock._count() > 0: name, count = 'SomeOtherThread', 'nonzero' else: name, count = 'SomeOtherProcess', 'nonzero' except Exception: name, count = 'unknown', 'unknown' return '<%s(%s, %s)>' % (self.__class__.__name__, name, count) # # Condition variable # class Condition(object): def __init__(self, lock=None, *, ctx): self._lock = lock or ctx.RLock() self._sleeping_count = ctx.Semaphore(0) self._woken_count = ctx.Semaphore(0) self._wait_semaphore = ctx.Semaphore(0) self._make_methods() def __getstate__(self): context.assert_spawning(self) return (self._lock, self._sleeping_count, self._woken_count, self._wait_semaphore) def __setstate__(self, state): (self._lock, self._sleeping_count, self._woken_count, self._wait_semaphore) = state self._make_methods() def __enter__(self): return self._lock.__enter__() def __exit__(self, *args): return self._lock.__exit__(*args) def _make_methods(self): self.acquire = self._lock.acquire self.release = self._lock.release def __repr__(self): try: num_waiters = (self._sleeping_count._semlock._get_value() - self._woken_count._semlock._get_value()) except Exception: num_waiters = 'unknown' return '<%s(%s, %s)>' % (self.__class__.__name__, self._lock, num_waiters) def wait(self, timeout=None): assert self._lock._semlock._is_mine(), \ 'must acquire() condition before using wait()' # indicate that this thread is going to sleep self._sleeping_count.release() # release lock count = self._lock._semlock._count() for i in range(count): self._lock.release() try: # wait for notification or timeout return self._wait_semaphore.acquire(True, timeout) finally: # indicate that this thread has woken self._woken_count.release() # reacquire lock for i in range(count): self._lock.acquire() def notify(self, n=1): assert self._lock._semlock._is_mine(), 'lock is not owned' assert not self._wait_semaphore.acquire( False), ('notify: Should not have been able to acquire ' + '_wait_semaphore') # to take account of timeouts since last notify*() we subtract # woken_count from sleeping_count and rezero woken_count while self._woken_count.acquire(False): res = self._sleeping_count.acquire(False) assert res, ('notify: Bug in sleeping_count.acquire' + '- res should not be False') sleepers = 0 while sleepers < n and self._sleeping_count.acquire(False): self._wait_semaphore.release() # wake up one sleeper sleepers += 1 if sleepers: for i in range(sleepers): self._woken_count.acquire() # wait for a sleeper to wake # rezero wait_semaphore in case some timeouts just happened while self._wait_semaphore.acquire(False): pass def notify_all(self): self.notify(n=sys.maxsize) def wait_for(self, predicate, timeout=None): result = predicate() if result: return result if timeout is not None: endtime = time.monotonic() + timeout else: endtime = None waittime = None while not result: if endtime is not None: waittime = endtime - time.monotonic() if waittime <= 0: break self.wait(waittime) result = predicate() return result # # Event # class Event(object): def __init__(self, *, ctx): self._cond = ctx.Condition(ctx.Lock()) self._flag = ctx.Semaphore(0) def is_set(self): with self._cond: if self._flag.acquire(False): self._flag.release() return True return False def set(self): with self._cond: self._flag.acquire(False) self._flag.release() self._cond.notify_all() def clear(self): with self._cond: self._flag.acquire(False) def wait(self, timeout=None): with self._cond: if self._flag.acquire(False): self._flag.release() else: self._cond.wait(timeout) if self._flag.acquire(False): self._flag.release() return True return False # # Barrier # class Barrier(threading.Barrier): def __init__(self, parties, action=None, timeout=None, *, ctx): import struct from .heap import BufferWrapper wrapper = BufferWrapper(struct.calcsize('i') * 2) cond = ctx.Condition() self.__setstate__((parties, action, timeout, cond, wrapper)) self._state = 0 self._count = 0 def __setstate__(self, state): (self._parties, self._action, self._timeout, self._cond, self._wrapper) = state self._array = self._wrapper.create_memoryview().cast('i') def __getstate__(self): return (self._parties, self._action, self._timeout, self._cond, self._wrapper) @property def _state(self): return self._array[0] @_state.setter def _state(self, value): self._array[0] = value @property def _count(self): return self._array[1] @_count.setter def _count(self, value): self._array[1] = value queues.pyc000064400000026513147207507420006607 0ustar00 rfc@s8dddgZddlZddlZddlZddlZddlZddlZddlZddlm Z m Z ddl Z ddl m Z ddlmZmZmZmZddlmZmZmZmZdd lmZdefd YZeZdefd YZdefd YZdS( tQueuet SimpleQueuet JoinableQueueiN(tEmptytFull(tPipe(tLocktBoundedSemaphoret Semaphoret Condition(tdebugtinfotFinalizetregister_after_fork(tassert_spawningcBseZddZdZdZdZeddZeddZ dZ dZ d Z d Z d Zd Zd ZdZdZedZedZedZRS(icCs|dkrtjj}n||_tdt\|_|_t|_ t j |_ t jdkrud|_n t|_t||_|jt jdkrt|tjndS(Nitduplextwin32(t_multiprocessingtSemLockt SEM_VALUE_MAXt_maxsizeRtFalset_readert_writerRt_rlocktostgetpidt_opidtsystplatformtNonet_wlockRt_semt _after_forkR R(tselftmaxsize((s./usr/lib64/python2.7/multiprocessing/queues.pyt__init__:s      cCs8t||j|j|j|j|j|j|jfS(N(RRRRRRR R(R"((s./usr/lib64/python2.7/multiprocessing/queues.pyt __getstate__Ls cCs>|\|_|_|_|_|_|_|_|jdS(N(RRRRRR RR!(R"tstate((s./usr/lib64/python2.7/multiprocessing/queues.pyt __setstate__Qs0cCstdtjtj|_tj|_d|_ d|_ t |_ t |_ d|_|jj|_|jj|_|jj|_dS(NsQueue._after_fork()(R t threadingR Rt _notemptyt collectionstdequet_bufferRt_threadt _jointhreadRt_joincancelledt_closedt_closeRtsendt_sendRtrecvt_recvtpollt_poll(R"((s./usr/lib64/python2.7/multiprocessing/queues.pyR!Vs      cCs|j st|jj||s.tn|jjz=|jdkrZ|jn|j j ||jj Wd|jj XdS(N( R0tAssertionErrorR tacquireRR)R-Rt _start_threadR,tappendtnotifytrelease(R"tobjtblockttimeout((s./usr/lib64/python2.7/multiprocessing/queues.pytputcs   cCs|rT|dkrT|jjz!|j}|jj|SWd|jjXn|rmtj|}n|jj||stnzt|r|tj}|dks|j| rtqn|jstn|j}|jj|SWd|jjXdS(Ni( RRR9R5R R=ttimeRR7(R"R?R@trestdeadline((s./usr/lib64/python2.7/multiprocessing/queues.pytgetqs,         cCs|j|jjjS(N(RR t_semlockt _get_value(R"((s./usr/lib64/python2.7/multiprocessing/queues.pytqsizescCs |j S(N(R7(R"((s./usr/lib64/python2.7/multiprocessing/queues.pytemptyscCs|jjjS(N(R RFt_is_zero(R"((s./usr/lib64/python2.7/multiprocessing/queues.pytfullscCs |jtS(N(RER(R"((s./usr/lib64/python2.7/multiprocessing/queues.pyt get_nowaitscCs|j|tS(N(RAR(R"R>((s./usr/lib64/python2.7/multiprocessing/queues.pyt put_nowaitscCs0t|_|jj|jr,|jndS(N(tTrueR0RtcloseR1(R"((s./usr/lib64/python2.7/multiprocessing/queues.pyROs   cCs3td|jst|jr/|jndS(NsQueue.join_thread()(R R0R8R.(R"((s./usr/lib64/python2.7/multiprocessing/queues.pyt join_threads  cCs<tdt|_y|jjWntk r7nXdS(NsQueue.cancel_join_thread()(R RNR/R.tcanceltAttributeError(R"((s./usr/lib64/python2.7/multiprocessing/queues.pytcancel_join_threads    c Cstd|jjtjdtjd|j|j|j|j |j j fdd|_ t |j _td|j jtd|jst|j tjtj|j gdd |_nt|tj|j|jgdd |_dS( NsQueue._start_thread()ttargettargstnametQueueFeederThreadsdoing self._thread.start()s... done self._thread.start()t exitpriorityii (R R,tclearR(tThreadRt_feedR)R3RRROR-RNtdaemontstartR/R t_finalize_jointweakreftrefR.t_finalize_closeR1(R"((s./usr/lib64/python2.7/multiprocessing/queues.pyR:s(            cCsDtd|}|dk r6|jtdn tddS(Nsjoining queue threads... queue thread joineds... queue thread already dead(R Rtjoin(ttwrtthread((s./usr/lib64/python2.7/multiprocessing/queues.pyR^s      cCsAtd|jz|jt|jWd|jXdS(Nstelling queue thread to quit(R R9R;t _sentinelR<R=(tbuffertnotempty((s./usr/lib64/python2.7/multiprocessing/queues.pyRas    cCstdddlm}|j}|j}|j}|j} t} tj dkrh|j} |j} nd} yx|z|s|nWd|Xymxf| } | | krtd|dS| dkr|| q| z|| Wd| XqWqtt k rqtXqtWnZt k r{}y3|rMt d|nddl}|jWq|t k rwq|XnXdS(Ns$starting thread to feed data to pipei(t is_exitingRs%feeder thread got sentinel -- exitingserror in queue thread: %si(R tutilRhR9R=twaittpopleftReRRRt IndexErrort ExceptionR t tracebackt print_exc(RfRgR2t writelockRORhtnacquiretnreleasetnwaittbpoplefttsentineltwacquiretwreleaseR>teRn((s./usr/lib64/python2.7/multiprocessing/queues.pyR[sR                 N(t__name__t __module__R$R%R'R!RNRRARERHRIRKRLRMRORPRSR:t staticmethodR^RaR[(((s./usr/lib64/python2.7/multiprocessing/queues.pyR8s$               cBsGeZddZdZdZeddZdZdZ RS(icCs/tj||td|_t|_dS(Ni(RR$Rt_unfinished_tasksR t_cond(R"R#((s./usr/lib64/python2.7/multiprocessing/queues.pyR$)scCstj||j|jfS(N(RR%R}R|(R"((s./usr/lib64/python2.7/multiprocessing/queues.pyR%.scCs.tj||d |d\|_|_dS(Ni(RR'R}R|(R"R&((s./usr/lib64/python2.7/multiprocessing/queues.pyR'1scCs|j st|jj||s.tn|jj|jjzJ|jdkrg|j n|j j ||j j |jjWd|jj |jj XdS(N(R0R8R R9RR)R}R-RR:R,R;R|R=R<(R"R>R?R@((s./usr/lib64/python2.7/multiprocessing/queues.pyRA5s      cCsi|jjzG|jjts1tdn|jjjrS|jjnWd|jjXdS(Ns!task_done() called too many times( R}R9R|Rt ValueErrorRFRJt notify_allR=(R"((s./usr/lib64/python2.7/multiprocessing/queues.pyt task_doneFs cCsH|jjz&|jjjs2|jjnWd|jjXdS(N(R}R9R|RFRJRjR=(R"((s./usr/lib64/python2.7/multiprocessing/queues.pyRbPs  N( RyRzR$R%R'RNRRARRb(((s./usr/lib64/python2.7/multiprocessing/queues.pyR's     cBs5eZdZdZdZdZdZRS(cCs\tdt\|_|_t|_tjdkrBd|_ n t|_ |j dS(NRR( RRRRRRRRRRt _make_methods(R"((s./usr/lib64/python2.7/multiprocessing/queues.pyR$^s    cCs|jj S(N(RR6(R"((s./usr/lib64/python2.7/multiprocessing/queues.pyRIgscCs&t||j|j|j|jfS(N(RRRRR(R"((s./usr/lib64/python2.7/multiprocessing/queues.pyR%js cCs,|\|_|_|_|_|jdS(N(RRRRR(R"R&((s./usr/lib64/python2.7/multiprocessing/queues.pyR'nscs|jj|jj|jjfd}||_|jdkrd|jj |_ nC|jj |jj|jjfd}||_ dS(Ncs!z SWdXdS(N(((tracquireR4trrelease(s./usr/lib64/python2.7/multiprocessing/queues.pyREus cs$z|SWdXdS(N((R>(R2RvRw(s./usr/lib64/python2.7/multiprocessing/queues.pyRAs( RR4RR9R=RERRRR2RA(R"RERA((RR4RR2RvRws./usr/lib64/python2.7/multiprocessing/queues.pyRrs   (RyRzR$RIR%R'R(((s./usr/lib64/python2.7/multiprocessing/queues.pyR\s    (t__all__RRR(R*RBtatexitR_RRRRtmultiprocessingRtmultiprocessing.synchronizeRRRR tmultiprocessing.utilR R R R tmultiprocessing.forkingRtobjectReRR(((s./usr/lib64/python2.7/multiprocessing/queues.pyt#s"        "" 5queues.py000064400000026652147207507420006450 0ustar00# # Module implementing queues # # multiprocessing/queues.py # # Copyright (c) 2006-2008, R Oudkerk # Licensed to PSF under a Contributor Agreement. # __all__ = ['Queue', 'SimpleQueue', 'JoinableQueue'] import sys import os import threading import collections import time import weakref import errno from queue import Empty, Full import _multiprocessing from . import connection from . import context _ForkingPickler = context.reduction.ForkingPickler from .util import debug, info, Finalize, register_after_fork, is_exiting # # Queue type using a pipe, buffer and thread # class Queue(object): def __init__(self, maxsize=0, *, ctx): if maxsize <= 0: # Can raise ImportError (see issues #3770 and #23400) from .synchronize import SEM_VALUE_MAX as maxsize self._maxsize = maxsize self._reader, self._writer = connection.Pipe(duplex=False) self._rlock = ctx.Lock() self._opid = os.getpid() if sys.platform == 'win32': self._wlock = None else: self._wlock = ctx.Lock() self._sem = ctx.BoundedSemaphore(maxsize) # For use by concurrent.futures self._ignore_epipe = False self._after_fork() if sys.platform != 'win32': register_after_fork(self, Queue._after_fork) def __getstate__(self): context.assert_spawning(self) return (self._ignore_epipe, self._maxsize, self._reader, self._writer, self._rlock, self._wlock, self._sem, self._opid) def __setstate__(self, state): (self._ignore_epipe, self._maxsize, self._reader, self._writer, self._rlock, self._wlock, self._sem, self._opid) = state self._after_fork() def _after_fork(self): debug('Queue._after_fork()') self._notempty = threading.Condition(threading.Lock()) self._buffer = collections.deque() self._thread = None self._jointhread = None self._joincancelled = False self._closed = False self._close = None self._send_bytes = self._writer.send_bytes self._recv_bytes = self._reader.recv_bytes self._poll = self._reader.poll def put(self, obj, block=True, timeout=None): if self._closed: raise ValueError(f"Queue {self!r} is closed") if not self._sem.acquire(block, timeout): raise Full with self._notempty: if self._thread is None: self._start_thread() self._buffer.append(obj) self._notempty.notify() def get(self, block=True, timeout=None): if self._closed: raise ValueError(f"Queue {self!r} is closed") if block and timeout is None: with self._rlock: res = self._recv_bytes() self._sem.release() else: if block: deadline = time.monotonic() + timeout if not self._rlock.acquire(block, timeout): raise Empty try: if block: timeout = deadline - time.monotonic() if not self._poll(timeout): raise Empty elif not self._poll(): raise Empty res = self._recv_bytes() self._sem.release() finally: self._rlock.release() # unserialize the data after having released the lock return _ForkingPickler.loads(res) def qsize(self): # Raises NotImplementedError on Mac OSX because of broken sem_getvalue() return self._maxsize - self._sem._semlock._get_value() def empty(self): return not self._poll() def full(self): return self._sem._semlock._is_zero() def get_nowait(self): return self.get(False) def put_nowait(self, obj): return self.put(obj, False) def close(self): self._closed = True try: self._reader.close() finally: close = self._close if close: self._close = None close() def join_thread(self): debug('Queue.join_thread()') assert self._closed, "Queue {0!r} not closed".format(self) if self._jointhread: self._jointhread() def cancel_join_thread(self): debug('Queue.cancel_join_thread()') self._joincancelled = True try: self._jointhread.cancel() except AttributeError: pass def _start_thread(self): debug('Queue._start_thread()') # Start thread which transfers data from buffer to pipe self._buffer.clear() self._thread = threading.Thread( target=Queue._feed, args=(self._buffer, self._notempty, self._send_bytes, self._wlock, self._writer.close, self._ignore_epipe, self._on_queue_feeder_error, self._sem), name='QueueFeederThread' ) self._thread.daemon = True debug('doing self._thread.start()') self._thread.start() debug('... done self._thread.start()') if not self._joincancelled: self._jointhread = Finalize( self._thread, Queue._finalize_join, [weakref.ref(self._thread)], exitpriority=-5 ) # Send sentinel to the thread queue object when garbage collected self._close = Finalize( self, Queue._finalize_close, [self._buffer, self._notempty], exitpriority=10 ) @staticmethod def _finalize_join(twr): debug('joining queue thread') thread = twr() if thread is not None: thread.join() debug('... queue thread joined') else: debug('... queue thread already dead') @staticmethod def _finalize_close(buffer, notempty): debug('telling queue thread to quit') with notempty: buffer.append(_sentinel) notempty.notify() @staticmethod def _feed(buffer, notempty, send_bytes, writelock, close, ignore_epipe, onerror, queue_sem): debug('starting thread to feed data to pipe') nacquire = notempty.acquire nrelease = notempty.release nwait = notempty.wait bpopleft = buffer.popleft sentinel = _sentinel if sys.platform != 'win32': wacquire = writelock.acquire wrelease = writelock.release else: wacquire = None while 1: try: nacquire() try: if not buffer: nwait() finally: nrelease() try: while 1: obj = bpopleft() if obj is sentinel: debug('feeder thread got sentinel -- exiting') close() return # serialize the data before acquiring the lock obj = _ForkingPickler.dumps(obj) if wacquire is None: send_bytes(obj) else: wacquire() try: send_bytes(obj) finally: wrelease() except IndexError: pass except Exception as e: if ignore_epipe and getattr(e, 'errno', 0) == errno.EPIPE: return # Since this runs in a daemon thread the resources it uses # may be become unusable while the process is cleaning up. # We ignore errors which happen after the process has # started to cleanup. if is_exiting(): info('error in queue thread: %s', e) return else: # Since the object has not been sent in the queue, we need # to decrease the size of the queue. The error acts as # if the object had been silently removed from the queue # and this step is necessary to have a properly working # queue. queue_sem.release() onerror(e, obj) @staticmethod def _on_queue_feeder_error(e, obj): """ Private API hook called when feeding data in the background thread raises an exception. For overriding by concurrent.futures. """ import traceback traceback.print_exc() _sentinel = object() # # A queue type which also supports join() and task_done() methods # # Note that if you do not call task_done() for each finished task then # eventually the counter's semaphore may overflow causing Bad Things # to happen. # class JoinableQueue(Queue): def __init__(self, maxsize=0, *, ctx): Queue.__init__(self, maxsize, ctx=ctx) self._unfinished_tasks = ctx.Semaphore(0) self._cond = ctx.Condition() def __getstate__(self): return Queue.__getstate__(self) + (self._cond, self._unfinished_tasks) def __setstate__(self, state): Queue.__setstate__(self, state[:-2]) self._cond, self._unfinished_tasks = state[-2:] def put(self, obj, block=True, timeout=None): if self._closed: raise ValueError(f"Queue {self!r} is closed") if not self._sem.acquire(block, timeout): raise Full with self._notempty, self._cond: if self._thread is None: self._start_thread() self._buffer.append(obj) self._unfinished_tasks.release() self._notempty.notify() def task_done(self): with self._cond: if not self._unfinished_tasks.acquire(False): raise ValueError('task_done() called too many times') if self._unfinished_tasks._semlock._is_zero(): self._cond.notify_all() def join(self): with self._cond: if not self._unfinished_tasks._semlock._is_zero(): self._cond.wait() # # Simplified Queue type -- really just a locked pipe # class SimpleQueue(object): def __init__(self, *, ctx): self._reader, self._writer = connection.Pipe(duplex=False) self._rlock = ctx.Lock() self._poll = self._reader.poll if sys.platform == 'win32': self._wlock = None else: self._wlock = ctx.Lock() def empty(self): return not self._poll() def __getstate__(self): context.assert_spawning(self) return (self._reader, self._writer, self._rlock, self._wlock) def __setstate__(self, state): (self._reader, self._writer, self._rlock, self._wlock) = state self._poll = self._reader.poll def get(self): with self._rlock: res = self._reader.recv_bytes() # unserialize the data after having released the lock return _ForkingPickler.loads(res) def put(self, obj): # serialize the data before acquiring the lock obj = _ForkingPickler.dumps(obj) if self._wlock is None: # writes to a message oriented win32 pipe are atomic self._writer.send_bytes(obj) else: with self._wlock: self._writer.send_bytes(obj) heap.py000064400000026552147207507420006055 0ustar00# # Module which supports allocation of memory from an mmap # # multiprocessing/heap.py # # Copyright (c) 2006-2008, R Oudkerk # Licensed to PSF under a Contributor Agreement. # import bisect from collections import defaultdict import mmap import os import sys import tempfile import threading from .context import reduction, assert_spawning from . import util __all__ = ['BufferWrapper'] # # Inheritable class which wraps an mmap, and from which blocks can be allocated # if sys.platform == 'win32': import _winapi class Arena(object): """ A shared memory area backed by anonymous memory (Windows). """ _rand = tempfile._RandomNameSequence() def __init__(self, size): self.size = size for i in range(100): name = 'pym-%d-%s' % (os.getpid(), next(self._rand)) buf = mmap.mmap(-1, size, tagname=name) if _winapi.GetLastError() == 0: break # We have reopened a preexisting mmap. buf.close() else: raise FileExistsError('Cannot find name for new mmap') self.name = name self.buffer = buf self._state = (self.size, self.name) def __getstate__(self): assert_spawning(self) return self._state def __setstate__(self, state): self.size, self.name = self._state = state # Reopen existing mmap self.buffer = mmap.mmap(-1, self.size, tagname=self.name) # XXX Temporarily preventing buildbot failures while determining # XXX the correct long-term fix. See issue 23060 #assert _winapi.GetLastError() == _winapi.ERROR_ALREADY_EXISTS else: class Arena(object): """ A shared memory area backed by a temporary file (POSIX). """ if sys.platform == 'linux': _dir_candidates = ['/dev/shm'] else: _dir_candidates = [] def __init__(self, size, fd=-1): self.size = size self.fd = fd if fd == -1: # Arena is created anew (if fd != -1, it means we're coming # from rebuild_arena() below) self.fd, name = tempfile.mkstemp( prefix='pym-%d-'%os.getpid(), dir=self._choose_dir(size)) os.unlink(name) util.Finalize(self, os.close, (self.fd,)) os.ftruncate(self.fd, size) self.buffer = mmap.mmap(self.fd, self.size) def _choose_dir(self, size): # Choose a non-storage backed directory if possible, # to improve performance for d in self._dir_candidates: st = os.statvfs(d) if st.f_bavail * st.f_frsize >= size: # enough free space? return d return util.get_temp_dir() def reduce_arena(a): if a.fd == -1: raise ValueError('Arena is unpicklable because ' 'forking was enabled when it was created') return rebuild_arena, (a.size, reduction.DupFd(a.fd)) def rebuild_arena(size, dupfd): return Arena(size, dupfd.detach()) reduction.register(Arena, reduce_arena) # # Class allowing allocation of chunks of memory from arenas # class Heap(object): # Minimum malloc() alignment _alignment = 8 _DISCARD_FREE_SPACE_LARGER_THAN = 4 * 1024 ** 2 # 4 MB _DOUBLE_ARENA_SIZE_UNTIL = 4 * 1024 ** 2 def __init__(self, size=mmap.PAGESIZE): self._lastpid = os.getpid() self._lock = threading.Lock() # Current arena allocation size self._size = size # A sorted list of available block sizes in arenas self._lengths = [] # Free block management: # - map each block size to a list of `(Arena, start, stop)` blocks self._len_to_seq = {} # - map `(Arena, start)` tuple to the `(Arena, start, stop)` block # starting at that offset self._start_to_block = {} # - map `(Arena, stop)` tuple to the `(Arena, start, stop)` block # ending at that offset self._stop_to_block = {} # Map arenas to their `(Arena, start, stop)` blocks in use self._allocated_blocks = defaultdict(set) self._arenas = [] # List of pending blocks to free - see comment in free() below self._pending_free_blocks = [] # Statistics self._n_mallocs = 0 self._n_frees = 0 @staticmethod def _roundup(n, alignment): # alignment must be a power of 2 mask = alignment - 1 return (n + mask) & ~mask def _new_arena(self, size): # Create a new arena with at least the given *size* length = self._roundup(max(self._size, size), mmap.PAGESIZE) # We carve larger and larger arenas, for efficiency, until we # reach a large-ish size (roughly L3 cache-sized) if self._size < self._DOUBLE_ARENA_SIZE_UNTIL: self._size *= 2 util.info('allocating a new mmap of length %d', length) arena = Arena(length) self._arenas.append(arena) return (arena, 0, length) def _discard_arena(self, arena): # Possibly delete the given (unused) arena length = arena.size # Reusing an existing arena is faster than creating a new one, so # we only reclaim space if it's large enough. if length < self._DISCARD_FREE_SPACE_LARGER_THAN: return blocks = self._allocated_blocks.pop(arena) assert not blocks del self._start_to_block[(arena, 0)] del self._stop_to_block[(arena, length)] self._arenas.remove(arena) seq = self._len_to_seq[length] seq.remove((arena, 0, length)) if not seq: del self._len_to_seq[length] self._lengths.remove(length) def _malloc(self, size): # returns a large enough block -- it might be much larger i = bisect.bisect_left(self._lengths, size) if i == len(self._lengths): return self._new_arena(size) else: length = self._lengths[i] seq = self._len_to_seq[length] block = seq.pop() if not seq: del self._len_to_seq[length], self._lengths[i] (arena, start, stop) = block del self._start_to_block[(arena, start)] del self._stop_to_block[(arena, stop)] return block def _add_free_block(self, block): # make block available and try to merge with its neighbours in the arena (arena, start, stop) = block try: prev_block = self._stop_to_block[(arena, start)] except KeyError: pass else: start, _ = self._absorb(prev_block) try: next_block = self._start_to_block[(arena, stop)] except KeyError: pass else: _, stop = self._absorb(next_block) block = (arena, start, stop) length = stop - start try: self._len_to_seq[length].append(block) except KeyError: self._len_to_seq[length] = [block] bisect.insort(self._lengths, length) self._start_to_block[(arena, start)] = block self._stop_to_block[(arena, stop)] = block def _absorb(self, block): # deregister this block so it can be merged with a neighbour (arena, start, stop) = block del self._start_to_block[(arena, start)] del self._stop_to_block[(arena, stop)] length = stop - start seq = self._len_to_seq[length] seq.remove(block) if not seq: del self._len_to_seq[length] self._lengths.remove(length) return start, stop def _remove_allocated_block(self, block): arena, start, stop = block blocks = self._allocated_blocks[arena] blocks.remove((start, stop)) if not blocks: # Arena is entirely free, discard it from this process self._discard_arena(arena) def _free_pending_blocks(self): # Free all the blocks in the pending list - called with the lock held. while True: try: block = self._pending_free_blocks.pop() except IndexError: break self._add_free_block(block) self._remove_allocated_block(block) def free(self, block): # free a block returned by malloc() # Since free() can be called asynchronously by the GC, it could happen # that it's called while self._lock is held: in that case, # self._lock.acquire() would deadlock (issue #12352). To avoid that, a # trylock is used instead, and if the lock can't be acquired # immediately, the block is added to a list of blocks to be freed # synchronously sometimes later from malloc() or free(), by calling # _free_pending_blocks() (appending and retrieving from a list is not # strictly thread-safe but under CPython it's atomic thanks to the GIL). if os.getpid() != self._lastpid: raise ValueError( "My pid ({0:n}) is not last pid {1:n}".format( os.getpid(),self._lastpid)) if not self._lock.acquire(False): # can't acquire the lock right now, add the block to the list of # pending blocks to free self._pending_free_blocks.append(block) else: # we hold the lock try: self._n_frees += 1 self._free_pending_blocks() self._add_free_block(block) self._remove_allocated_block(block) finally: self._lock.release() def malloc(self, size): # return a block of right size (possibly rounded up) if size < 0: raise ValueError("Size {0:n} out of range".format(size)) if sys.maxsize <= size: raise OverflowError("Size {0:n} too large".format(size)) if os.getpid() != self._lastpid: self.__init__() # reinitialize after fork with self._lock: self._n_mallocs += 1 # allow pending blocks to be marked available self._free_pending_blocks() size = self._roundup(max(size, 1), self._alignment) (arena, start, stop) = self._malloc(size) real_stop = start + size if real_stop < stop: # if the returned block is larger than necessary, mark # the remainder available self._add_free_block((arena, real_stop, stop)) self._allocated_blocks[arena].add((start, real_stop)) return (arena, start, real_stop) # # Class wrapping a block allocated out of a Heap -- can be inherited by child process # class BufferWrapper(object): _heap = Heap() def __init__(self, size): if size < 0: raise ValueError("Size {0:n} out of range".format(size)) if sys.maxsize <= size: raise OverflowError("Size {0:n} too large".format(size)) block = BufferWrapper._heap.malloc(size) self._state = (block, size) util.Finalize(self, BufferWrapper._heap.free, args=(block,)) def create_memoryview(self): (arena, start, stop), size = self._state return memoryview(arena.buffer)[start:start+size] forking.pyo000064400000033571147207507420006755 0ustar00 rfc@sddlZddlZddlZddlZddlmZmZddddddgZd Zdd l m Z de fd YZ d Z e j ee je d Ze j eejee j eejeyddlmZWnek rn#XdZdZe j eeejdkrddlZejZejZej Z de!fdYZ"n}ddl#Z#ddl$Z$ddl%Z%ddlZddl&m'Z'm(Z(m)Z)ddlm*Z*ddl m+Z+m,Z,ddZ.dZ/ejdko%e0ede1Z2ej3j4j5dZ6e'j7Ze'j8Z e6rsej9j:ej;da<n ej3a<dZ=de1dZde!fdYZ"dZ>d Z?d!Z@d"ZAd#ZBd$ZCe j e(eCe j e)eCgZDd%ZEdS(&iN(tutiltprocesstPopentassert_spawningtexitt duplicatetclosetForkingPicklercCs,tjs(tdt|jndS(NsF%s objects should only be shared between processes through inheritance(Rtthread_is_spawningt RuntimeErrorttypet__name__(tself((s//usr/lib64/python2.7/multiprocessing/forking.pyR0s (tPicklercBs&eZejjZedZRS(cs fd}||j|siitwb(R1tpipeRtmsvcrtt get_osfhandleR;Rtget_command_linetjoinRdt CreateProcessRaRtCloseR3R0t_handletget_preparation_datat_nametfdopentintRt_tlstprocess_handleR]R\( R R8trfdtwfdtrhandletcmdthpthtR3ttidt prep_datatto_child((s//usr/lib64/python2.7/multiprocessing/forking.pyR:s( -      cCsttjdddk S(NR}(RRR|R(((s//usr/lib64/python2.7/multiprocessing/forking.pyRscCst|tjjS(N(RRR|R}(Ri((s//usr/lib64/python2.7/multiprocessing/forking.pytduplicate_for_childscCs|jdkr|dkr'tj}ntdt|dd}tjt|j|}|tjkrtj |j}|t krt j }n||_qn|jS(Niig?( R0RRdtINFINITEtmaxR{tWaitForSingleObjectRwt WAIT_OBJECT_0tGetExitCodeProcesst TERMINATERQRR(R RJtmsecsRMR9((s//usr/lib64/python2.7/multiprocessing/forking.pyRO"s    cCs|jddS(NRJi(RO(R ((s//usr/lib64/python2.7/multiprocessing/forking.pyRF2scCse|jdkraytjt|jtWqatk r]|jdddkr^q^qaXndS(NRJg?( R0RRdtTerminateProcessR{RwRt WindowsErrorRO(R ((s//usr/lib64/python2.7/multiprocessing/forking.pyRT5s  N(R Rt__doc__tthreadt_localR|R:RWRRRRORFRT(((s//usr/lib64/python2.7/multiprocessing/forking.pyRs  !  cCs.t|dkr&|ddkr&tStSdS(sE Return whether commandline indicates we are forking iis--multiprocessing-forkN(tlenR;RU(targv((s//usr/lib64/python2.7/multiprocessing/forking.pyt is_forkingAs"cCs'ttjr#ttjndS(sM Run code for process object if this in not the main process N(RR,RtmainR(((s//usr/lib64/python2.7/multiprocessing/forking.pytfreeze_supportLscCstttjdtr'tdnttdtrFtjdgSd}tj}t g|d|dgSdS(sR Returns prefix of command line used for spawning a child process t _inheritings Attempt to start a new process before the current process has finished its bootstrapping phase. This probably means that you are on Windows and you have forgotten to use the proper idiom in the main module: if __name__ == '__main__': freeze_support() ... The "freeze_support()" line can be omitted if the program is not going to be frozen to produce a Windows executable.R`s--multiprocessing-forks0from multiprocessing.forking import main; main()s-cN( RRtcurrent_processRUR R,t executableRt_args_from_interpreter_flagsRa(tprogtopts((s//usr/lib64/python2.7/multiprocessing/forking.pyRsUs   cCsttjd}tj|tj}tj|d}tt j _ t |}t |t |}tt j _ |j|j}t|dS(s> Run code specifed by data received over pipe itrbN(R{R,RRqtopen_osfhandleR1tO_RDONLYRzR;RRRR[tprepareRURR6R(Ritfdt from_parenttpreparation_dataR texitcode((s//usr/lib64/python2.7/multiprocessing/forking.pyRps     c Cs.ddlm}m}td|dtjdtjd|dtjdtj j }|dk rt|j |d tmultiprocessingRRt__all__RtpickleR RR RR tsaveR"tlistRR{t__add__t functoolsR#t ImportErrorR)R$tplatformRGR7RtdupRRtobjectRRRqRdt_multiprocessingR*RXRYRZR[R\RR]RRRURRtlowertendswithRt ExitProcesst CloseHandleRRtt exec_prefixRaRcRRRsRRxRRR(((s//usr/lib64/python2.7/multiprocessing/forking.pyt#sn              G     !     N   " __init__.pyo000064400000020421147207507420007043 0ustar00 rfc@sdZddddddddd d d d d ddddddddddddddgZdZddlZddlZddlmZmZmZdd l m Z m Z d!e fd"YZ d e fd#YZd e fd$YZd%e fd&YZddlZd'Zed(Zd)Zd*Zd+Zdd,Zd-Zd.Zd/Zdd0Zd1d2Zd1d3Zd4Z d5d6Z!d5d7Z"ddd@dd8Z#d9Z$d:Z%d;Z&d<Z'ej(d=krd>Z)ed?g7ZndS(As0.70a1tProcesstcurrent_processtactive_childrentfreeze_supporttManagertPipet cpu_countt log_to_stderrt get_loggertallow_connection_picklingtBufferTooShortt TimeoutErrortLocktRLockt SemaphoretBoundedSemaphoret ConditiontEventtQueuet JoinableQueuetPooltValuetArraytRawValuetRawArraytSUBDEBUGt SUBWARNINGs"R. Oudkerk (r.m.oudkerk@gmail.com)iN(RRR(RRt ProcessErrorcBseZRS((t__name__t __module__(((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRGscBseZRS((RR(((s0/usr/lib64/python2.7/multiprocessing/__init__.pyR JscBseZRS((RR(((s0/usr/lib64/python2.7/multiprocessing/__init__.pyR MstAuthenticationErrorcBseZRS((RR(((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRPscCs'ddlm}|}|j|S(s Returns a manager associated with a running server process The managers methods such as `Lock()`, `Condition()` and `Queue()` can be used to create shared objects. i(t SyncManager(tmultiprocessing.managersRtstart(Rtm((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRZs  cCsddlm}||S(s; Returns two connection object connected by a pipe i(R(tmultiprocessing.connectionR(tduplexR((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRfscCs*tjdkrIyttjd}Wq ttfk rEd}q Xndtjksgtjdkrd}tjdkrd|}ny.tj|}t|j}WdQXWq tk rd}q Xn6ytj d }Wn tt t fk r d}nX|d kr|St d dS( s2 Returns the number of CPUs in the system twin32tNUMBER_OF_PROCESSORSitbsdtdarwins/sbin/sysctl -n hw.ncpus/usrNtSC_NPROCESSORS_ONLNiscannot determine number of cpus( tsystplatformtinttostenviront ValueErrortKeyErrortpopentreadtsysconftOSErrortAttributeErrortNotImplementedError(tnumtcommtp((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRms*      cCs?tjdkr;ttdtr;ddlm}|ndS(s Check whether this is a fake forked process in a frozen executable. If so then run code specified by commandline and exit. R%tfrozeni(RN(R*R+tgetattrtFalsetmultiprocessing.forkingR(R((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRs!cCsddlm}|S(sR Return package logger -- if it does not already exist then it is created i(R(tmultiprocessing.utilR(R((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRscCsddlm}||S(sB Turn on logging and add a handler which prints to stderr i(R(R>R(tlevelR((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRscCsddlm}dS(sO Install support for sending connections and sockets between processes i(t reductionN(tmultiprocessingR@(R@((s0/usr/lib64/python2.7/multiprocessing/__init__.pyR scCsddlm}|S(s- Returns a non-recursive lock object i(R (tmultiprocessing.synchronizeR (R ((s0/usr/lib64/python2.7/multiprocessing/__init__.pyR scCsddlm}|S(s) Returns a recursive lock object i(R (RBR (R ((s0/usr/lib64/python2.7/multiprocessing/__init__.pyR scCsddlm}||S(s$ Returns a condition object i(R(RBR(tlockR((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRsicCsddlm}||S(s$ Returns a semaphore object i(R(RBR(tvalueR((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRscCsddlm}||S(s, Returns a bounded semaphore object i(R(RBR(RDR((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRscCsddlm}|S(s! Returns an event object i(R(RBR(R((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRsicCsddlm}||S(s Returns a queue object i(R(tmultiprocessing.queuesR(tmaxsizeR((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRscCsddlm}||S(s Returns a queue object i(R(RER(RFR((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRscCs#ddlm}|||||S(s' Returns a process pool object i(R(tmultiprocessing.poolR(t processest initializertinitargstmaxtasksperchildR((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRscGsddlm}|||S(s! Returns a shared object i(R(tmultiprocessing.sharedctypesR(ttypecode_or_typetargsR((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRscCsddlm}|||S(s Returns a shared array i(R(RLR(RMtsize_or_initializerR((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRscOs ddlm}||||S(s. Returns a synchronized shared object i(R(RLR(RMRNtkwdsR((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRscKs ddlm}||||S(s- Returns a synchronized shared array i(R(RLR(RMRORPR((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRsR%cCsddlm}||dS(s Sets the path to a python.exe or pythonw.exe binary used to run child processes on Windows instead of sys.executable. Useful for people embedding Python. i(tset_executableN(R=RQ(t executableRQ((s0/usr/lib64/python2.7/multiprocessing/__init__.pyRQ sRQ((*t __version__t__all__t __author__R-R*tmultiprocessing.processRRRR>RRt ExceptionRR R Rt_multiprocessingRtTrueRRRRtNoneRR R R RRRRRRRRRRRR+RQ(((s0/usr/lib64/python2.7/multiprocessing/__init__.pyt,sN                      sharedctypes.pyo000064400000020477147207507420010015 0ustar00 rfc@sddlZddlZddlZddlmZmZddlmZmZdddddd gZ i ej d 6ej d 6ej d 6ej d 6ejd6ejd6ejd6ejd6ejd6ejd6ejd6ejd6ZdZdZdZdZdZdZddZdZdZ dZ!d Z"iZ#ej$Z%d!e&fd"YZ'd#e'fd$YZ(d%e'fd&YZ)d'e)fd(YZ*dS()iN(theaptRLock(tassert_spawningtForkingPicklertRawValuetRawArraytValuetArraytcopyt synchronizedtctutbtBthtHtitItltLtftdcCs.tj|}tj|}t||dS(N(tctypestsizeofRt BufferWrappert rebuild_ctypetNone(ttype_tsizetwrapper((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyt _new_value=scGsTtj||}t|}tjtj|dtj||j||S(s> Returns a ctypes object allocated from shared memory i(ttypecode_to_typetgetRRtmemsett addressofRt__init__(ttypecode_or_typetargsRtobj((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyRBs  % cCstj||}t|ttfrf||}t|}tjtj|dtj ||S|t |}t|}|j ||SdS(s= Returns a ctypes array allocated from shared memory iN( RR t isinstancetinttlongRRR!R"RtlenR#(R$tsize_or_initializerRR&tresult((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyRLs  %  cOs|jdd}|r1td|jnt||}|tkrP|S|tdfkrnt}nt|dst d|nt ||S(s6 Return a synchronization wrapper for a Value tlocks$unrecognized keyword argument(s): %stacquires'%r' has no method 'acquire'N( tpopRt ValueErrortkeysRtFalsetTrueRthasattrtAttributeErrorR (R$R%tkwdsR-R&((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyR\s  cKs|jdd}|r1td|jnt||}|tkrP|S|tdfkrnt}nt|dst d|nt ||S(s9 Return a synchronization wrapper for a RawArray R-s$unrecognized keyword argument(s): %sR.s'%r' has no method 'acquire'N( R/RR0R1RR2R3RR4R5R (R$R+R6R-R&((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyRls  cCs)tt|}|tj|d<|S(Ni(RttypeRtpointer(R&tnew_obj((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyR|scCst|tjrt||St|tjr]|jtjkrPt||St||St |}yt |}Wnqt k rg|j D]}|d^q}t d|D}d|j}t |tf|}t |st Synchronized(R'Rt _SimpleCDataR=Rt_type_tc_chartSynchronizedStringtSynchronizedArrayR7t class_cachetKeyErrort_fields_tdictt__name__tSynchronizedBase(R&R-tclstsclstfieldtnamesRt classname((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyR s       !cCsXt|t|tjr8t|j|j|jffStt||jdffSdS(N( RR'RRRR?t_wrappert_length_R7R(R&((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyt reduce_ctypes cCsK|dk r||}ntj|t|j|j}||_|S(N(RRtregisterRPt from_addresst get_addressRN(RRtlengthR&((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyRs    cBsPy e|SWn=ek rKi}e|fd|U||e|<||SXdS(Ni(t prop_cacheRDttemplate(R<R((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyR:s  s def get%s(self): self.acquire() try: return self._obj.%s finally: self.release() def set%s(self, value): self.acquire() try: self._obj.%s = value finally: self.release() %s = property(get%s, set%s) RHcBs8eZddZdZdZdZdZRS(cCs=||_|pt|_|jj|_|jj|_dS(N(t_objRt_lockR.trelease(tselfR&R-((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyR#s cCs t|t|j|jffS(N(RR RWRX(RZ((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyt __reduce__s cCs|jS(N(RW(RZ((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pytget_objscCs|jS(N(RX(RZ((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pytget_lockscCsdt|j|jfS(Ns<%s wrapper for %s>(R7RGRW(RZ((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyt__repr__sN(RGt __module__RR#R[R\R]R^(((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyRHs     R=cBseZedZRS(tvalue(RGR_R:R`(((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyR=sRBcBs5eZdZdZdZdZdZRS(cCs t|jS(N(R*RW(RZ((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyt__len__scCs+|jz|j|SWd|jXdS(N(R.RWRY(RZR((s4/usr/lib64/python2.7/multiprocessing/sharedctypes.pyt __getitem__s cCs-|jz||j|#s:            "pool.pyo000064400000052326147207507420006266 0ustar00 rfc@sTdgZddlZddlZddlZddlZddlZddlmZmZm Z ddl m Z m Z dZ dZdZejZdZd efd YZefed Zdefd YZd efdYZeZdefdYZdefdYZdefdYZdefdYZdS(tPooliN(tProcesst cpu_countt TimeoutError(tFinalizetdebugiiicCs t|S(N(tmap(targs((s,/usr/lib64/python2.7/multiprocessing/pool.pytmapstar@stMaybeEncodingErrorcBs)eZdZdZdZdZRS(sVWraps possible unpickleable errors, so they can be safely sent through the socket.cCsAt||_t||_tt|j|j|jdS(N(treprtexctvaluetsuperR t__init__(tselfR R ((s,/usr/lib64/python2.7/multiprocessing/pool.pyRKscCsd|j|jfS(Ns(Error sending result: '%s'. Reason: '%s'(R R (R((s,/usr/lib64/python2.7/multiprocessing/pool.pyt__str__Ps cCsdt|S(Ns(tstr(R((s,/usr/lib64/python2.7/multiprocessing/pool.pyt__repr__Ts(t__name__t __module__t__doc__RRR(((s,/usr/lib64/python2.7/multiprocessing/pool.pyR Gs  cCs|j}|j}t|dr>|jj|jjn|dk rW||nd}x/|dks~|r||kry |}Wn"ttfk rt dPnX|dkrt dPn|\} } } } } yt | | | f}Wnt k r}t |f}nXy|| | |fWnMt k r}t ||d}t d||| | t |ffnX|d7}q`Wt d|dS(Nt_writeris)worker got EOFError or IOError -- exitingsworker got sentinel -- exitingis0Possible encoding error while sending result: %ssworker exiting after %d tasks(tputtgetthasattrRtcloset_readertNonetEOFErrortIOErrorRtTruet ExceptiontFalseR (tinqueuetoutqueuet initializertinitargstmaxtasksRRt completedttasktjobtitfuncRtkwdstresulttetwrapped((s,/usr/lib64/python2.7/multiprocessing/pool.pytworkerXs>     !    cBseZdZeZdddddZdZdZdZdZ didZ ddZ dd Z dd Z didd Zddd Zed ZedZedZedZdZdZdZdZedZedZRS(sH Class which supports an async version of the `apply()` builtin c Cs)|jtj|_i|_t|_||_||_||_|dkr|y t }Wq|t k rxd}q|Xn|dkrt dn|dk rt |d rtdn||_g|_|jtjdtjd|f|_t|j_t|j_|jjtjdtjd|j|j|j|jf|_t|j_t|j_|jjtjdtjd|j|j|jf|_ t|j _t|j _|j jt!||j"d|j|j#|j|j|j|j|j |jfdd|_$dS( Nis&Number of processes must be at least 1t__call__sinitializer must be a callablettargetRt exitpriorityi(%t _setup_queuestQueuet _taskqueuet_cachetRUNt_statet_maxtasksperchildt _initializert _initargsRRtNotImplementedErrort ValueErrorRt TypeErrort _processest_poolt_repopulate_poolt threadingtThreadRt_handle_workerst_worker_handlerRtdaemontstartt _handle_taskst _quick_putt _outqueuet _task_handlert_handle_resultst _quick_gett_result_handlerRt_terminate_poolt_inqueuet _terminate(Rt processesR$R%tmaxtasksperchild((s,/usr/lib64/python2.7/multiprocessing/pool.pyRsV                     $          cCswt}xjttt|jD]M}|j|}|jdk r"td||jt }|j|=q"q"W|S(sCleanup after any worker processes which have exited due to reaching their specified lifetime. Returns True if any workers were cleaned up. scleaning up worker %dN( R!treversedtrangetlenRAtexitcodeRRtjoinR(RtcleanedR*R0((s,/usr/lib64/python2.7/multiprocessing/pool.pyt_join_exited_workerss"  c Csxt|jt|jD]}|jdtd|j|j|j|j |j f}|jj ||j j dd|_ t|_|jtdqWdS(sBring the number of pool processes up to the specified number, for use after reaping workers which have exited. R2RRt PoolWorkers added workerN(RVR@RWRARR0RQRKR;R<R:tappendtnametreplaceRRGRHR(RR*tw((s,/usr/lib64/python2.7/multiprocessing/pool.pyRBs#   cCs|jr|jndS(sEClean up any exited workers and start replacements for them. N(R[RB(R((s,/usr/lib64/python2.7/multiprocessing/pool.pyt_maintain_pools cCsPddlm}||_||_|jjj|_|jjj|_ dS(Ni(t SimpleQueue( tqueuesRbRQRKRtsendRJRtrecvRN(RRb((s,/usr/lib64/python2.7/multiprocessing/pool.pyR4s   cCs|j|||jS(s1 Equivalent of `apply()` builtin (t apply_asyncR(RR+RR,((s,/usr/lib64/python2.7/multiprocessing/pool.pytapplyscCs|j|||jS(s/ Equivalent of `map()` builtin (t map_asyncR(RR+titerablet chunksize((s,/usr/lib64/python2.7/multiprocessing/pool.pyRsics|dkrQt|j|jjfdt|DjfStj||}t|j|jjfdt|DjfdDSdS(sZ Equivalent of `itertools.imap()` -- can be MUCH slower than `Pool.map()` ic3s0|]&\}}j||fifVqdS(N(t_job(t.0R*tx(R+R-(s,/usr/lib64/python2.7/multiprocessing/pool.pys sc3s0|]&\}}j|t|fifVqdS(N(RkR(RlR*Rm(R-(s,/usr/lib64/python2.7/multiprocessing/pool.pys scss"|]}|D] }|Vq qdS(N((Rltchunktitem((s,/usr/lib64/python2.7/multiprocessing/pool.pys sN(t IMapIteratorR7R6Rt enumeratet _set_lengthRt _get_tasks(RR+RiRjt task_batches((R+R-s,/usr/lib64/python2.7/multiprocessing/pool.pytimaps cs|dkrQt|j|jjfdt|DjfStj||}t|j|jjfdt|DjfdDSdS(sK Like `imap()` method but ordering of results is arbitrary ic3s0|]&\}}j||fifVqdS(N(Rk(RlR*Rm(R+R-(s,/usr/lib64/python2.7/multiprocessing/pool.pys sc3s0|]&\}}j|t|fifVqdS(N(RkR(RlR*Rm(R-(s,/usr/lib64/python2.7/multiprocessing/pool.pys scss"|]}|D] }|Vq qdS(N((RlRnRo((s,/usr/lib64/python2.7/multiprocessing/pool.pys sN(tIMapUnorderedIteratorR7R6RRqRrRRs(RR+RiRjRt((R+R-s,/usr/lib64/python2.7/multiprocessing/pool.pytimap_unordereds cCsAt|j|}|jj|jd|||fgdf|S(s> Asynchronous equivalent of `apply()` builtin N(t ApplyResultR7R6RRkR(RR+RR,tcallbackR-((s,/usr/lib64/python2.7/multiprocessing/pool.pyRf s+cst|dst|}n|dkrhtt|t|jd\}}|rh|d7}qhnt|dkrd}ntj|||}t|j |t|||j j fdt |DdfS(s< Asynchronous equivalent of `map()` builtin t__len__iiic3s0|]&\}}j|t|fifVqdS(N(RkR(RlR*Rm(R-(s,/usr/lib64/python2.7/multiprocessing/pool.pys :sN( RtlistRtdivmodRWRARRst MapResultR7R6RRq(RR+RiRjRytextraRt((R-s,/usr/lib64/python2.7/multiprocessing/pool.pyRh)s ( cCsotj}xB|jtks6|jrP|jtkrP|jtjdqW|j j dt ddS(Ng?sworker handler exiting( RCtcurrent_threadR9R8R7t TERMINATERattimetsleepR6RRR(tpooltthread((s,/usr/lib64/python2.7/multiprocessing/pool.pyRE>s  * c Cs1tj}xt|jdD]\}}d}xt|D]P\}}|jratdPny||Wq>tk rtdPq>Xq>W|rtd||dqqPqWtdy@td|j dtdx|D]} |dqWWntk r"td nXtd dS( Nis'task handler found thread._state != RUNscould not put task on queuesdoing set_length()istask handler got sentinels/task handler sending sentinel to result handlers(task handler sending sentinel to workerss/task handler got IOError when sending sentinelsstask handler exiting( RCRtiterRRRqR9RRR( t taskqueueRR#RRttaskseqt set_lengthR*R(tp((s,/usr/lib64/python2.7/multiprocessing/pool.pyRIKs6             cCstj}xy |}Wn"ttfk r@tddSX|jrXtdPn|dkrrtdPn|\}}}y||j||Wqtk rqXqx|rT|jt krTy |}Wn"ttfk rtddSX|dkrtdqn|\}}}y||j||Wqtk rPqXqWt |drtdy5x.t dD] }|j j sPn|q~WWqttfk rqXntdt||jdS( Ns.result handler got EOFError/IOError -- exitings,result handler found thread._state=TERMINATEsresult handler got sentinels&result handler ignoring extra sentinelRs"ensuring that outqueue is not fulli s7result handler exiting: len(cache)=%s, thread._state=%s(RCRRRRR9Rt_settKeyErrorRRRVRtpollRW(R#RtcacheRR(R)R*tobj((s,/usr/lib64/python2.7/multiprocessing/pool.pyRMrsV              ccsCt|}x0ttj||}|s1dS||fVqdS(N(Rttuplet itertoolstislice(R+tittsizeRm((s,/usr/lib64/python2.7/multiprocessing/pool.pyRss  cCstddS(Ns:pool objects cannot be passed between processes or pickled(R=(R((s,/usr/lib64/python2.7/multiprocessing/pool.pyt __reduce__scCs5td|jtkr1t|_t|j_ndS(Ns closing pool(RR9R8tCLOSERF(R((s,/usr/lib64/python2.7/multiprocessing/pool.pyRs  cCs-tdt|_t|j_|jdS(Nsterminating pool(RRR9RFRR(R((s,/usr/lib64/python2.7/multiprocessing/pool.pyt terminates   cCsStd|jj|jj|jjx|jD]}|jq;WdS(Ns joining pool(RRFRYRLRORA(RR((s,/usr/lib64/python2.7/multiprocessing/pool.pyRYs     cCsWtd|jjx9|jrR|jjrR|jjtjdqWdS(Ns7removing tasks from inqueue until task handler finishedi( Rt_rlocktacquiretis_aliveRRReRR(R"t task_handlerR((s,/usr/lib64/python2.7/multiprocessing/pool.pyt_help_stuff_finishs    c Cstdt|_t|_td|j||t|t|_|jdtdtj|k r|j dn|rt |ddrtdx-|D]"} | j dkr| j qqWntdtj|k r|j dntd tj|k r,|j dn|rt |ddrtd x;|D]0} | j rVtd | j| j qVqVWndS( Nsfinalizing pools&helping task handler/workers to finishsjoining worker handlerg}Ô%ITiRsterminating workerssjoining task handlersjoining result handlersjoining pool workersscleaning up worker %d(RRR9RRWRRRCRRYRRXRRtpid( tclsRR"R#Rtworker_handlerRtresult_handlerRR((s,/usr/lib64/python2.7/multiprocessing/pool.pyRPs6              N((((RRRRRRR[RBRaR4RgRRuRwRfRht staticmethodRERIRMRsRRRRYRt classmethodRP(((s,/usr/lib64/python2.7/multiprocessing/pool.pyRs0  9         ':     RxcBsDeZdZdZdZddZddZdZRS(cCsStjtj|_tj|_||_t|_ ||_ |||js RpcBs>eZdZdZddZeZdZdZRS(cCsktjtj|_tj|_||_tj |_ d|_ d|_ i|_|||j#s,        *.-Iutil.py000064400000033176147207507420006115 0ustar00# # Module providing various facilities to other parts of the package # # multiprocessing/util.py # # Copyright (c) 2006-2008, R Oudkerk # Licensed to PSF under a Contributor Agreement. # import os import itertools import sys import weakref import atexit import threading # we want threading to install it's # cleanup function before multiprocessing does from subprocess import _args_from_interpreter_flags from . import process __all__ = [ 'sub_debug', 'debug', 'info', 'sub_warning', 'get_logger', 'log_to_stderr', 'get_temp_dir', 'register_after_fork', 'is_exiting', 'Finalize', 'ForkAwareThreadLock', 'ForkAwareLocal', 'close_all_fds_except', 'SUBDEBUG', 'SUBWARNING', ] # # Logging # NOTSET = 0 SUBDEBUG = 5 DEBUG = 10 INFO = 20 SUBWARNING = 25 LOGGER_NAME = 'multiprocessing' DEFAULT_LOGGING_FORMAT = '[%(levelname)s/%(processName)s] %(message)s' _logger = None _log_to_stderr = False def sub_debug(msg, *args): if _logger: _logger.log(SUBDEBUG, msg, *args) def debug(msg, *args): if _logger: _logger.log(DEBUG, msg, *args) def info(msg, *args): if _logger: _logger.log(INFO, msg, *args) def sub_warning(msg, *args): if _logger: _logger.log(SUBWARNING, msg, *args) def get_logger(): ''' Returns logger used by multiprocessing ''' global _logger import logging logging._acquireLock() try: if not _logger: _logger = logging.getLogger(LOGGER_NAME) _logger.propagate = 0 # XXX multiprocessing should cleanup before logging if hasattr(atexit, 'unregister'): atexit.unregister(_exit_function) atexit.register(_exit_function) else: atexit._exithandlers.remove((_exit_function, (), {})) atexit._exithandlers.append((_exit_function, (), {})) finally: logging._releaseLock() return _logger def log_to_stderr(level=None): ''' Turn on logging and add a handler which prints to stderr ''' global _log_to_stderr import logging logger = get_logger() formatter = logging.Formatter(DEFAULT_LOGGING_FORMAT) handler = logging.StreamHandler() handler.setFormatter(formatter) logger.addHandler(handler) if level: logger.setLevel(level) _log_to_stderr = True return _logger # Abstract socket support def _platform_supports_abstract_sockets(): if sys.platform == "linux": return True if hasattr(sys, 'getandroidapilevel'): return True return False def is_abstract_socket_namespace(address): if not address: return False if isinstance(address, bytes): return address[0] == 0 elif isinstance(address, str): return address[0] == "\0" raise TypeError('address type of {address!r} unrecognized') abstract_sockets_supported = _platform_supports_abstract_sockets() # # Function returning a temp directory which will be removed on exit # def _remove_temp_dir(rmtree, tempdir): rmtree(tempdir) current_process = process.current_process() # current_process() can be None if the finalizer is called # late during Python finalization if current_process is not None: current_process._config['tempdir'] = None def get_temp_dir(): # get name of a temp directory which will be automatically cleaned up tempdir = process.current_process()._config.get('tempdir') if tempdir is None: import shutil, tempfile tempdir = tempfile.mkdtemp(prefix='pymp-') info('created temp directory %s', tempdir) # keep a strong reference to shutil.rmtree(), since the finalizer # can be called late during Python shutdown Finalize(None, _remove_temp_dir, args=(shutil.rmtree, tempdir), exitpriority=-100) process.current_process()._config['tempdir'] = tempdir return tempdir # # Support for reinitialization of objects when bootstrapping a child process # _afterfork_registry = weakref.WeakValueDictionary() _afterfork_counter = itertools.count() def _run_after_forkers(): items = list(_afterfork_registry.items()) items.sort() for (index, ident, func), obj in items: try: func(obj) except Exception as e: info('after forker raised exception %s', e) def register_after_fork(obj, func): _afterfork_registry[(next(_afterfork_counter), id(obj), func)] = obj # # Finalization using weakrefs # _finalizer_registry = {} _finalizer_counter = itertools.count() class Finalize(object): ''' Class which supports object finalization using weakrefs ''' def __init__(self, obj, callback, args=(), kwargs=None, exitpriority=None): if (exitpriority is not None) and not isinstance(exitpriority,int): raise TypeError( "Exitpriority ({0!r}) must be None or int, not {1!s}".format( exitpriority, type(exitpriority))) if obj is not None: self._weakref = weakref.ref(obj, self) elif exitpriority is None: raise ValueError("Without object, exitpriority cannot be None") self._callback = callback self._args = args self._kwargs = kwargs or {} self._key = (exitpriority, next(_finalizer_counter)) self._pid = os.getpid() _finalizer_registry[self._key] = self def __call__(self, wr=None, # Need to bind these locally because the globals can have # been cleared at shutdown _finalizer_registry=_finalizer_registry, sub_debug=sub_debug, getpid=os.getpid): ''' Run the callback unless it has already been called or cancelled ''' try: del _finalizer_registry[self._key] except KeyError: sub_debug('finalizer no longer registered') else: if self._pid != getpid(): sub_debug('finalizer ignored because different process') res = None else: sub_debug('finalizer calling %s with args %s and kwargs %s', self._callback, self._args, self._kwargs) res = self._callback(*self._args, **self._kwargs) self._weakref = self._callback = self._args = \ self._kwargs = self._key = None return res def cancel(self): ''' Cancel finalization of the object ''' try: del _finalizer_registry[self._key] except KeyError: pass else: self._weakref = self._callback = self._args = \ self._kwargs = self._key = None def still_active(self): ''' Return whether this finalizer is still waiting to invoke callback ''' return self._key in _finalizer_registry def __repr__(self): try: obj = self._weakref() except (AttributeError, TypeError): obj = None if obj is None: return '<%s object, dead>' % self.__class__.__name__ x = '<%s object, callback=%s' % ( self.__class__.__name__, getattr(self._callback, '__name__', self._callback)) if self._args: x += ', args=' + str(self._args) if self._kwargs: x += ', kwargs=' + str(self._kwargs) if self._key[0] is not None: x += ', exitpriority=' + str(self._key[0]) return x + '>' def _run_finalizers(minpriority=None): ''' Run all finalizers whose exit priority is not None and at least minpriority Finalizers with highest priority are called first; finalizers with the same priority will be called in reverse order of creation. ''' if _finalizer_registry is None: # This function may be called after this module's globals are # destroyed. See the _exit_function function in this module for more # notes. return if minpriority is None: f = lambda p : p[0] is not None else: f = lambda p : p[0] is not None and p[0] >= minpriority # Careful: _finalizer_registry may be mutated while this function # is running (either by a GC run or by another thread). # list(_finalizer_registry) should be atomic, while # list(_finalizer_registry.items()) is not. keys = [key for key in list(_finalizer_registry) if f(key)] keys.sort(reverse=True) for key in keys: finalizer = _finalizer_registry.get(key) # key may have been removed from the registry if finalizer is not None: sub_debug('calling %s', finalizer) try: finalizer() except Exception: import traceback traceback.print_exc() if minpriority is None: _finalizer_registry.clear() # # Clean up on exit # def is_exiting(): ''' Returns true if the process is shutting down ''' return _exiting or _exiting is None _exiting = False def _exit_function(info=info, debug=debug, _run_finalizers=_run_finalizers, active_children=process.active_children, current_process=process.current_process): # We hold on to references to functions in the arglist due to the # situation described below, where this function is called after this # module's globals are destroyed. global _exiting if not _exiting: _exiting = True info('process shutting down') debug('running all "atexit" finalizers with priority >= 0') _run_finalizers(0) if current_process() is not None: # We check if the current process is None here because if # it's None, any call to ``active_children()`` will raise # an AttributeError (active_children winds up trying to # get attributes from util._current_process). One # situation where this can happen is if someone has # manipulated sys.modules, causing this module to be # garbage collected. The destructor for the module type # then replaces all values in the module dict with None. # For instance, after setuptools runs a test it replaces # sys.modules with a copy created earlier. See issues # #9775 and #15881. Also related: #4106, #9205, and # #9207. for p in active_children(): if p.daemon: info('calling terminate() for daemon %s', p.name) p._popen.terminate() for p in active_children(): info('calling join() for process %s', p.name) p.join() debug('running the remaining "atexit" finalizers') _run_finalizers() atexit.register(_exit_function) # # Some fork aware types # class ForkAwareThreadLock(object): def __init__(self): self._reset() register_after_fork(self, ForkAwareThreadLock._reset) def _reset(self): self._lock = threading.Lock() self.acquire = self._lock.acquire self.release = self._lock.release def __enter__(self): return self._lock.__enter__() def __exit__(self, *args): return self._lock.__exit__(*args) class ForkAwareLocal(threading.local): def __init__(self): register_after_fork(self, lambda obj : obj.__dict__.clear()) def __reduce__(self): return type(self), () # # Close fds except those specified # try: MAXFD = os.sysconf("SC_OPEN_MAX") except Exception: MAXFD = 256 def close_all_fds_except(fds): fds = list(fds) + [-1, MAXFD] fds.sort() assert fds[-1] == MAXFD, 'fd too large' for i in range(len(fds) - 1): os.closerange(fds[i]+1, fds[i+1]) # # Close sys.stdin and replace stdin with os.devnull # def _close_stdin(): if sys.stdin is None: return try: sys.stdin.close() except (OSError, ValueError): pass try: fd = os.open(os.devnull, os.O_RDONLY) try: sys.stdin = open(fd, closefd=False) except: os.close(fd) raise except (OSError, ValueError): pass # # Flush standard streams, if any # def _flush_std_streams(): try: sys.stdout.flush() except (AttributeError, ValueError): pass try: sys.stderr.flush() except (AttributeError, ValueError): pass # # Start a program with only specified fds kept open # def spawnv_passfds(path, args, passfds): import _posixsubprocess passfds = tuple(sorted(map(int, passfds))) errpipe_read, errpipe_write = os.pipe() try: return _posixsubprocess.fork_exec( args, [os.fsencode(path)], True, passfds, None, None, -1, -1, -1, -1, -1, -1, errpipe_read, errpipe_write, False, False, None) finally: os.close(errpipe_read) os.close(errpipe_write) def close_fds(*fds): """Close each file descriptor given as an argument""" for fd in fds: os.close(fd) def _cleanup_tests(): """Cleanup multiprocessing resources when multiprocessing tests completed.""" from test import support # cleanup multiprocessing process._cleanup() # Stop the ForkServer process if it's running from multiprocessing import forkserver forkserver._forkserver._stop() # Stop the ResourceTracker process if it's running from multiprocessing import resource_tracker resource_tracker._resource_tracker._stop() # bpo-37421: Explicitly call _run_finalizers() to remove immediately # temporary directories created by multiprocessing.util.get_temp_dir(). _run_finalizers() support.gc_collect() support.reap_children() forking.py000064400000037672147207507420006604 0ustar00# # Module for starting a process object using os.fork() or CreateProcess() # # multiprocessing/forking.py # # Copyright (c) 2006-2008, R Oudkerk # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. Neither the name of author nor the names of any contributors may be # used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # import os import sys import signal import errno from multiprocessing import util, process __all__ = ['Popen', 'assert_spawning', 'exit', 'duplicate', 'close', 'ForkingPickler'] # # Check that the current thread is spawning a child process # def assert_spawning(self): if not Popen.thread_is_spawning(): raise RuntimeError( '%s objects should only be shared between processes' ' through inheritance' % type(self).__name__ ) # # Try making some callable types picklable # from pickle import Pickler class ForkingPickler(Pickler): dispatch = Pickler.dispatch.copy() @classmethod def register(cls, type, reduce): def dispatcher(self, obj): rv = reduce(obj) self.save_reduce(obj=obj, *rv) cls.dispatch[type] = dispatcher def _reduce_method(m): if m.im_self is None: return getattr, (m.im_class, m.im_func.func_name) else: return getattr, (m.im_self, m.im_func.func_name) ForkingPickler.register(type(ForkingPickler.save), _reduce_method) def _reduce_method_descriptor(m): return getattr, (m.__objclass__, m.__name__) ForkingPickler.register(type(list.append), _reduce_method_descriptor) ForkingPickler.register(type(int.__add__), _reduce_method_descriptor) #def _reduce_builtin_function_or_method(m): # return getattr, (m.__self__, m.__name__) #ForkingPickler.register(type(list().append), _reduce_builtin_function_or_method) #ForkingPickler.register(type(int().__add__), _reduce_builtin_function_or_method) try: from functools import partial except ImportError: pass else: def _reduce_partial(p): return _rebuild_partial, (p.func, p.args, p.keywords or {}) def _rebuild_partial(func, args, keywords): return partial(func, *args, **keywords) ForkingPickler.register(partial, _reduce_partial) # # Unix # if sys.platform != 'win32': import time exit = os._exit duplicate = os.dup close = os.close # # We define a Popen class similar to the one from subprocess, but # whose constructor takes a process object as its argument. # class Popen(object): def __init__(self, process_obj): sys.stdout.flush() sys.stderr.flush() self.returncode = None self.pid = os.fork() if self.pid == 0: if 'random' in sys.modules: import random random.seed() code = process_obj._bootstrap() sys.stdout.flush() sys.stderr.flush() os._exit(code) def poll(self, flag=os.WNOHANG): if self.returncode is None: while True: try: pid, sts = os.waitpid(self.pid, flag) except os.error as e: if e.errno == errno.EINTR: continue # Child process not yet created. See #1731717 # e.errno == errno.ECHILD == 10 return None else: break if pid == self.pid: if os.WIFSIGNALED(sts): self.returncode = -os.WTERMSIG(sts) else: assert os.WIFEXITED(sts) self.returncode = os.WEXITSTATUS(sts) return self.returncode def wait(self, timeout=None): if timeout is None: return self.poll(0) deadline = time.time() + timeout delay = 0.0005 while 1: res = self.poll() if res is not None: break remaining = deadline - time.time() if remaining <= 0: break delay = min(delay * 2, remaining, 0.05) time.sleep(delay) return res def terminate(self): if self.returncode is None: try: os.kill(self.pid, signal.SIGTERM) except OSError, e: if self.wait(timeout=0.1) is None: raise @staticmethod def thread_is_spawning(): return False # # Windows # else: import thread import msvcrt import _subprocess import time from _multiprocessing import win32, Connection, PipeConnection from .util import Finalize #try: # from cPickle import dump, load, HIGHEST_PROTOCOL #except ImportError: from pickle import load, HIGHEST_PROTOCOL def dump(obj, file, protocol=None): ForkingPickler(file, protocol).dump(obj) # # # TERMINATE = 0x10000 WINEXE = (sys.platform == 'win32' and getattr(sys, 'frozen', False)) WINSERVICE = sys.executable.lower().endswith("pythonservice.exe") exit = win32.ExitProcess close = win32.CloseHandle # # _python_exe is the assumed path to the python executable. # People embedding Python want to modify it. # if WINSERVICE: _python_exe = os.path.join(sys.exec_prefix, 'python.exe') else: _python_exe = sys.executable def set_executable(exe): global _python_exe _python_exe = exe # # # def duplicate(handle, target_process=None, inheritable=False): if target_process is None: target_process = _subprocess.GetCurrentProcess() return _subprocess.DuplicateHandle( _subprocess.GetCurrentProcess(), handle, target_process, 0, inheritable, _subprocess.DUPLICATE_SAME_ACCESS ).Detach() # # We define a Popen class similar to the one from subprocess, but # whose constructor takes a process object as its argument. # class Popen(object): ''' Start a subprocess to run the code of a process object ''' _tls = thread._local() def __init__(self, process_obj): # create pipe for communication with child rfd, wfd = os.pipe() # get handle for read end of the pipe and make it inheritable rhandle = duplicate(msvcrt.get_osfhandle(rfd), inheritable=True) os.close(rfd) # start process cmd = get_command_line() + [rhandle] cmd = ' '.join('"%s"' % x for x in cmd) hp, ht, pid, tid = _subprocess.CreateProcess( _python_exe, cmd, None, None, 1, 0, None, None, None ) ht.Close() close(rhandle) # set attributes of self self.pid = pid self.returncode = None self._handle = hp # send information to child prep_data = get_preparation_data(process_obj._name) to_child = os.fdopen(wfd, 'wb') Popen._tls.process_handle = int(hp) try: dump(prep_data, to_child, HIGHEST_PROTOCOL) dump(process_obj, to_child, HIGHEST_PROTOCOL) finally: del Popen._tls.process_handle to_child.close() @staticmethod def thread_is_spawning(): return getattr(Popen._tls, 'process_handle', None) is not None @staticmethod def duplicate_for_child(handle): return duplicate(handle, Popen._tls.process_handle) def wait(self, timeout=None): if self.returncode is None: if timeout is None: msecs = _subprocess.INFINITE else: msecs = max(0, int(timeout * 1000 + 0.5)) res = _subprocess.WaitForSingleObject(int(self._handle), msecs) if res == _subprocess.WAIT_OBJECT_0: code = _subprocess.GetExitCodeProcess(self._handle) if code == TERMINATE: code = -signal.SIGTERM self.returncode = code return self.returncode def poll(self): return self.wait(timeout=0) def terminate(self): if self.returncode is None: try: _subprocess.TerminateProcess(int(self._handle), TERMINATE) except WindowsError: if self.wait(timeout=0.1) is None: raise # # # def is_forking(argv): ''' Return whether commandline indicates we are forking ''' if len(argv) >= 2 and argv[1] == '--multiprocessing-fork': assert len(argv) == 3 return True else: return False def freeze_support(): ''' Run code for process object if this in not the main process ''' if is_forking(sys.argv): main() sys.exit() def get_command_line(): ''' Returns prefix of command line used for spawning a child process ''' if getattr(process.current_process(), '_inheriting', False): raise RuntimeError(''' Attempt to start a new process before the current process has finished its bootstrapping phase. This probably means that you are on Windows and you have forgotten to use the proper idiom in the main module: if __name__ == '__main__': freeze_support() ... The "freeze_support()" line can be omitted if the program is not going to be frozen to produce a Windows executable.''') if getattr(sys, 'frozen', False): return [sys.executable, '--multiprocessing-fork'] else: prog = 'from multiprocessing.forking import main; main()' opts = util._args_from_interpreter_flags() return [_python_exe] + opts + ['-c', prog, '--multiprocessing-fork'] def main(): ''' Run code specifed by data received over pipe ''' assert is_forking(sys.argv) handle = int(sys.argv[-1]) fd = msvcrt.open_osfhandle(handle, os.O_RDONLY) from_parent = os.fdopen(fd, 'rb') process.current_process()._inheriting = True preparation_data = load(from_parent) prepare(preparation_data) self = load(from_parent) process.current_process()._inheriting = False from_parent.close() exitcode = self._bootstrap() exit(exitcode) def get_preparation_data(name): ''' Return info about parent needed by child to unpickle process object ''' from .util import _logger, _log_to_stderr d = dict( name=name, sys_path=sys.path, sys_argv=sys.argv, log_to_stderr=_log_to_stderr, orig_dir=process.ORIGINAL_DIR, authkey=process.current_process().authkey, ) if _logger is not None: d['log_level'] = _logger.getEffectiveLevel() if not WINEXE and not WINSERVICE: main_path = getattr(sys.modules['__main__'], '__file__', None) if not main_path and sys.argv[0] not in ('', '-c'): main_path = sys.argv[0] if main_path is not None: if not os.path.isabs(main_path) and \ process.ORIGINAL_DIR is not None: main_path = os.path.join(process.ORIGINAL_DIR, main_path) d['main_path'] = os.path.normpath(main_path) return d # # Make (Pipe)Connection picklable # def reduce_connection(conn): if not Popen.thread_is_spawning(): raise RuntimeError( 'By default %s objects can only be shared between processes\n' 'using inheritance' % type(conn).__name__ ) return type(conn), (Popen.duplicate_for_child(conn.fileno()), conn.readable, conn.writable) ForkingPickler.register(Connection, reduce_connection) ForkingPickler.register(PipeConnection, reduce_connection) # # Prepare current process # old_main_modules = [] def prepare(data): ''' Try to get current process ready to unpickle process object ''' old_main_modules.append(sys.modules['__main__']) if 'name' in data: process.current_process().name = data['name'] if 'authkey' in data: process.current_process()._authkey = data['authkey'] if 'log_to_stderr' in data and data['log_to_stderr']: util.log_to_stderr() if 'log_level' in data: util.get_logger().setLevel(data['log_level']) if 'sys_path' in data: sys.path = data['sys_path'] if 'sys_argv' in data: sys.argv = data['sys_argv'] if 'dir' in data: os.chdir(data['dir']) if 'orig_dir' in data: process.ORIGINAL_DIR = data['orig_dir'] if 'main_path' in data: main_path = data['main_path'] main_name = os.path.splitext(os.path.basename(main_path))[0] if main_name == '__init__': main_name = os.path.basename(os.path.dirname(main_path)) if main_name != 'ipython': import imp if main_path is None: dirs = None elif os.path.basename(main_path).startswith('__init__.py'): dirs = [os.path.dirname(os.path.dirname(main_path))] else: dirs = [os.path.dirname(main_path)] assert main_name not in sys.modules, main_name file, path_name, etc = imp.find_module(main_name, dirs) try: # We would like to do "imp.load_module('__main__', ...)" # here. However, that would cause 'if __name__ == # "__main__"' clauses to be executed. main_module = imp.load_module( '__parents_main__', file, path_name, etc ) finally: if file: file.close() sys.modules['__main__'] = main_module main_module.__name__ = '__main__' # Try to make the potentially picklable objects in # sys.modules['__main__'] realize they are in the main # module -- somewhat ugly. for obj in main_module.__dict__.values(): try: if obj.__module__ == '__parents_main__': obj.__module__ = '__main__' except Exception: pass sharedctypes.py000064400000014242147207507420007627 0ustar00# # Module which supports allocation of ctypes objects from shared memory # # multiprocessing/sharedctypes.py # # Copyright (c) 2006-2008, R Oudkerk # Licensed to PSF under a Contributor Agreement. # import ctypes import weakref from . import heap from . import get_context from .context import reduction, assert_spawning _ForkingPickler = reduction.ForkingPickler __all__ = ['RawValue', 'RawArray', 'Value', 'Array', 'copy', 'synchronized'] # # # typecode_to_type = { 'c': ctypes.c_char, 'u': ctypes.c_wchar, 'b': ctypes.c_byte, 'B': ctypes.c_ubyte, 'h': ctypes.c_short, 'H': ctypes.c_ushort, 'i': ctypes.c_int, 'I': ctypes.c_uint, 'l': ctypes.c_long, 'L': ctypes.c_ulong, 'q': ctypes.c_longlong, 'Q': ctypes.c_ulonglong, 'f': ctypes.c_float, 'd': ctypes.c_double } # # # def _new_value(type_): size = ctypes.sizeof(type_) wrapper = heap.BufferWrapper(size) return rebuild_ctype(type_, wrapper, None) def RawValue(typecode_or_type, *args): ''' Returns a ctypes object allocated from shared memory ''' type_ = typecode_to_type.get(typecode_or_type, typecode_or_type) obj = _new_value(type_) ctypes.memset(ctypes.addressof(obj), 0, ctypes.sizeof(obj)) obj.__init__(*args) return obj def RawArray(typecode_or_type, size_or_initializer): ''' Returns a ctypes array allocated from shared memory ''' type_ = typecode_to_type.get(typecode_or_type, typecode_or_type) if isinstance(size_or_initializer, int): type_ = type_ * size_or_initializer obj = _new_value(type_) ctypes.memset(ctypes.addressof(obj), 0, ctypes.sizeof(obj)) return obj else: type_ = type_ * len(size_or_initializer) result = _new_value(type_) result.__init__(*size_or_initializer) return result def Value(typecode_or_type, *args, lock=True, ctx=None): ''' Return a synchronization wrapper for a Value ''' obj = RawValue(typecode_or_type, *args) if lock is False: return obj if lock in (True, None): ctx = ctx or get_context() lock = ctx.RLock() if not hasattr(lock, 'acquire'): raise AttributeError("%r has no method 'acquire'" % lock) return synchronized(obj, lock, ctx=ctx) def Array(typecode_or_type, size_or_initializer, *, lock=True, ctx=None): ''' Return a synchronization wrapper for a RawArray ''' obj = RawArray(typecode_or_type, size_or_initializer) if lock is False: return obj if lock in (True, None): ctx = ctx or get_context() lock = ctx.RLock() if not hasattr(lock, 'acquire'): raise AttributeError("%r has no method 'acquire'" % lock) return synchronized(obj, lock, ctx=ctx) def copy(obj): new_obj = _new_value(type(obj)) ctypes.pointer(new_obj)[0] = obj return new_obj def synchronized(obj, lock=None, ctx=None): assert not isinstance(obj, SynchronizedBase), 'object already synchronized' ctx = ctx or get_context() if isinstance(obj, ctypes._SimpleCData): return Synchronized(obj, lock, ctx) elif isinstance(obj, ctypes.Array): if obj._type_ is ctypes.c_char: return SynchronizedString(obj, lock, ctx) return SynchronizedArray(obj, lock, ctx) else: cls = type(obj) try: scls = class_cache[cls] except KeyError: names = [field[0] for field in cls._fields_] d = {name: make_property(name) for name in names} classname = 'Synchronized' + cls.__name__ scls = class_cache[cls] = type(classname, (SynchronizedBase,), d) return scls(obj, lock, ctx) # # Functions for pickling/unpickling # def reduce_ctype(obj): assert_spawning(obj) if isinstance(obj, ctypes.Array): return rebuild_ctype, (obj._type_, obj._wrapper, obj._length_) else: return rebuild_ctype, (type(obj), obj._wrapper, None) def rebuild_ctype(type_, wrapper, length): if length is not None: type_ = type_ * length _ForkingPickler.register(type_, reduce_ctype) buf = wrapper.create_memoryview() obj = type_.from_buffer(buf) obj._wrapper = wrapper return obj # # Function to create properties # def make_property(name): try: return prop_cache[name] except KeyError: d = {} exec(template % ((name,)*7), d) prop_cache[name] = d[name] return d[name] template = ''' def get%s(self): self.acquire() try: return self._obj.%s finally: self.release() def set%s(self, value): self.acquire() try: self._obj.%s = value finally: self.release() %s = property(get%s, set%s) ''' prop_cache = {} class_cache = weakref.WeakKeyDictionary() # # Synchronized wrappers # class SynchronizedBase(object): def __init__(self, obj, lock=None, ctx=None): self._obj = obj if lock: self._lock = lock else: ctx = ctx or get_context(force=True) self._lock = ctx.RLock() self.acquire = self._lock.acquire self.release = self._lock.release def __enter__(self): return self._lock.__enter__() def __exit__(self, *args): return self._lock.__exit__(*args) def __reduce__(self): assert_spawning(self) return synchronized, (self._obj, self._lock) def get_obj(self): return self._obj def get_lock(self): return self._lock def __repr__(self): return '<%s wrapper for %s>' % (type(self).__name__, self._obj) class Synchronized(SynchronizedBase): value = make_property('value') class SynchronizedArray(SynchronizedBase): def __len__(self): return len(self._obj) def __getitem__(self, i): with self: return self._obj[i] def __setitem__(self, i, value): with self: self._obj[i] = value def __getslice__(self, start, stop): with self: return self._obj[start:stop] def __setslice__(self, start, stop, values): with self: self._obj[start:stop] = values class SynchronizedString(SynchronizedArray): value = make_property('value') raw = make_property('raw') forking.pyc000064400000034030147207507420006730 0ustar00 rfc@sddlZddlZddlZddlZddlmZmZddddddgZd Zdd l m Z de fd YZ d Z e j ee je d Ze j eejee j eejeyddlmZWnek rn#XdZdZe j eeejdkrddlZejZejZej Z de!fdYZ"n}ddl#Z#ddl$Z$ddl%Z%ddlZddl&m'Z'm(Z(m)Z)ddlm*Z*ddl m+Z+m,Z,ddZ.dZ/ejdko%e0ede1Z2ej3j4j5dZ6e'j7Ze'j8Z e6rsej9j:ej;da<n ej3a<dZ=de1dZde!fdYZ"dZ>d Z?d!Z@d"ZAd#ZBd$ZCe j e(eCe j e)eCgZDd%ZEdS(&iN(tutiltprocesstPopentassert_spawningtexitt duplicatetclosetForkingPicklercCs,tjs(tdt|jndS(NsF%s objects should only be shared between processes through inheritance(Rtthread_is_spawningt RuntimeErrorttypet__name__(tself((s//usr/lib64/python2.7/multiprocessing/forking.pyR0s (tPicklercBs&eZejjZedZRS(cs fd}||j|siitwb(R1tpipeRtmsvcrtt get_osfhandleR;Rtget_command_linetjoinRft CreateProcessRcRtCloseR3R0t_handletget_preparation_datat_nametfdopentintRt_tlstprocess_handleR_R^( R R8trfdtwfdtrhandletcmdthpthtR3ttidt prep_datatto_child((s//usr/lib64/python2.7/multiprocessing/forking.pyR:s( -      cCsttjdddk S(NR(RRR~R(((s//usr/lib64/python2.7/multiprocessing/forking.pyRscCst|tjjS(N(RRR~R(Rk((s//usr/lib64/python2.7/multiprocessing/forking.pytduplicate_for_childscCs|jdkr|dkr'tj}ntdt|dd}tjt|j|}|tjkrtj |j}|t krt j }n||_qn|jS(Niig?( R0RRftINFINITEtmaxR}tWaitForSingleObjectRyt WAIT_OBJECT_0tGetExitCodeProcesst TERMINATERSRT(R RLtmsecsROR9((s//usr/lib64/python2.7/multiprocessing/forking.pyRQ"s    cCs|jddS(NRLi(RQ(R ((s//usr/lib64/python2.7/multiprocessing/forking.pyRH2scCse|jdkraytjt|jtWqatk r]|jdddkr^q^qaXndS(NRLg?( R0RRftTerminateProcessR}RyRt WindowsErrorRQ(R ((s//usr/lib64/python2.7/multiprocessing/forking.pyRV5s  N(R Rt__doc__tthreadt_localR~R:RYRRRRQRHRV(((s//usr/lib64/python2.7/multiprocessing/forking.pyRs  !  cCsFt|dkr>|ddkr>t|dks:ttStSdS(sE Return whether commandline indicates we are forking iis--multiprocessing-forkiN(tlenRCR;RW(targv((s//usr/lib64/python2.7/multiprocessing/forking.pyt is_forkingAs"cCs'ttjr#ttjndS(sM Run code for process object if this in not the main process N(RR,RtmainR(((s//usr/lib64/python2.7/multiprocessing/forking.pytfreeze_supportLscCstttjdtr'tdnttdtrFtjdgSd}tj}t g|d|dgSdS(sR Returns prefix of command line used for spawning a child process t _inheritings Attempt to start a new process before the current process has finished its bootstrapping phase. This probably means that you are on Windows and you have forgotten to use the proper idiom in the main module: if __name__ == '__main__': freeze_support() ... The "freeze_support()" line can be omitted if the program is not going to be frozen to produce a Windows executable.Rbs--multiprocessing-forks0from multiprocessing.forking import main; main()s-cN( RRtcurrent_processRWR R,t executableRt_args_from_interpreter_flagsRc(tprogtopts((s//usr/lib64/python2.7/multiprocessing/forking.pyRuUs   cCsttjstttjd}tj|tj}tj |d}t t j _ t|}t|t|}tt j _ |j|j}t|dS(s> Run code specifed by data received over pipe itrbN(RR,RRCR}Rstopen_osfhandleR1tO_RDONLYR|R;RRRR]tprepareRWRR6R(Rktfdt from_parenttpreparation_dataR texitcode((s//usr/lib64/python2.7/multiprocessing/forking.pyRps     c Cs.ddlm}m}td|dtjdtjd|dtjdtj j }|dk rt|j |d tmultiprocessingRRt__all__RtpickleR RR RR tsaveR"tlistRR}t__add__t functoolsR#t ImportErrorR)R$tplatformRIR7RtdupRRtobjectRRRsRft_multiprocessingR*RZR[R\R]R^RR_RRRWRRtlowertendswithRt ExitProcesst CloseHandleRRvt exec_prefixRcReRRRuRRzRRR(((s//usr/lib64/python2.7/multiprocessing/forking.pyt#sn              G     !     N   " reduction.pyo000064400000013575147207507420007314 0ustar00 rfc@sgZddlZddlZddlZddlZddlZddlmZddlm Z m Z m Z m Z ddl mZmZmZddlmZmZejdkpeedsednejdkrddlZdd lmZd Zd Znd Zd ZeadZedeeedZdZ dZ!dZ"dZ#dZ$e j%ej&e#ddZ'dZ(dZ)e j%eje(ejdkrdZ*dZ+e j%ej,e*ndS(iN(tcurrent_process(tPopent duplicatetclosetForkingPickler(tregister_after_forktdebugt sub_debug(tClienttListenertwin32trecvfds%pickling of connections not supported(R cCsJtjtjt|}z t||}|j|Wdt|XdS(N(R t OpenProcesstPROCESS_ALL_ACCESStFalseRtsendR(tconnthandletdestination_pidtprocess_handlet new_handle((s1/usr/lib64/python2.7/multiprocessing/reduction.pyt send_handleAs cCs |jS(N(trecv(R((s1/usr/lib64/python2.7/multiprocessing/reduction.pyt recv_handleKscCstj|j|dS(N(t_multiprocessingtsendfdtfileno(RRR((s1/usr/lib64/python2.7/multiprocessing/reduction.pyROscCstj|jS(N(RR R(R((s1/usr/lib64/python2.7/multiprocessing/reduction.pyRRscCs;xtD]}t|qWtjtjadadS(N(t_cacheRtcleart threadingtLockt_locktNonet _listener(tobjth((s1/usr/lib64/python2.7/multiprocessing/reduction.pyt_reset[s    cCstdkr~tjzWtdkrltdtdtjatj dt }t |_ |j nWdtjXntS(Ns0starting listener and thread for sending handlestauthkeyttarget(R!R RtacquireRR RR%RtThreadt_servetTruetdaemontstarttrelease(tt((s1/usr/lib64/python2.7/multiprocessing/reduction.pyt _get_listenerfs     cCsddlm}m}xyStj}|j\}}tj|t|||t ||j Wq|sddl }|dddd|j ddqqXqdS(Ni(t is_exitingt sub_warningis.thread for sharing handles raised exception : t-iOs ( tutilR0R1R!tacceptRRtremoveRRt tracebackt format_exc(R0R1Rt handle_wantedRR6((s1/usr/lib64/python2.7/multiprocessing/reduction.pyR)ws     cCs[tjr"dtj|tfSt|}tj|td|t j |t fS(Nsreducing handle %d( Rtthread_is_spawningR tduplicate_for_childR*RRtaddRR/taddressR(Rt dup_handle((s1/usr/lib64/python2.7/multiprocessing/reduction.pyt reduce_handles     cCsq|\}}}|r|Std|t|dtj}|j|tjft|}|j|S(Nsrebuilding handle %dR%( RRRR%RtostgetpidRR(t pickled_dataR<Rt inheritedRR((s1/usr/lib64/python2.7/multiprocessing/reduction.pytrebuild_handles   cCs+t|j}t||j|jffS(N(R>Rtrebuild_connectiontreadabletwritable(Rtrh((s1/usr/lib64/python2.7/multiprocessing/reduction.pytreduce_connectionscCs%t|}tj|d|d|S(NRERF(RCRt Connection(treduced_handleRERFR((s1/usr/lib64/python2.7/multiprocessing/reduction.pyRDs icCsCtj||||}|jtjk r?tjd|}n|S(Nt_sock(tsockettfromfdt __class__(tfdtfamilyttype_tprotots((s1/usr/lib64/python2.7/multiprocessing/reduction.pyRMscCs1t|j}t||j|j|jffS(N(R>Rtrebuild_socketRPttypeRR(RSRJ((s1/usr/lib64/python2.7/multiprocessing/reduction.pyt reduce_socketscCs/t|}t||||}t||S(N(RCRMR(RJRPRQRRRORK((s1/usr/lib64/python2.7/multiprocessing/reduction.pyRTs  cCs+t|j}t||j|jffS(N(R>Rtrebuild_pipe_connectionRERF(RRG((s1/usr/lib64/python2.7/multiprocessing/reduction.pytreduce_pipe_connectionscCs%t|}tj|d|d|S(NRERF(RCRtPipeConnection(RJRERFR((s1/usr/lib64/python2.7/multiprocessing/reduction.pyRWs (-t__all__R?tsysRLRRtmultiprocessingRtmultiprocessing.forkingRRRRtmultiprocessing.utilRRRtmultiprocessing.connectionRR tplatformthasattrt ImportErrort _subprocessR RRtsetRR$R R/R)R>RCRHRDtregisterRIRMRVRTRXRWRY(((s1/usr/lib64/python2.7/multiprocessing/reduction.pyt$sJ     "                   process.py000064400000027345147207507420006617 0ustar00# # Module providing the `Process` class which emulates `threading.Thread` # # multiprocessing/process.py # # Copyright (c) 2006-2008, R Oudkerk # Licensed to PSF under a Contributor Agreement. # __all__ = ['BaseProcess', 'current_process', 'active_children', 'parent_process'] # # Imports # import os import sys import signal import itertools import threading from _weakrefset import WeakSet # # # try: ORIGINAL_DIR = os.path.abspath(os.getcwd()) except OSError: ORIGINAL_DIR = None # # Public functions # def current_process(): ''' Return process object representing the current process ''' return _current_process def active_children(): ''' Return list of process objects corresponding to live child processes ''' _cleanup() return list(_children) def parent_process(): ''' Return process object representing the parent process ''' return _parent_process # # # def _cleanup(): # check for processes which have finished for p in list(_children): if p._popen.poll() is not None: _children.discard(p) # # The `Process` class # class BaseProcess(object): ''' Process objects represent activity that is run in a separate process The class is analogous to `threading.Thread` ''' def _Popen(self): raise NotImplementedError def __init__(self, group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None): assert group is None, 'group argument must be None for now' count = next(_process_counter) self._identity = _current_process._identity + (count,) self._config = _current_process._config.copy() self._parent_pid = os.getpid() self._parent_name = _current_process.name self._popen = None self._closed = False self._target = target self._args = tuple(args) self._kwargs = dict(kwargs) self._name = name or type(self).__name__ + '-' + \ ':'.join(str(i) for i in self._identity) if daemon is not None: self.daemon = daemon _dangling.add(self) def _check_closed(self): if self._closed: raise ValueError("process object is closed") def run(self): ''' Method to be run in sub-process; can be overridden in sub-class ''' if self._target: self._target(*self._args, **self._kwargs) def start(self): ''' Start child process ''' self._check_closed() assert self._popen is None, 'cannot start a process twice' assert self._parent_pid == os.getpid(), \ 'can only start a process object created by current process' assert not _current_process._config.get('daemon'), \ 'daemonic processes are not allowed to have children' _cleanup() self._popen = self._Popen(self) self._sentinel = self._popen.sentinel # Avoid a refcycle if the target function holds an indirect # reference to the process object (see bpo-30775) del self._target, self._args, self._kwargs _children.add(self) def terminate(self): ''' Terminate process; sends SIGTERM signal or uses TerminateProcess() ''' self._check_closed() self._popen.terminate() def kill(self): ''' Terminate process; sends SIGKILL signal or uses TerminateProcess() ''' self._check_closed() self._popen.kill() def join(self, timeout=None): ''' Wait until child process terminates ''' self._check_closed() assert self._parent_pid == os.getpid(), 'can only join a child process' assert self._popen is not None, 'can only join a started process' res = self._popen.wait(timeout) if res is not None: _children.discard(self) def is_alive(self): ''' Return whether process is alive ''' self._check_closed() if self is _current_process: return True assert self._parent_pid == os.getpid(), 'can only test a child process' if self._popen is None: return False returncode = self._popen.poll() if returncode is None: return True else: _children.discard(self) return False def close(self): ''' Close the Process object. This method releases resources held by the Process object. It is an error to call this method if the child process is still running. ''' if self._popen is not None: if self._popen.poll() is None: raise ValueError("Cannot close a process while it is still running. " "You should first call join() or terminate().") self._popen.close() self._popen = None del self._sentinel _children.discard(self) self._closed = True @property def name(self): return self._name @name.setter def name(self, name): assert isinstance(name, str), 'name must be a string' self._name = name @property def daemon(self): ''' Return whether process is a daemon ''' return self._config.get('daemon', False) @daemon.setter def daemon(self, daemonic): ''' Set whether process is a daemon ''' assert self._popen is None, 'process has already started' self._config['daemon'] = daemonic @property def authkey(self): return self._config['authkey'] @authkey.setter def authkey(self, authkey): ''' Set authorization key of process ''' self._config['authkey'] = AuthenticationString(authkey) @property def exitcode(self): ''' Return exit code of process or `None` if it has yet to stop ''' self._check_closed() if self._popen is None: return self._popen return self._popen.poll() @property def ident(self): ''' Return identifier (PID) of process or `None` if it has yet to start ''' self._check_closed() if self is _current_process: return os.getpid() else: return self._popen and self._popen.pid pid = ident @property def sentinel(self): ''' Return a file descriptor (Unix) or handle (Windows) suitable for waiting for process termination. ''' self._check_closed() try: return self._sentinel except AttributeError: raise ValueError("process not started") from None def __repr__(self): exitcode = None if self is _current_process: status = 'started' elif self._closed: status = 'closed' elif self._parent_pid != os.getpid(): status = 'unknown' elif self._popen is None: status = 'initial' else: exitcode = self._popen.poll() if exitcode is not None: status = 'stopped' else: status = 'started' info = [type(self).__name__, 'name=%r' % self._name] if self._popen is not None: info.append('pid=%s' % self._popen.pid) info.append('parent=%s' % self._parent_pid) info.append(status) if exitcode is not None: exitcode = _exitcode_to_name.get(exitcode, exitcode) info.append('exitcode=%s' % exitcode) if self.daemon: info.append('daemon') return '<%s>' % ' '.join(info) ## def _bootstrap(self, parent_sentinel=None): from . import util, context global _current_process, _parent_process, _process_counter, _children try: if self._start_method is not None: context._force_start_method(self._start_method) _process_counter = itertools.count(1) _children = set() util._close_stdin() old_process = _current_process _current_process = self _parent_process = _ParentProcess( self._parent_name, self._parent_pid, parent_sentinel) if threading._HAVE_THREAD_NATIVE_ID: threading.main_thread()._set_native_id() try: util._finalizer_registry.clear() util._run_after_forkers() finally: # delay finalization of the old process object until after # _run_after_forkers() is executed del old_process util.info('child process calling self.run()') try: self.run() exitcode = 0 finally: util._exit_function() except SystemExit as e: if not e.args: exitcode = 1 elif isinstance(e.args[0], int): exitcode = e.args[0] else: sys.stderr.write(str(e.args[0]) + '\n') exitcode = 1 except: exitcode = 1 import traceback sys.stderr.write('Process %s:\n' % self.name) traceback.print_exc() finally: threading._shutdown() util.info('process exiting with exitcode %d' % exitcode) util._flush_std_streams() return exitcode # # We subclass bytes to avoid accidental transmission of auth keys over network # class AuthenticationString(bytes): def __reduce__(self): from .context import get_spawning_popen if get_spawning_popen() is None: raise TypeError( 'Pickling an AuthenticationString object is ' 'disallowed for security reasons' ) return AuthenticationString, (bytes(self),) # # Create object representing the parent process # class _ParentProcess(BaseProcess): def __init__(self, name, pid, sentinel): self._identity = () self._name = name self._pid = pid self._parent_pid = None self._popen = None self._closed = False self._sentinel = sentinel self._config = {} def is_alive(self): from multiprocessing.connection import wait return not wait([self._sentinel], timeout=0) @property def ident(self): return self._pid def join(self, timeout=None): ''' Wait until parent process terminates ''' from multiprocessing.connection import wait wait([self._sentinel], timeout=timeout) pid = ident # # Create object representing the main process # class _MainProcess(BaseProcess): def __init__(self): self._identity = () self._name = 'MainProcess' self._parent_pid = None self._popen = None self._closed = False self._config = {'authkey': AuthenticationString(os.urandom(32)), 'semprefix': '/mp'} # Note that some versions of FreeBSD only allow named # semaphores to have names of up to 14 characters. Therefore # we choose a short prefix. # # On MacOSX in a sandbox it may be necessary to use a # different prefix -- see #19478. # # Everything in self._config will be inherited by descendant # processes. def close(self): pass _parent_process = None _current_process = _MainProcess() _process_counter = itertools.count(1) _children = set() del _MainProcess # # Give names to some return codes # _exitcode_to_name = {} for name, signum in list(signal.__dict__.items()): if name[:3]=='SIG' and '_' not in name: _exitcode_to_name[-signum] = f'-{name}' # For debug and leak testing _dangling = WeakSet() synchronize.pyc000064400000025510147207507420007647 0ustar00 rfc@sddddddgZddlZddlZddlZddlmZmZddlZdd l m Z dd l m Z m Z mZdd lmZmZydd lmZWn)ek red dddnXed\ZZejjZdefdYZdefdYZdefdYZdefdYZdefdYZdefdYZdefdYZdS(tLocktRLockt SemaphoretBoundedSemaphoret ConditiontEventiN(ttimetsleep(tcurrent_process(tFinalizetregister_after_forktdebug(tassert_spawningtPopen(tSemLocks*This platform lacks a functioning sem_opens( implementation, therefore, the requireds+ synchronization primitives needed will nots function, see issue 3770.iRcBs>eZdZdZdZdZdZdZRS(cCsctj|||}|_td|j|jtjdkr_d}t||ndS(Nscreated semlock with handle %stwin32cSs|jjdS(N(t_semlockt _after_fork(tobj((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRPs( t_multiprocessingRRR thandlet _make_methodstsystplatformR (tselftkindtvaluetmaxvaluetslR((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyt__init__Js   cCs"|jj|_|jj|_dS(N(Rtacquiretrelease(R((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRTscCs |jjS(N(Rt __enter__(R((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyR XscGs|jj|S(N(Rt__exit__(Rtargs((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyR![scCs2t||j}tj|j|j|jfS(N(R RR tduplicate_for_childRRR(RR((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyt __getstate__^s  cCs5tjj||_td|d|jdS(Ns recreated blocker with handle %ri(RRt_rebuildRR R(Rtstate((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyt __setstate__cs(t__name__t __module__RRR R!R$R'(((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRHs     cBs&eZddZdZdZRS(icCstj|t|tdS(N(RRt SEMAPHOREt SEM_VALUE_MAX(RR((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRnscCs |jjS(N(Rt _get_value(R((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyt get_valueqscCs5y|jj}Wntk r,d}nXd|S(Ntunknowns(RR,t Exception(RR((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyt__repr__ts   (R(R)RR-R0(((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRls  cBseZddZdZRS(icCstj|t||dS(N(RRR*(RR((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRscCsAy|jj}Wntk r,d}nXd||jjfS(NR.s)(RR,R/R(RR((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyR0s   (R(R)RR0(((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRs cBseZdZdZRS(cCstj|tdddS(Ni(RRR*(R((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRscCsy|jjrPtj}tjjdkr|dtjj7}qnB|jjdkrnd}n$|jjdkrd}nd}Wntk rd}nXd |S( Nt MainThreadt|itNoneitSomeOtherThreadtSomeOtherProcessR.s( Rt_is_mineRtnamet threadingtcurrent_threadR,t_countR/(RR7((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyR0s      (R(R)RR0(((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRs cBseZdZdZRS(cCstj|tdddS(Ni(RRtRECURSIVE_MUTEX(R((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRscCsy|jjr_tj}tjjdkrM|dtjj7}n|jj}nT|jjdkrd \}}n0|jjdkrd \}}n d \}}Wntk rd\}}nXd ||fS(NR1R2iR3iR4tnonzeroR5R.s(sNonei(sSomeOtherThreadR<(sSomeOtherProcessR<(sunknownsunknown( RR6RR7R8R9R:R,R/(RR7tcount((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyR0s  (R(R)RR0(((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRs cBsheZd dZdZdZdZdZdZdZ d dZ dZ d Z RS( cCsM|p t|_td|_td|_td|_|jdS(Ni(Rt_lockRt_sleeping_countt _woken_countt_wait_semaphoreR(Rtlock((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRs cCs&t||j|j|j|jfS(N(R R>R?R@RA(R((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyR$s  cCs,|\|_|_|_|_|jdS(N(R>R?R@RAR(RR&((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyR'scCs |jjS(N(R>R (R((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyR scGs|jj|S(N(R>R!(RR"((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyR!scCs"|jj|_|jj|_dS(N(R>RR(R((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRscCsQy&|jjj|jjj}Wntk r?d}nXd|j|fS(Ntunkowns(R?RR,R@R/R>(Rt num_waiters((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyR0s   cCs|jjjstd|jj|jjj}x!t|D]}|jjqJWz|jj t |Wd|j jx!t|D]}|jj qWXdS(Ns,must acquire() condition before using wait()( R>RR6tAssertionErrorR?RR:txrangeRARtTrueR@(RttimeoutR=ti((s3/usr/lib64/python2.7/multiprocessing/synchronize.pytwaits   cCs|jjjstd|jjt s7tx4|jjtrm|jjt}|s:tq:W|jjtr|jj |jj|jjtndS(Nslock is not owned( R>RR6RERARtFalseR@R?R(Rtres((s3/usr/lib64/python2.7/multiprocessing/synchronize.pytnotifys  cCs|jjjstd|jjt s7tx4|jjtrm|jjt}|s:tq:Wd}x-|jjtr|jj |d7}qwW|rx!t |D]}|jjqWx|jjtrqWndS(Nslock is not ownedii( R>RR6RERARRKR@R?RRF(RRLtsleepersRI((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyt notify_alls N( R(R)R3RR$R'R R!RR0RJRMRO(((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRs         cBs8eZdZdZdZdZddZRS(cCs%tt|_td|_dS(Ni(RRt_condRt_flag(R((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyR-scCsM|jjz+|jjtr3|jjtStSWd|jjXdS(N(RPRRQRKRRG(R((s3/usr/lib64/python2.7/multiprocessing/synchronize.pytis_set1s  cCsP|jjz.|jjt|jj|jjWd|jjXdS(N(RPRRQRKRRO(R((s3/usr/lib64/python2.7/multiprocessing/synchronize.pytset;s   cCs6|jjz|jjtWd|jjXdS(N(RPRRQRKR(R((s3/usr/lib64/python2.7/multiprocessing/synchronize.pytclearDs cCs|jjz]|jjtr2|jjn|jj||jjtre|jjtStSWd|jjXdS(N(RPRRQRKRRJRG(RRH((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyRJKs  N(R(R)RRRRSRTR3RJ(((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyR+s   (t__all__R8tosRRt_timeRt_sleepRtmultiprocessing.processRtmultiprocessing.utilR R R tmultiprocessing.forkingR R Rt ImportErrortrangeR;R*R+tobjectRRRRRR(((s3/usr/lib64/python2.7/multiprocessing/synchronize.pyt$s.       $hdummy/__init__.py000064400000005765147207507420010035 0ustar00# # Support for the API of the multiprocessing package using threads # # multiprocessing/dummy/__init__.py # # Copyright (c) 2006-2008, R Oudkerk # Licensed to PSF under a Contributor Agreement. # __all__ = [ 'Process', 'current_process', 'active_children', 'freeze_support', 'Lock', 'RLock', 'Semaphore', 'BoundedSemaphore', 'Condition', 'Event', 'Barrier', 'Queue', 'Manager', 'Pipe', 'Pool', 'JoinableQueue' ] # # Imports # import threading import sys import weakref import array from .connection import Pipe from threading import Lock, RLock, Semaphore, BoundedSemaphore from threading import Event, Condition, Barrier from queue import Queue # # # class DummyProcess(threading.Thread): def __init__(self, group=None, target=None, name=None, args=(), kwargs={}): threading.Thread.__init__(self, group, target, name, args, kwargs) self._pid = None self._children = weakref.WeakKeyDictionary() self._start_called = False self._parent = current_process() def start(self): if self._parent is not current_process(): raise RuntimeError( "Parent is {0!r} but current_process is {1!r}".format( self._parent, current_process())) self._start_called = True if hasattr(self._parent, '_children'): self._parent._children[self] = None threading.Thread.start(self) @property def exitcode(self): if self._start_called and not self.is_alive(): return 0 else: return None # # # Process = DummyProcess current_process = threading.current_thread current_process()._children = weakref.WeakKeyDictionary() def active_children(): children = current_process()._children for p in list(children): if not p.is_alive(): children.pop(p, None) return list(children) def freeze_support(): pass # # # class Namespace(object): def __init__(self, /, **kwds): self.__dict__.update(kwds) def __repr__(self): items = list(self.__dict__.items()) temp = [] for name, value in items: if not name.startswith('_'): temp.append('%s=%r' % (name, value)) temp.sort() return '%s(%s)' % (self.__class__.__name__, ', '.join(temp)) dict = dict list = list def Array(typecode, sequence, lock=True): return array.array(typecode, sequence) class Value(object): def __init__(self, typecode, value, lock=True): self._typecode = typecode self._value = value @property def value(self): return self._value @value.setter def value(self, value): self._value = value def __repr__(self): return '<%s(%r, %r)>'%(type(self).__name__,self._typecode,self._value) def Manager(): return sys.modules[__name__] def shutdown(): pass def Pool(processes=None, initializer=None, initargs=()): from ..pool import ThreadPool return ThreadPool(processes, initializer, initargs) JoinableQueue = Queue dummy/connection.pyc000064400000005314147207507420010566 0ustar00 rfc@smdddgZddlmZd gZdefdYZdZedZdefd YZ d S( tClienttListenertPipei(tQueuecBs;eZddddZdZdZedZRS(icCst||_dS(N(Rt_backlog_queue(tselftaddresstfamilytbacklog((s8/usr/lib64/python2.7/multiprocessing/dummy/connection.pyt__init__-scCst|jjS(N(t ConnectionRtget(R((s8/usr/lib64/python2.7/multiprocessing/dummy/connection.pytaccept0scCs d|_dS(N(tNoneR(R((s8/usr/lib64/python2.7/multiprocessing/dummy/connection.pytclose3scCs|jS(N(R(R((s8/usr/lib64/python2.7/multiprocessing/dummy/connection.pyt6sN(t__name__t __module__R R R RtpropertyR(((s8/usr/lib64/python2.7/multiprocessing/dummy/connection.pyR+s  cCs3tt}}|j||ft||S(N(RtputR (Rt_int_out((s8/usr/lib64/python2.7/multiprocessing/dummy/connection.pyR9scCs/tt}}t||t||fS(N(RR (tduplextatb((s8/usr/lib64/python2.7/multiprocessing/dummy/connection.pyR?sR cBs&eZdZddZdZRS(cCs<||_||_|j|_|_|j|_|_dS(N(RRRtsendt send_bytesR trecvt recv_bytes(RRR((s8/usr/lib64/python2.7/multiprocessing/dummy/connection.pyR Fs  gcCso|jjdkrtS|dkr)tS|jjj|jjj||jjj|jjdkS(Nig(RtqsizetTruetFalset not_emptytacquiretwaittrelease(Rttimeout((s8/usr/lib64/python2.7/multiprocessing/dummy/connection.pytpollLs cCsdS(N((R((s8/usr/lib64/python2.7/multiprocessing/dummy/connection.pyRVs(RRR R%R(((s8/usr/lib64/python2.7/multiprocessing/dummy/connection.pyR Ds  N( t__all__RR tfamiliestobjectRRRRR (((s8/usr/lib64/python2.7/multiprocessing/dummy/connection.pyt#s    dummy/__init__.pyc000064400000012524147207507420010167 0ustar00 rfc@sdddddddddd d d d d dgZddlZddlZddlZddlZddlZddlmZmZddl m Z ddlm Z m Z m Z mZddlmZddlmZdejfdYZdejfdYZeZejZeje_dZdZdefdYZeZeZe dZ!defdYZ"d Z#d!Z$ddd#d"Z&eZ'dS($tProcesstcurrent_processtactive_childrentfreeze_supporttLocktRLockt SemaphoretBoundedSemaphoret ConditiontEventtQueuetManagertPipetPoolt JoinableQueueiN(t TimeoutErrort cpu_count(R (RRRR(R (R t DummyProcesscBs8eZddddidZdZedZRS(cCsPtjj||||||d|_tj|_t|_ t |_ dS(N( t threadingtThreadt__init__tNonet_pidtweakreftWeakKeyDictionaryt _childrentFalset _start_calledRt_parent(tselftgroupttargettnametargstkwargs((s6/usr/lib64/python2.7/multiprocessing/dummy/__init__.pyR?s   cCsZ|jtkstt|_t|jdrFd|jj|eZedZdZdZeeeZdZRS(cCs||_||_dS(N(t _typecodet_value(RRBR?RD((s6/usr/lib64/python2.7/multiprocessing/dummy/__init__.pyRs cCs|jS(N(RH(R((s6/usr/lib64/python2.7/multiprocessing/dummy/__init__.pyt_getscCs ||_dS(N(RH(RR?((s6/usr/lib64/python2.7/multiprocessing/dummy/__init__.pyt_setscCs dt|j|j|jfS(Ns <%r(%r, %r)>(ttypeR)RGRH(R((s6/usr/lib64/python2.7/multiprocessing/dummy/__init__.pyR@s( R)R*R$RRIRJR+R?R@(((s6/usr/lib64/python2.7/multiprocessing/dummy/__init__.pyRFs    cCs tjtS(N(tsystmodulesR)(((s6/usr/lib64/python2.7/multiprocessing/dummy/__init__.pyR scCsdS(N((((s6/usr/lib64/python2.7/multiprocessing/dummy/__init__.pytshutdownscCs ddlm}||||S(Ni(t ThreadPool(tmultiprocessing.poolRO(t processest initializertinitargsRO((s6/usr/lib64/python2.7/multiprocessing/dummy/__init__.pyR s(((t__all__RRLRRAt itertoolstmultiprocessingRRt multiprocessing.dummy.connectionR RRRRR R RRR,RRtcurrent_threadRRRRRtobjectR3tdictR/R$RERFR RNRR R(((s6/usr/lib64/python2.7/multiprocessing/dummy/__init__.pyt$s8      "       dummy/connection.pyo000064400000005314147207507420010602 0ustar00 rfc@smdddgZddlmZd gZdefdYZdZedZdefd YZ d S( tClienttListenertPipei(tQueuecBs;eZddddZdZdZedZRS(icCst||_dS(N(Rt_backlog_queue(tselftaddresstfamilytbacklog((s8/usr/lib64/python2.7/multiprocessing/dummy/connection.pyt__init__-scCst|jjS(N(t ConnectionRtget(R((s8/usr/lib64/python2.7/multiprocessing/dummy/connection.pytaccept0scCs d|_dS(N(tNoneR(R((s8/usr/lib64/python2.7/multiprocessing/dummy/connection.pytclose3scCs|jS(N(R(R((s8/usr/lib64/python2.7/multiprocessing/dummy/connection.pyt6sN(t__name__t __module__R R R RtpropertyR(((s8/usr/lib64/python2.7/multiprocessing/dummy/connection.pyR+s  cCs3tt}}|j||ft||S(N(RtputR (Rt_int_out((s8/usr/lib64/python2.7/multiprocessing/dummy/connection.pyR9scCs/tt}}t||t||fS(N(RR (tduplextatb((s8/usr/lib64/python2.7/multiprocessing/dummy/connection.pyR?sR cBs&eZdZddZdZRS(cCs<||_||_|j|_|_|j|_|_dS(N(RRRtsendt send_bytesR trecvt recv_bytes(RRR((s8/usr/lib64/python2.7/multiprocessing/dummy/connection.pyR Fs  gcCso|jjdkrtS|dkr)tS|jjj|jjj||jjj|jjdkS(Nig(RtqsizetTruetFalset not_emptytacquiretwaittrelease(Rttimeout((s8/usr/lib64/python2.7/multiprocessing/dummy/connection.pytpollLs cCsdS(N((R((s8/usr/lib64/python2.7/multiprocessing/dummy/connection.pyRVs(RRR R%R(((s8/usr/lib64/python2.7/multiprocessing/dummy/connection.pyR Ds  N( t__all__RR tfamiliestobjectRRRRR (((s8/usr/lib64/python2.7/multiprocessing/dummy/connection.pyt#s    dummy/__init__.pyo000064400000012442147207507420010202 0ustar00 rfc@sdddddddddd d d d d dgZddlZddlZddlZddlZddlZddlmZmZddl m Z ddlm Z m Z m Z mZddlmZddlmZdejfdYZdejfdYZeZejZeje_dZdZdefdYZeZeZe dZ!defdYZ"d Z#d!Z$ddd#d"Z&eZ'dS($tProcesstcurrent_processtactive_childrentfreeze_supporttLocktRLockt SemaphoretBoundedSemaphoret ConditiontEventtQueuetManagertPipetPoolt JoinableQueueiN(t TimeoutErrort cpu_count(R (RRRR(R (R t DummyProcesscBs8eZddddidZdZedZRS(cCsPtjj||||||d|_tj|_t|_ t |_ dS(N( t threadingtThreadt__init__tNonet_pidtweakreftWeakKeyDictionaryt _childrentFalset _start_calledRt_parent(tselftgroupttargettnametargstkwargs((s6/usr/lib64/python2.7/multiprocessing/dummy/__init__.pyR?s   cCsBt|_t|jdr.d|jj|eZedZdZdZeeeZdZRS(cCs||_||_dS(N(t _typecodet_value(RRAR>RC((s6/usr/lib64/python2.7/multiprocessing/dummy/__init__.pyRs cCs|jS(N(RG(R((s6/usr/lib64/python2.7/multiprocessing/dummy/__init__.pyt_getscCs ||_dS(N(RG(RR>((s6/usr/lib64/python2.7/multiprocessing/dummy/__init__.pyt_setscCs dt|j|j|jfS(Ns <%r(%r, %r)>(ttypeR(RFRG(R((s6/usr/lib64/python2.7/multiprocessing/dummy/__init__.pyR?s( R(R)R#RRHRIR*R>R?(((s6/usr/lib64/python2.7/multiprocessing/dummy/__init__.pyREs    cCs tjtS(N(tsystmodulesR((((s6/usr/lib64/python2.7/multiprocessing/dummy/__init__.pyR scCsdS(N((((s6/usr/lib64/python2.7/multiprocessing/dummy/__init__.pytshutdownscCs ddlm}||||S(Ni(t ThreadPool(tmultiprocessing.poolRN(t processest initializertinitargsRN((s6/usr/lib64/python2.7/multiprocessing/dummy/__init__.pyR s(((t__all__RRKRR@t itertoolstmultiprocessingRRt multiprocessing.dummy.connectionR RRRRR R RRR+RRtcurrent_threadRRRRRtobjectR2tdictR.R#RDRER RMRR R(((s6/usr/lib64/python2.7/multiprocessing/dummy/__init__.pyt$s8      "       dummy/connection.py000064400000003076147207507420010426 0ustar00# # Analogue of `multiprocessing.connection` which uses queues instead of sockets # # multiprocessing/dummy/connection.py # # Copyright (c) 2006-2008, R Oudkerk # Licensed to PSF under a Contributor Agreement. # __all__ = [ 'Client', 'Listener', 'Pipe' ] from queue import Queue families = [None] class Listener(object): def __init__(self, address=None, family=None, backlog=1): self._backlog_queue = Queue(backlog) def accept(self): return Connection(*self._backlog_queue.get()) def close(self): self._backlog_queue = None @property def address(self): return self._backlog_queue def __enter__(self): return self def __exit__(self, exc_type, exc_value, exc_tb): self.close() def Client(address): _in, _out = Queue(), Queue() address.put((_out, _in)) return Connection(_in, _out) def Pipe(duplex=True): a, b = Queue(), Queue() return Connection(a, b), Connection(b, a) class Connection(object): def __init__(self, _in, _out): self._out = _out self._in = _in self.send = self.send_bytes = _out.put self.recv = self.recv_bytes = _in.get def poll(self, timeout=0.0): if self._in.qsize() > 0: return True if timeout <= 0.0: return False with self._in.not_empty: self._in.not_empty.wait(timeout) return self._in.qsize() > 0 def close(self): pass def __enter__(self): return self def __exit__(self, exc_type, exc_value, exc_tb): self.close() util.pyc000064400000023346147207507420006256 0ustar00 rfc@sddlZddlZddlZddlZddlmZddlmZmZdddddd d d d d ddddgZ dZ dZ dZ dZ dZdZdZdaeadZdZdZdZdZddZdZejZejZd Z d!Z!iZ"ejZ#d e$fd"YZ%dd#Z&d$Z'ea(eee&eed%Z)ej*e)de$fd&YZ+dej,fd'YZ-dS((iN(t_args_from_interpreter_flags(tcurrent_processtactive_childrent sub_debugtdebugtinfot sub_warningt get_loggert log_to_stderrt get_temp_dirtregister_after_forkt is_exitingtFinalizetForkAwareThreadLocktForkAwareLocaltSUBDEBUGt SUBWARNINGiii iitmultiprocessings+[%(levelname)s/%(processName)s] %(message)scGs trtjt||ndS(N(t_loggertlogR(tmsgtargs((s,/usr/lib64/python2.7/multiprocessing/util.pyRCscGs trtjt||ndS(N(RRtDEBUG(RR((s,/usr/lib64/python2.7/multiprocessing/util.pyRGscGs trtjt||ndS(N(RRtINFO(RR((s,/usr/lib64/python2.7/multiprocessing/util.pyRKscGs trtjt||ndS(N(RRR(RR((s,/usr/lib64/python2.7/multiprocessing/util.pyROscCsddl}ddl}|jzts|jtadt_|jtd|jt dt |dr|j t |j t q|jjt dif|jjt difnWd|jXtS( s0 Returns logger used by multiprocessing iNiRRt unregister(((tloggingtatexitt _acquireLockRt getLoggert LOGGER_NAMEt propagatet addLevelNameRRthasattrRt_exit_functiontregistert _exithandlerstremovetappendt _releaseLock(RR((s,/usr/lib64/python2.7/multiprocessing/util.pyRSs     cCsjddl}t}|jt}|j}|j||j||r`|j|nta t S(sB Turn on logging and add a handler which prints to stderr iN( RRt FormattertDEFAULT_LOGGING_FORMATt StreamHandlert setFormattert addHandlertsetLeveltTruet_log_to_stderrR(tlevelRtloggert formatterthandler((s,/usr/lib64/python2.7/multiprocessing/util.pyRps     cCstjdkrwddl}ddl}|jdd}td|td|jd|gdd|t_ntjS(Nitprefixspymp-screated temp directory %sRt exitpriorityi( Rt_tempdirtNonetshutilttempfiletmkdtempRR trmtree(R7R8ttempdir((s,/usr/lib64/python2.7/multiprocessing/util.pyR s cCsqttj}|jxN|D]F\\}}}}y||Wq#tk rh}td|q#Xq#WdS(Ns after forker raised exception %s(tlistt_afterfork_registrytitemstsortt ExceptionR(R>tindextidenttfunctobjte((s,/usr/lib64/python2.7/multiprocessing/util.pyt_run_after_forkerss cCs#|ttjt||fs( ROtAttributeErrort TypeErrorR6tgetattrRPRQtstrRRRT(RVRDtx((s,/usr/lib64/python2.7/multiprocessing/util.pyt__repr__s    (N( R`t __module__t__doc__R6RYR]R^R_Rg(((s,/usr/lib64/python2.7/multiprocessing/util.pyR s   cstdkrdSdkr(d}nfd}gtjD]}||rD|^qD}|jdtxV|D]N\}}td|y |Wqytk rddl}|jqyXqyWdkrtj ndS(s Run all finalizers whose exit priority is not None and at least minpriority Finalizers with highest priority are called first; finalizers with the same priority will be called in reverse order of creation. NcSs|dddk S(Ni(R6(tp((s,/usr/lib64/python2.7/multiprocessing/util.pytscs&|dddk o%|ddkS(Ni(R6(Rj(t minpriority(s,/usr/lib64/python2.7/multiprocessing/util.pyRkstreverses calling %si( RUR6R>R?R-RR@t tracebackt print_exctclear(RltfRfR>tkeyt finalizerRn((Rls,/usr/lib64/python2.7/multiprocessing/util.pyt_run_finalizerss    +     cCstptdkS(s6 Returns true if the process is shutting down N(t_exitingR6(((s,/usr/lib64/python2.7/multiprocessing/util.pyR scCs|d|d|d|dk rx:|D]/}|jr7|d|j|jjq7q7Wx.|D] }|d|j|jqtWn|d|dS(Nsprocess shutting downs2running all "atexit" finalizers with priority >= 0is!calling terminate() for daemon %sscalling join() for process %ss)running the remaining "atexit" finalizers(R6t _daemonictnamet_popent terminatetjoin(RRRtRRRj((s,/usr/lib64/python2.7/multiprocessing/util.pyR! s      cBseZdZdZRS(cCs|jt|tjdS(N(t_resetR R (RV((s,/usr/lib64/python2.7/multiprocessing/util.pyRYKs cCs1tj|_|jj|_|jj|_dS(N(t threadingtLockt_locktacquiretrelease(RV((s,/usr/lib64/python2.7/multiprocessing/util.pyR{Os(R`RhRYR{(((s,/usr/lib64/python2.7/multiprocessing/util.pyR Js cBseZdZdZRS(cCst|ddS(NcSs |jjS(N(t__dict__Rp(RD((s,/usr/lib64/python2.7/multiprocessing/util.pyRkVs(R (RV((s,/usr/lib64/python2.7/multiprocessing/util.pyRYUscCst|dfS(N((RJ(RV((s,/usr/lib64/python2.7/multiprocessing/util.pyt __reduce__Ws(R`RhRYR(((s,/usr/lib64/python2.7/multiprocessing/util.pyRTs (.t itertoolsRMRR|t subprocessRtmultiprocessing.processRRt__all__tNOTSETRRRRRR(R6RtFalseR.RRRRRRR tWeakValueDictionaryR=tcountRGRFR RURStobjectR RtR RuR!R"R tlocalR(((s,/usr/lib64/python2.7/multiprocessing/util.pyt#sR                  I $   "  managers.pyc000064400000113122147207507420007066 0ustar00 rfc@sddddgZddlZddlZddlZddlZddlZddlZddlmZddl m Z m Z m Z m Z mZmZddlmZdd lmZmZmZmZdd lmZmZydd lmZWn!ek rdd lmZnXd Zejejegd ddfD]Z e!e"ie ^qDZ#de$fdYZ%fidZ&dZ'de(fdYZ)dZ*dZ+de$fdYZ,de$fdYZ-iej.ej/fd6ej0ej1fd6Z2de$fdYZ3de4fdYZ5de$fd YZ6d!Z7id"Z8e9e9e9e:d#Z;d$e$fd%YZ<d&e$fd'YZ=e:d(Z>d)e6fd*YZ?d+e6fd,YZ@d-e@fd.YZAd/e6fd0YZBd1e6fd2YZCd3e6fd4YZDe8d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKfZEdLeEfdMYZFe8dNd7d8d:d<d@dOdPdQdRd ddGdSdTdUdfZGe8dVd<d:d@d;dAfZHe8dWdXdYdZd[d\d]d^d_d`f ZIidadY6dad_6dbd[6dbd\6eI_Jde3fdcYZKeKjddejeKjdeejeKjdfejLeBeKjdgejMe@eKjdhejNe@eKjdiejOe@eKjdjejPe@eKjdkejQeAeKjdle eIeKjdmeReFeKjdneSeGeKjd&e=eDeKjdoe>eHeKjd$e<eCeKjdbdpe?dqeTeKjdadqeTdS(rt BaseManagert SyncManagert BaseProxytTokeniN(t format_exc(tProcesstcurrent_processtactive_childrentPooltutilt connection(tAuthenticationString(texittPopentassert_spawningtForkingPickler(tFinalizetinfo(t PicklingErrorcCstj|j|jffS(N(tarrayttypecodettostring(ta((s0/usr/lib64/python2.7/multiprocessing/managers.pyt reduce_array@stitemstkeystvaluescBs8eZdZdZdZdZdZdZRS( s4 Type to uniquely indentify a shared object ttypeidtaddresstidcCs!||||_|_|_dS(N(RRR(tselfRRR((s0/usr/lib64/python2.7/multiprocessing/managers.pyt__init__PscCs|j|j|jfS(N(RRR(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyt __getstate__SscCs|\|_|_|_dS(N(RRR(Rtstate((s0/usr/lib64/python2.7/multiprocessing/managers.pyt __setstate__VscCsd|j|j|jfS(Ns#Token(typeid=%r, address=%r, id=%r)(RRR(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyt__repr__Ys(stypeidsaddresssid(t__name__t __module__t__doc__t __slots__RR R"R#(((s0/usr/lib64/python2.7/multiprocessing/managers.pyRJs    cCsN|j||||f|j\}}|dkr;|St||dS(sL Send a message to manager using connection `c` and return response s#RETURNN(tsendtrecvtconvert_to_error(tcRt methodnametargstkwdstkindtresult((s0/usr/lib64/python2.7/multiprocessing/managers.pytdispatchas  cCs~|dkr|S|dkr>t|tks4tt|S|dkrpt|tksbttd|StdSdS(Ns#ERRORs #TRACEBACKs#UNSERIALIZABLEsUnserializable message: %s sUnrecognized message type(ttypetstrtAssertionErrort RemoteErrort ValueError(R/R0((s0/usr/lib64/python2.7/multiprocessing/managers.pyR*ks    R5cBseZdZRS(cCs)ddddt|jdddS(Ns t-iKi(R3R-(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyt__str__xs(R$R%R8(((s0/usr/lib64/python2.7/multiprocessing/managers.pyR5wscCsOg}xBt|D]4}t||}t|dr|j|qqW|S(s4 Return a list of names of methods of `obj` t__call__(tdirtgetattrthasattrtappend(tobjttemptnametfunc((s0/usr/lib64/python2.7/multiprocessing/managers.pyt all_methodss cCs-gt|D]}|ddkr |^q S(sP Return a list of names of methods of `obj` which do not start with '_' it_(RB(R>R@((s0/usr/lib64/python2.7/multiprocessing/managers.pytpublic_methodsstServerc BseZdZddddddddd g Zd Zd Zd Zd ZdZdZ dZ ie d6e d6ed6Z dZ dZ dZdZdZdZdZdZdZRS(sM Server class which runs in a process controlled by a manager object tshutdowntcreatetaccept_connectiont get_methodst debug_infotnumber_of_objectstdummytincreftdecrefcCst|tst||_t||_t|\}}|d|dd|_|jj|_iddfd6|_ i|_ t j |_d|_dS(NRtbacklogit0i((t isinstancetbytesR4tregistryR tauthkeytlistener_clienttlistenerRtNonet id_to_objtid_to_refcountt threadingtRLocktmutextstop(RRSRRTt serializertListenertClient((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs  cCs|t_zykxdy|jj}Wnttfk rDqnXtjd|jd|f}t |_ |j qWnt t fk rnXWdd|_|jjXdS(s( Run the server forever ttargetR-Ni(Rt_manager_serverRVtaccepttOSErrortIOErrorRZtThreadthandle_requesttTruetdaemontstarttKeyboardInterruptt SystemExitR]tclose(RR+tt((s0/usr/lib64/python2.7/multiprocessing/managers.pyt serve_forevers   c Csd}}}yvtj||jtj||j|j}|\}}}}||jksttd|t||}Wn t k rdt f} nFXy||||}Wn t k rdt f} n Xd|f} y|j | Wnqt k rp} y|j dt fWnt k r<nXt j d| t j d|t j d| nX|jdS(s) Handle a new connection s%r unrecognizeds #TRACEBACKs#RETURNsFailure to send message: %rs ... request was %rs ... exception was %rN(RWR tdeliver_challengeRTtanswer_challengeR)tpublicR4R;t ExceptionRR(R RRm( RR+tfuncnameR0trequesttignoreR-R.RAtmsgte((s0/usr/lib64/python2.7/multiprocessing/managers.pyRgs4     cCstjdtjj|j}|j}|j}x|jsyd}}|}|\}}} } ||\}} } || krt d|t || fnt ||} y| | | }Wnt k r}d|f}npX| o| j|d}|rP|j|||\}}t||j|}d||ff}n d|f}Wnt k r|dkrdtf}q?y8|j|}|||||| | }d|f}Wq?t k rdtf}q?XnVtk rtjdtjjtjdn t k r>dtf}nXy>y||Wn)t k r{}|d t|fnXWq7t k r}tjd tjjtjd |tjd ||jtjd q7Xq7WdS(sQ Handle requests from the proxies in a particular process/thread s$starting server thread to service %rs+method %r of %r object is not in exposed=%rs#ERRORs#PROXYs#RETURNs #TRACEBACKs$got EOF -- exiting thread serving %ris#UNSERIALIZABLEsexception in thread serving %rs ... message was %rs ... exception was %riN(R tdebugRZtcurrent_threadR@R)R(RXR]RWtAttributeErrorR2R;RstgetRGRRRtfallback_mappingtEOFErrortsysR treprRRm(RtconnR)R(RXR,R>RutidentR-R.texposedt gettypeidtfunctiontresRxRwRtridenttrexposedttokent fallback_funcR0((s0/usr/lib64/python2.7/multiprocessing/managers.pyt serve_clientsl                 cCs|S(N((RRRR>((s0/usr/lib64/python2.7/multiprocessing/managers.pytfallback_getvalue+scCs t|S(N(R3(RRRR>((s0/usr/lib64/python2.7/multiprocessing/managers.pyt fallback_str.scCs t|S(N(R(RRRR>((s0/usr/lib64/python2.7/multiprocessing/managers.pyt fallback_repr1sR8R#s #GETVALUEcCsdS(N((RR+((s0/usr/lib64/python2.7/multiprocessing/managers.pyRL:scCs|jjzg}|jj}|jxS|D]K}|dkr6|jd||j|t|j|dd fq6q6Wdj|SWd|jj XdS(sO Return some info --- useful to spot problems with refcounting RPs %s: refcount=%s %siiKs N( R\tacquireRXRtsortR=RYR3tjointrelease(RR+R0RR((s0/usr/lib64/python2.7/multiprocessing/managers.pyRJ=s      'cCst|jdS(s* Number of shared objects i(tlenRX(RR+((s0/usr/lib64/python2.7/multiprocessing/managers.pyRKOscCszytjd|jd tjtjkrZtjdtjt_tjt_ntj dx(t D]}tjd|j qqWx(t D]}tjd|j qWtj tj dWnddl}|jnXWdtdXdS( s' Shutdown this process s!manager received shutdown messages#RETURNsresetting stdout, stderris&terminating a child process of managersmanager exiting with exitcode 0iN(s#RETURNN(R RyR(RWRtstdoutt __stdout__t __stderr__tstderrt_run_finalizersRt terminateRRt tracebackt print_excR (RR+tpR((s0/usr/lib64/python2.7/multiprocessing/managers.pyRFUs*         c Os\|jjz:|j|\}}}}|dkrat|dkrN| sTt|d} n|||} |dkrt| }n|dk rt|tkstt |t |}ndt | } t j d|| | t ||f|j| <| |jkr&d|j| Create a new shared object and return its id iis%xs&%r callable returned object with id %rN(R\RRSRWRR4RDR2tdicttlistRR RytsetRXRYRMttupleR( RR+RR-R.tcallableRtmethod_to_typeidt proxytypeR>R((s0/usr/lib64/python2.7/multiprocessing/managers.pyRGus(     cCst|j|jdS(sL Return the methods of the shared object indicated by token i(RRXR(RR+R((s0/usr/lib64/python2.7/multiprocessing/managers.pyRIscCs-|tj_|jd|j|dS(s= Spawn a new thread to serve this connection s#RETURNN(s#RETURNN(RZRzR@R(RWR(RR+R@((s0/usr/lib64/python2.7/multiprocessing/managers.pyRHs cCs9|jjz|j|cd7 Connect manager object to the server process RTRLN( RURRRR1RWRRRR(RR_R`R((s0/usr/lib64/python2.7/multiprocessing/managers.pytconnectsc Csg|jjtjkst|d k rFt|d rFtdntj dt \}}t dt |j d|j|j|j|j|||f|_djd|jjD}t |jd||j_|jj|j|j|_|jtj|j_tj|t |jd|j|j|j|j|jfd d |_d S( s@ Spawn a server process for this manager object R9sinitializer must be a callabletduplexRaR-t:css|]}t|VqdS(N(R3(t.0ti((s0/usr/lib64/python2.7/multiprocessing/managers.pys sR7t exitpriorityiN( RRRRR4RWR<t TypeErrorR tPipetFalseRR2t _run_serverRRRRt_processRt _identityR$R@RjRmR)RR Rt_finalize_managerRRF(Rt initializertinitargstreadertwriterR((s0/usr/lib64/python2.7/multiprocessing/managers.pyRjs(   c Csl|dk r||n|j||||}|j|j|jtjd|j|jdS(s@ Create a server, report its address and run it smanager serving at %rN(RWt_ServerR(RRmR RRo( tclsRSRRTR^RRRtserver((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs   cOs|jjtjks!td|j|jd|j}z)t|dd|f||\}}Wd|j Xt ||j||fS(sP Create a new shared object; return the token and exposed tuple sserver not yet startedRTRGN( RRRRR4RRRR1RWRmR(RRR-R.RRR((s0/usr/lib64/python2.7/multiprocessing/managers.pyt_create0s !) cCs|jj|dS(sC Join the manager process (if it has been spawned) N(RR(Rttimeout((s0/usr/lib64/python2.7/multiprocessing/managers.pyR<scCsA|j|jd|j}zt|ddSWd|jXdS(sS Return some info about the servers shared objects and connections RTRJN(RRRR1RWRm(RR((s0/usr/lib64/python2.7/multiprocessing/managers.pyt _debug_infoBscCsA|j|jd|j}zt|ddSWd|jXdS(s5 Return the number of shared objects RTRKN(RRRR1RWRm(RR((s0/usr/lib64/python2.7/multiprocessing/managers.pyt_number_of_objectsLscCs|S(N((R((s0/usr/lib64/python2.7/multiprocessing/managers.pyt __enter__VscCs|jdS(N(RF(Rtexc_typetexc_valtexc_tb((s0/usr/lib64/python2.7/multiprocessing/managers.pyt__exit__YscCs|jrtjdy8||d|}zt|ddWd|jXWntk rdnX|jdd|jrtjdt|drtjd |j |jdd |jrtjd qqqnt j |_ yt j|=Wntk rnXdS( sQ Shutdown the manager process; will be registered as a finalizer s#sending shutdown message to managerRTRFNRg?smanager still aliveRs'trying to `terminate()` manager processg?s#manager still alive after terminate(tis_aliveR RR1RWRmRsRR<RRRRRt_address_to_localtKeyError(tprocessRRTR!RR((s0/usr/lib64/python2.7/multiprocessing/managers.pyR\s.          cCs|jS(N(R(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyt|sc s$d|jkr$|jj|_ndkr9tn|pNtdd}|pftdd}|rxa|jD]P\}}t|tkst d|t|tks|t d|q|Wn|||f|j<|r fd} | _ t || ndS(s9 Register a typeid with the manager type Rt _exposed_t_method_to_typeid_s%r is not a stringc stjd|j||\}}||jd|d|jd|}|j|jd|j}t|dd|j f|S(Ns)requesting creation of a shared %r objecttmanagerRTRRN( R RyRRRRRR1RWR(RR-R.RtexptproxyR(RR(s0/usr/lib64/python2.7/multiprocessing/managers.pyR?sN( t__dict__RtcopyRWt AutoProxyR;RR2R3R4R$tsetattr( RRRRRRt create_methodtkeyRR?((RRs0/usr/lib64/python2.7/multiprocessing/managers.pytregister~s   ") N(((R$R%R&RRERRWRRRRRjt classmethodRRRRRRRt staticmethodRtpropertyRRhR(((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs*   $     tProcessLocalSetcBseZdZdZRS(cCstj|ddS(NcSs |jS(N(tclear(R>((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs(R tregister_after_fork(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscCst|dfS(N((R2(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs(R$R%RR(((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs cBseZdZiZejZd d d edZ dZ d idZ dZ dZ edZdZdZd Zd Zd ZRS(s. A base for proxies of shared objects cCs;tjjzPtjj|jd}|dkr\tjt f}|tj|js  cCs |jS(N(R(Rtmemo((s0/usr/lib64/python2.7/multiprocessing/managers.pyt __deepcopy__KscCs*dt|j|jjdt|fS(Ns<%s object, typeid %r at %s>s0x%x(R2R$RRR(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyR#NscCs8y|jdSWn tk r3t|d dSXdS(sV Return representation of the referent (or a fall-back if that fails) R#is; '__str__()' failed>N(RRsR(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyR8Rs N((R$R%R&RR tForkAwareThreadLockRRWRhRRRRRRRRRRR#R8(((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs %      cCsttdd}|r?|j|jkr?|j|jdS|jdtodttdt }|||d||SdS(s Function used for unpickling proxy objects. If possible the shared object is returned, or otherwise a proxy for it. RbiRMt _inheritingN( R;RRWRRXRtpopRhR(RARR^R.RRM((s0/usr/lib64/python2.7/multiprocessing/managers.pyR_s cBse|}y|||fSWnek r1nXi}x |D]}d||f|Uq?We|ef|}||_||||f<|S(sC Return an proxy type whose methods are given by `exposed` sLdef %s(self, *args, **kwds): return self._callmethod(%r, args, kwds)(RRR2RR(R@Rt_cachetdictmetht ProxyType((s0/usr/lib64/python2.7/multiprocessing/managers.pyt MakeProxyTypets    c Cst|d}|dkr\||jd|}zt|dd|f}Wd|jXn|dkr|dk r|j}n|dkrtj}ntd|j |}|||d|d|d|} t | _ | S(s* Return an auto-proxy for `token` iRTRINs AutoProxy[%s]RRM( RURWRR1RmRRRTR RRhR( RR^RRTRRMRRR R((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs     t NamespacecBseZdZdZRS(cKs|jj|dS(N(Rtupdate(RR.((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscCss|jj}g}x=|D]5\}}|jds|jd||fqqW|jdtjd|S(NRCs%s=%rs Namespace(%s)s, (RRt startswithR=RR3R(RRR?R@R((s0/usr/lib64/python2.7/multiprocessing/managers.pyR#s (R$R%RR#(((s0/usr/lib64/python2.7/multiprocessing/managers.pyR s tValuecBs>eZedZdZdZdZeeeZRS(cCs||_||_dS(N(t _typecodet_value(RRRtlock((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs cCs|jS(N(R(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyR|scCs ||_dS(N(R(RR((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscCs dt|j|j|jfS(Ns %s(%r, %r)(R2R$RR(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyR#s( R$R%RhRR|RR#RR(((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs     cCstj||S(N(R(RtsequenceR((s0/usr/lib64/python2.7/multiprocessing/managers.pytArrayst IteratorProxycBsDeZd ZdZdZdZdZd Zd ZRS( t__next__tnextR(tthrowRmcCs|S(N((R((s0/usr/lib64/python2.7/multiprocessing/managers.pyt__iter__scGs|jd|S(NR(R(RR-((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscGs|jd|S(NR(R(RR-((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscGs|jd|S(NR((R(RR-((s0/usr/lib64/python2.7/multiprocessing/managers.pyR(scGs|jd|S(NR(R(RR-((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscGs|jd|S(NRm(R(RR-((s0/usr/lib64/python2.7/multiprocessing/managers.pyRms(s__next__snextssendsthrowsclose( R$R%RRRRR(RRm(((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs     t AcquirerProxycBs5eZdZedZdZdZdZRS(RRcCs|jd|fS(NR(R(Rtblocking((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscCs |jdS(NR(R(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscCs |jdS(NR(R(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscCs |jdS(NR(R(RRRR((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs(sacquiresrelease(R$R%RRhRRRR(((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs    tConditionProxycBs,eZdZd dZdZdZRS( RRtwaittnotifyt notify_allcCs|jd|fS(NR(R(RR((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscCs |jdS(NR(R(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscCs |jdS(NR(R(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs(sacquiresreleaseswaitsnotifys notify_allN(R$R%RRWRRR(((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs  t EventProxycBs5eZdZdZdZdZd dZRS( tis_setRRRcCs |jdS(NR (R(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyR scCs |jdS(NR(R(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscCs |jdS(NR(R(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyRscCs|jd|fS(NR(R(RR((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs(sis_setssetsclearswaitN(R$R%RR RRRWR(((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs    tNamespaceProxycBs)eZdZdZdZdZRS(t__getattribute__t __setattr__t __delattr__cCsB|ddkr tj||Stj|d}|d|fS(NiRCRR"(tobjectR"(RRt callmethod((s0/usr/lib64/python2.7/multiprocessing/managers.pyt __getattr__scCsH|ddkr#tj|||Stj|d}|d||fS(NiRCRR#(R%R#R"(RRRR&((s0/usr/lib64/python2.7/multiprocessing/managers.pyR#scCsB|ddkr tj||Stj|d}|d|fS(NiRCRR$(R%R$R"(RRR&((s0/usr/lib64/python2.7/multiprocessing/managers.pyR$s(s__getattribute__s __setattr__s __delattr__(R$R%RR'R#R$(((s0/usr/lib64/python2.7/multiprocessing/managers.pyR!s  t ValueProxycBs/eZdZdZdZeeeZRS(R|RcCs |jdS(NR|(R(R((s0/usr/lib64/python2.7/multiprocessing/managers.pyR| scCs|jd|fS(NR(R(RR((s0/usr/lib64/python2.7/multiprocessing/managers.pyRs(sgetsset(R$R%RR|RRR(((s0/usr/lib64/python2.7/multiprocessing/managers.pyR( s  t BaseListProxyt__add__t __contains__t __delitem__t __delslice__t __getitem__t __getslice__t__len__t__mul__t __reversed__t__rmul__t __setitem__t __setslice__R=tcounttextendtindextinsertRtremovetreverseRt__imul__t ListProxycBseZdZdZRS(cCs|jd|f|S(NR7(R(RR((s0/usr/lib64/python2.7/multiprocessing/managers.pyt__iadd__scCs|jd|f|S(NR<(R(RR((s0/usr/lib64/python2.7/multiprocessing/managers.pyR<s(R$R%R>R<(((s0/usr/lib64/python2.7/multiprocessing/managers.pyR=s t DictProxyRRR|thas_keytpopitemt setdefaultR t ArrayProxyt PoolProxytapplyt apply_asyncRmtimaptimap_unorderedRtmapt map_asyncRt AsyncResulttIteratorcBseZdZRS(s( Subclass of `BaseManager` which supports a number of shared object types. The types registered are those intended for the synchronization of threads, plus `dict`, `list` and `Namespace`. The `multiprocessing.Manager()` function creates started instances of this class. (R$R%R&(((s0/usr/lib64/python2.7/multiprocessing/managers.pyR?s tQueuet JoinableQueuetEventtLockR[t SemaphoretBoundedSemaphoret ConditionRRRRRR(Ut__all__tosRtweakrefRZRRMRRtmultiprocessingRRRRR R tmultiprocessing.processR tmultiprocessing.forkingR R RRtmultiprocessing.utilRRtcPickleRt ImportErrorRRRR@R2R;t view_typesR%RR1R*RsR5RBRDRERR_R`t XmlListenert XmlClientRURRRRRR RWRhRR RRRRRRR!R(R)R=R?RCRDRRRORPR[RQRRRSRRR(((s0/usr/lib64/python2.7/multiprocessing/managers.pyt$s      ."  4  ,                 connection.py000064400000075705147207507420007303 0ustar00# # A higher level module for using sockets (or Windows named pipes) # # multiprocessing/connection.py # # Copyright (c) 2006-2008, R Oudkerk # Licensed to PSF under a Contributor Agreement. # __all__ = [ 'Client', 'Listener', 'Pipe', 'wait' ] import io import os import sys import socket import struct import time import tempfile import itertools import _multiprocessing from . import util from . import AuthenticationError, BufferTooShort from .context import reduction _ForkingPickler = reduction.ForkingPickler try: import _winapi from _winapi import WAIT_OBJECT_0, WAIT_ABANDONED_0, WAIT_TIMEOUT, INFINITE except ImportError: if sys.platform == 'win32': raise _winapi = None # # # BUFSIZE = 8192 # A very generous timeout when it comes to local connections... CONNECTION_TIMEOUT = 20. _mmap_counter = itertools.count() default_family = 'AF_INET' families = ['AF_INET'] if hasattr(socket, 'AF_UNIX'): default_family = 'AF_UNIX' families += ['AF_UNIX'] if sys.platform == 'win32': default_family = 'AF_PIPE' families += ['AF_PIPE'] def _init_timeout(timeout=CONNECTION_TIMEOUT): return time.monotonic() + timeout def _check_timeout(t): return time.monotonic() > t # # # def arbitrary_address(family): ''' Return an arbitrary free address for the given family ''' if family == 'AF_INET': return ('localhost', 0) elif family == 'AF_UNIX': return tempfile.mktemp(prefix='listener-', dir=util.get_temp_dir()) elif family == 'AF_PIPE': return tempfile.mktemp(prefix=r'\\.\pipe\pyc-%d-%d-' % (os.getpid(), next(_mmap_counter)), dir="") else: raise ValueError('unrecognized family') def _validate_family(family): ''' Checks if the family is valid for the current environment. ''' if sys.platform != 'win32' and family == 'AF_PIPE': raise ValueError('Family %s is not recognized.' % family) if sys.platform == 'win32' and family == 'AF_UNIX': # double check if not hasattr(socket, family): raise ValueError('Family %s is not recognized.' % family) def address_type(address): ''' Return the types of the address This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE' ''' if type(address) == tuple: return 'AF_INET' elif type(address) is str and address.startswith('\\\\'): return 'AF_PIPE' elif type(address) is str or util.is_abstract_socket_namespace(address): return 'AF_UNIX' else: raise ValueError('address type of %r unrecognized' % address) # # Connection classes # class _ConnectionBase: _handle = None def __init__(self, handle, readable=True, writable=True): handle = handle.__index__() if handle < 0: raise ValueError("invalid handle") if not readable and not writable: raise ValueError( "at least one of `readable` and `writable` must be True") self._handle = handle self._readable = readable self._writable = writable # XXX should we use util.Finalize instead of a __del__? def __del__(self): if self._handle is not None: self._close() def _check_closed(self): if self._handle is None: raise OSError("handle is closed") def _check_readable(self): if not self._readable: raise OSError("connection is write-only") def _check_writable(self): if not self._writable: raise OSError("connection is read-only") def _bad_message_length(self): if self._writable: self._readable = False else: self.close() raise OSError("bad message length") @property def closed(self): """True if the connection is closed""" return self._handle is None @property def readable(self): """True if the connection is readable""" return self._readable @property def writable(self): """True if the connection is writable""" return self._writable def fileno(self): """File descriptor or handle of the connection""" self._check_closed() return self._handle def close(self): """Close the connection""" if self._handle is not None: try: self._close() finally: self._handle = None def send_bytes(self, buf, offset=0, size=None): """Send the bytes data from a bytes-like object""" self._check_closed() self._check_writable() m = memoryview(buf) # HACK for byte-indexing of non-bytewise buffers (e.g. array.array) if m.itemsize > 1: m = memoryview(bytes(m)) n = len(m) if offset < 0: raise ValueError("offset is negative") if n < offset: raise ValueError("buffer length < offset") if size is None: size = n - offset elif size < 0: raise ValueError("size is negative") elif offset + size > n: raise ValueError("buffer length < offset + size") self._send_bytes(m[offset:offset + size]) def send(self, obj): """Send a (picklable) object""" self._check_closed() self._check_writable() self._send_bytes(_ForkingPickler.dumps(obj)) def recv_bytes(self, maxlength=None): """ Receive bytes data as a bytes object. """ self._check_closed() self._check_readable() if maxlength is not None and maxlength < 0: raise ValueError("negative maxlength") buf = self._recv_bytes(maxlength) if buf is None: self._bad_message_length() return buf.getvalue() def recv_bytes_into(self, buf, offset=0): """ Receive bytes data into a writeable bytes-like object. Return the number of bytes read. """ self._check_closed() self._check_readable() with memoryview(buf) as m: # Get bytesize of arbitrary buffer itemsize = m.itemsize bytesize = itemsize * len(m) if offset < 0: raise ValueError("negative offset") elif offset > bytesize: raise ValueError("offset too large") result = self._recv_bytes() size = result.tell() if bytesize < offset + size: raise BufferTooShort(result.getvalue()) # Message can fit in dest result.seek(0) result.readinto(m[offset // itemsize : (offset + size) // itemsize]) return size def recv(self): """Receive a (picklable) object""" self._check_closed() self._check_readable() buf = self._recv_bytes() return _ForkingPickler.loads(buf.getbuffer()) def poll(self, timeout=0.0): """Whether there is any input available to be read""" self._check_closed() self._check_readable() return self._poll(timeout) def __enter__(self): return self def __exit__(self, exc_type, exc_value, exc_tb): self.close() if _winapi: class PipeConnection(_ConnectionBase): """ Connection class based on a Windows named pipe. Overlapped I/O is used, so the handles must have been created with FILE_FLAG_OVERLAPPED. """ _got_empty_message = False def _close(self, _CloseHandle=_winapi.CloseHandle): _CloseHandle(self._handle) def _send_bytes(self, buf): ov, err = _winapi.WriteFile(self._handle, buf, overlapped=True) try: if err == _winapi.ERROR_IO_PENDING: waitres = _winapi.WaitForMultipleObjects( [ov.event], False, INFINITE) assert waitres == WAIT_OBJECT_0 except: ov.cancel() raise finally: nwritten, err = ov.GetOverlappedResult(True) assert err == 0 assert nwritten == len(buf) def _recv_bytes(self, maxsize=None): if self._got_empty_message: self._got_empty_message = False return io.BytesIO() else: bsize = 128 if maxsize is None else min(maxsize, 128) try: ov, err = _winapi.ReadFile(self._handle, bsize, overlapped=True) try: if err == _winapi.ERROR_IO_PENDING: waitres = _winapi.WaitForMultipleObjects( [ov.event], False, INFINITE) assert waitres == WAIT_OBJECT_0 except: ov.cancel() raise finally: nread, err = ov.GetOverlappedResult(True) if err == 0: f = io.BytesIO() f.write(ov.getbuffer()) return f elif err == _winapi.ERROR_MORE_DATA: return self._get_more_data(ov, maxsize) except OSError as e: if e.winerror == _winapi.ERROR_BROKEN_PIPE: raise EOFError else: raise raise RuntimeError("shouldn't get here; expected KeyboardInterrupt") def _poll(self, timeout): if (self._got_empty_message or _winapi.PeekNamedPipe(self._handle)[0] != 0): return True return bool(wait([self], timeout)) def _get_more_data(self, ov, maxsize): buf = ov.getbuffer() f = io.BytesIO() f.write(buf) left = _winapi.PeekNamedPipe(self._handle)[1] assert left > 0 if maxsize is not None and len(buf) + left > maxsize: self._bad_message_length() ov, err = _winapi.ReadFile(self._handle, left, overlapped=True) rbytes, err = ov.GetOverlappedResult(True) assert err == 0 assert rbytes == left f.write(ov.getbuffer()) return f class Connection(_ConnectionBase): """ Connection class based on an arbitrary file descriptor (Unix only), or a socket handle (Windows). """ if _winapi: def _close(self, _close=_multiprocessing.closesocket): _close(self._handle) _write = _multiprocessing.send _read = _multiprocessing.recv else: def _close(self, _close=os.close): _close(self._handle) _write = os.write _read = os.read def _send(self, buf, write=_write): remaining = len(buf) while True: n = write(self._handle, buf) remaining -= n if remaining == 0: break buf = buf[n:] def _recv(self, size, read=_read): buf = io.BytesIO() handle = self._handle remaining = size while remaining > 0: chunk = read(handle, remaining) n = len(chunk) if n == 0: if remaining == size: raise EOFError else: raise OSError("got end of file during message") buf.write(chunk) remaining -= n return buf def _send_bytes(self, buf): n = len(buf) if n > 0x7fffffff: pre_header = struct.pack("!i", -1) header = struct.pack("!Q", n) self._send(pre_header) self._send(header) self._send(buf) else: # For wire compatibility with 3.7 and lower header = struct.pack("!i", n) if n > 16384: # The payload is large so Nagle's algorithm won't be triggered # and we'd better avoid the cost of concatenation. self._send(header) self._send(buf) else: # Issue #20540: concatenate before sending, to avoid delays due # to Nagle's algorithm on a TCP socket. # Also note we want to avoid sending a 0-length buffer separately, # to avoid "broken pipe" errors if the other end closed the pipe. self._send(header + buf) def _recv_bytes(self, maxsize=None): buf = self._recv(4) size, = struct.unpack("!i", buf.getvalue()) if size == -1: buf = self._recv(8) size, = struct.unpack("!Q", buf.getvalue()) if maxsize is not None and size > maxsize: return None return self._recv(size) def _poll(self, timeout): r = wait([self], timeout) return bool(r) # # Public functions # class Listener(object): ''' Returns a listener object. This is a wrapper for a bound socket which is 'listening' for connections, or for a Windows named pipe. ''' def __init__(self, address=None, family=None, backlog=1, authkey=None): family = family or (address and address_type(address)) \ or default_family address = address or arbitrary_address(family) _validate_family(family) if family == 'AF_PIPE': self._listener = PipeListener(address, backlog) else: self._listener = SocketListener(address, family, backlog) if authkey is not None and not isinstance(authkey, bytes): raise TypeError('authkey should be a byte string') self._authkey = authkey def accept(self): ''' Accept a connection on the bound socket or named pipe of `self`. Returns a `Connection` object. ''' if self._listener is None: raise OSError('listener is closed') c = self._listener.accept() if self._authkey: deliver_challenge(c, self._authkey) answer_challenge(c, self._authkey) return c def close(self): ''' Close the bound socket or named pipe of `self`. ''' listener = self._listener if listener is not None: self._listener = None listener.close() @property def address(self): return self._listener._address @property def last_accepted(self): return self._listener._last_accepted def __enter__(self): return self def __exit__(self, exc_type, exc_value, exc_tb): self.close() def Client(address, family=None, authkey=None): ''' Returns a connection to the address of a `Listener` ''' family = family or address_type(address) _validate_family(family) if family == 'AF_PIPE': c = PipeClient(address) else: c = SocketClient(address) if authkey is not None and not isinstance(authkey, bytes): raise TypeError('authkey should be a byte string') if authkey is not None: answer_challenge(c, authkey) deliver_challenge(c, authkey) return c if sys.platform != 'win32': def Pipe(duplex=True): ''' Returns pair of connection objects at either end of a pipe ''' if duplex: s1, s2 = socket.socketpair() s1.setblocking(True) s2.setblocking(True) c1 = Connection(s1.detach()) c2 = Connection(s2.detach()) else: fd1, fd2 = os.pipe() c1 = Connection(fd1, writable=False) c2 = Connection(fd2, readable=False) return c1, c2 else: def Pipe(duplex=True): ''' Returns pair of connection objects at either end of a pipe ''' address = arbitrary_address('AF_PIPE') if duplex: openmode = _winapi.PIPE_ACCESS_DUPLEX access = _winapi.GENERIC_READ | _winapi.GENERIC_WRITE obsize, ibsize = BUFSIZE, BUFSIZE else: openmode = _winapi.PIPE_ACCESS_INBOUND access = _winapi.GENERIC_WRITE obsize, ibsize = 0, BUFSIZE h1 = _winapi.CreateNamedPipe( address, openmode | _winapi.FILE_FLAG_OVERLAPPED | _winapi.FILE_FLAG_FIRST_PIPE_INSTANCE, _winapi.PIPE_TYPE_MESSAGE | _winapi.PIPE_READMODE_MESSAGE | _winapi.PIPE_WAIT, 1, obsize, ibsize, _winapi.NMPWAIT_WAIT_FOREVER, # default security descriptor: the handle cannot be inherited _winapi.NULL ) h2 = _winapi.CreateFile( address, access, 0, _winapi.NULL, _winapi.OPEN_EXISTING, _winapi.FILE_FLAG_OVERLAPPED, _winapi.NULL ) _winapi.SetNamedPipeHandleState( h2, _winapi.PIPE_READMODE_MESSAGE, None, None ) overlapped = _winapi.ConnectNamedPipe(h1, overlapped=True) _, err = overlapped.GetOverlappedResult(True) assert err == 0 c1 = PipeConnection(h1, writable=duplex) c2 = PipeConnection(h2, readable=duplex) return c1, c2 # # Definitions for connections based on sockets # class SocketListener(object): ''' Representation of a socket which is bound to an address and listening ''' def __init__(self, address, family, backlog=1): self._socket = socket.socket(getattr(socket, family)) try: # SO_REUSEADDR has different semantics on Windows (issue #2550). if os.name == 'posix': self._socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self._socket.setblocking(True) self._socket.bind(address) self._socket.listen(backlog) self._address = self._socket.getsockname() except OSError: self._socket.close() raise self._family = family self._last_accepted = None if family == 'AF_UNIX' and not util.is_abstract_socket_namespace(address): # Linux abstract socket namespaces do not need to be explicitly unlinked self._unlink = util.Finalize( self, os.unlink, args=(address,), exitpriority=0 ) else: self._unlink = None def accept(self): s, self._last_accepted = self._socket.accept() s.setblocking(True) return Connection(s.detach()) def close(self): try: self._socket.close() finally: unlink = self._unlink if unlink is not None: self._unlink = None unlink() def SocketClient(address): ''' Return a connection object connected to the socket given by `address` ''' family = address_type(address) with socket.socket( getattr(socket, family) ) as s: s.setblocking(True) s.connect(address) return Connection(s.detach()) # # Definitions for connections based on named pipes # if sys.platform == 'win32': class PipeListener(object): ''' Representation of a named pipe ''' def __init__(self, address, backlog=None): self._address = address self._handle_queue = [self._new_handle(first=True)] self._last_accepted = None util.sub_debug('listener created with address=%r', self._address) self.close = util.Finalize( self, PipeListener._finalize_pipe_listener, args=(self._handle_queue, self._address), exitpriority=0 ) def _new_handle(self, first=False): flags = _winapi.PIPE_ACCESS_DUPLEX | _winapi.FILE_FLAG_OVERLAPPED if first: flags |= _winapi.FILE_FLAG_FIRST_PIPE_INSTANCE return _winapi.CreateNamedPipe( self._address, flags, _winapi.PIPE_TYPE_MESSAGE | _winapi.PIPE_READMODE_MESSAGE | _winapi.PIPE_WAIT, _winapi.PIPE_UNLIMITED_INSTANCES, BUFSIZE, BUFSIZE, _winapi.NMPWAIT_WAIT_FOREVER, _winapi.NULL ) def accept(self): self._handle_queue.append(self._new_handle()) handle = self._handle_queue.pop(0) try: ov = _winapi.ConnectNamedPipe(handle, overlapped=True) except OSError as e: if e.winerror != _winapi.ERROR_NO_DATA: raise # ERROR_NO_DATA can occur if a client has already connected, # written data and then disconnected -- see Issue 14725. else: try: res = _winapi.WaitForMultipleObjects( [ov.event], False, INFINITE) except: ov.cancel() _winapi.CloseHandle(handle) raise finally: _, err = ov.GetOverlappedResult(True) assert err == 0 return PipeConnection(handle) @staticmethod def _finalize_pipe_listener(queue, address): util.sub_debug('closing listener with address=%r', address) for handle in queue: _winapi.CloseHandle(handle) def PipeClient(address): ''' Return a connection object connected to the pipe given by `address` ''' t = _init_timeout() while 1: try: _winapi.WaitNamedPipe(address, 1000) h = _winapi.CreateFile( address, _winapi.GENERIC_READ | _winapi.GENERIC_WRITE, 0, _winapi.NULL, _winapi.OPEN_EXISTING, _winapi.FILE_FLAG_OVERLAPPED, _winapi.NULL ) except OSError as e: if e.winerror not in (_winapi.ERROR_SEM_TIMEOUT, _winapi.ERROR_PIPE_BUSY) or _check_timeout(t): raise else: break else: raise _winapi.SetNamedPipeHandleState( h, _winapi.PIPE_READMODE_MESSAGE, None, None ) return PipeConnection(h) # # Authentication stuff # MESSAGE_LENGTH = 20 CHALLENGE = b'#CHALLENGE#' WELCOME = b'#WELCOME#' FAILURE = b'#FAILURE#' def deliver_challenge(connection, authkey): import hmac if not isinstance(authkey, bytes): raise ValueError( "Authkey must be bytes, not {0!s}".format(type(authkey))) message = os.urandom(MESSAGE_LENGTH) connection.send_bytes(CHALLENGE + message) digest = hmac.new(authkey, message, 'md5').digest() response = connection.recv_bytes(256) # reject large message if response == digest: connection.send_bytes(WELCOME) else: connection.send_bytes(FAILURE) raise AuthenticationError('digest received was wrong') def answer_challenge(connection, authkey): import hmac if not isinstance(authkey, bytes): raise ValueError( "Authkey must be bytes, not {0!s}".format(type(authkey))) message = connection.recv_bytes(256) # reject large message assert message[:len(CHALLENGE)] == CHALLENGE, 'message = %r' % message message = message[len(CHALLENGE):] digest = hmac.new(authkey, message, 'md5').digest() connection.send_bytes(digest) response = connection.recv_bytes(256) # reject large message if response != WELCOME: raise AuthenticationError('digest sent was rejected') # # Support for using xmlrpclib for serialization # class ConnectionWrapper(object): def __init__(self, conn, dumps, loads): self._conn = conn self._dumps = dumps self._loads = loads for attr in ('fileno', 'close', 'poll', 'recv_bytes', 'send_bytes'): obj = getattr(conn, attr) setattr(self, attr, obj) def send(self, obj): s = self._dumps(obj) self._conn.send_bytes(s) def recv(self): s = self._conn.recv_bytes() return self._loads(s) def _xml_dumps(obj): return xmlrpclib.dumps((obj,), None, None, None, 1).encode('utf-8') def _xml_loads(s): (obj,), method = xmlrpclib.loads(s.decode('utf-8')) return obj class XmlListener(Listener): def accept(self): global xmlrpclib import xmlrpc.client as xmlrpclib obj = Listener.accept(self) return ConnectionWrapper(obj, _xml_dumps, _xml_loads) def XmlClient(*args, **kwds): global xmlrpclib import xmlrpc.client as xmlrpclib return ConnectionWrapper(Client(*args, **kwds), _xml_dumps, _xml_loads) # # Wait # if sys.platform == 'win32': def _exhaustive_wait(handles, timeout): # Return ALL handles which are currently signalled. (Only # returning the first signalled might create starvation issues.) L = list(handles) ready = [] while L: res = _winapi.WaitForMultipleObjects(L, False, timeout) if res == WAIT_TIMEOUT: break elif WAIT_OBJECT_0 <= res < WAIT_OBJECT_0 + len(L): res -= WAIT_OBJECT_0 elif WAIT_ABANDONED_0 <= res < WAIT_ABANDONED_0 + len(L): res -= WAIT_ABANDONED_0 else: raise RuntimeError('Should not get here') ready.append(L[res]) L = L[res+1:] timeout = 0 return ready _ready_errors = {_winapi.ERROR_BROKEN_PIPE, _winapi.ERROR_NETNAME_DELETED} def wait(object_list, timeout=None): ''' Wait till an object in object_list is ready/readable. Returns list of those objects in object_list which are ready/readable. ''' if timeout is None: timeout = INFINITE elif timeout < 0: timeout = 0 else: timeout = int(timeout * 1000 + 0.5) object_list = list(object_list) waithandle_to_obj = {} ov_list = [] ready_objects = set() ready_handles = set() try: for o in object_list: try: fileno = getattr(o, 'fileno') except AttributeError: waithandle_to_obj[o.__index__()] = o else: # start an overlapped read of length zero try: ov, err = _winapi.ReadFile(fileno(), 0, True) except OSError as e: ov, err = None, e.winerror if err not in _ready_errors: raise if err == _winapi.ERROR_IO_PENDING: ov_list.append(ov) waithandle_to_obj[ov.event] = o else: # If o.fileno() is an overlapped pipe handle and # err == 0 then there is a zero length message # in the pipe, but it HAS NOT been consumed... if ov and sys.getwindowsversion()[:2] >= (6, 2): # ... except on Windows 8 and later, where # the message HAS been consumed. try: _, err = ov.GetOverlappedResult(False) except OSError as e: err = e.winerror if not err and hasattr(o, '_got_empty_message'): o._got_empty_message = True ready_objects.add(o) timeout = 0 ready_handles = _exhaustive_wait(waithandle_to_obj.keys(), timeout) finally: # request that overlapped reads stop for ov in ov_list: ov.cancel() # wait for all overlapped reads to stop for ov in ov_list: try: _, err = ov.GetOverlappedResult(True) except OSError as e: err = e.winerror if err not in _ready_errors: raise if err != _winapi.ERROR_OPERATION_ABORTED: o = waithandle_to_obj[ov.event] ready_objects.add(o) if err == 0: # If o.fileno() is an overlapped pipe handle then # a zero length message HAS been consumed. if hasattr(o, '_got_empty_message'): o._got_empty_message = True ready_objects.update(waithandle_to_obj[h] for h in ready_handles) return [o for o in object_list if o in ready_objects] else: import selectors # poll/select have the advantage of not requiring any extra file # descriptor, contrarily to epoll/kqueue (also, they require a single # syscall). if hasattr(selectors, 'PollSelector'): _WaitSelector = selectors.PollSelector else: _WaitSelector = selectors.SelectSelector def wait(object_list, timeout=None): ''' Wait till an object in object_list is ready/readable. Returns list of those objects in object_list which are ready/readable. ''' with _WaitSelector() as selector: for obj in object_list: selector.register(obj, selectors.EVENT_READ) if timeout is not None: deadline = time.monotonic() + timeout while True: ready = selector.select(timeout) if ready: return [key.fileobj for (key, events) in ready] else: if timeout is not None: timeout = deadline - time.monotonic() if timeout < 0: return ready # # Make connection and socket objects sharable if possible # if sys.platform == 'win32': def reduce_connection(conn): handle = conn.fileno() with socket.fromfd(handle, socket.AF_INET, socket.SOCK_STREAM) as s: from . import resource_sharer ds = resource_sharer.DupSocket(s) return rebuild_connection, (ds, conn.readable, conn.writable) def rebuild_connection(ds, readable, writable): sock = ds.detach() return Connection(sock.detach(), readable, writable) reduction.register(Connection, reduce_connection) def reduce_pipe_connection(conn): access = ((_winapi.FILE_GENERIC_READ if conn.readable else 0) | (_winapi.FILE_GENERIC_WRITE if conn.writable else 0)) dh = reduction.DupHandle(conn.fileno(), access) return rebuild_pipe_connection, (dh, conn.readable, conn.writable) def rebuild_pipe_connection(dh, readable, writable): handle = dh.detach() return PipeConnection(handle, readable, writable) reduction.register(PipeConnection, reduce_pipe_connection) else: def reduce_connection(conn): df = reduction.DupFd(conn.fileno()) return rebuild_connection, (df, conn.readable, conn.writable) def rebuild_connection(df, readable, writable): fd = df.detach() return Connection(fd, readable, writable) reduction.register(Connection, reduce_connection) popen_forkserver.py000064400000004266147221272370010526 0ustar00import io import os from .context import reduction, set_spawning_popen if not reduction.HAVE_SEND_HANDLE: raise ImportError('No support for sending fds between processes') from . import forkserver from . import popen_fork from . import spawn from . import util __all__ = ['Popen'] # # Wrapper for an fd used while launching a process # class _DupFd(object): def __init__(self, ind): self.ind = ind def detach(self): return forkserver.get_inherited_fds()[self.ind] # # Start child process using a server process # class Popen(popen_fork.Popen): method = 'forkserver' DupFd = _DupFd def __init__(self, process_obj): self._fds = [] super().__init__(process_obj) def duplicate_for_child(self, fd): self._fds.append(fd) return len(self._fds) - 1 def _launch(self, process_obj): prep_data = spawn.get_preparation_data(process_obj._name) buf = io.BytesIO() set_spawning_popen(self) try: reduction.dump(prep_data, buf) reduction.dump(process_obj, buf) finally: set_spawning_popen(None) self.sentinel, w = forkserver.connect_to_new_process(self._fds) # Keep a duplicate of the data pipe's write end as a sentinel of the # parent process used by the child process. _parent_w = os.dup(w) self.finalizer = util.Finalize(self, util.close_fds, (_parent_w, self.sentinel)) with open(w, 'wb', closefd=True) as f: f.write(buf.getbuffer()) self.pid = forkserver.read_signed(self.sentinel) def poll(self, flag=os.WNOHANG): if self.returncode is None: from multiprocessing.connection import wait timeout = 0 if flag == os.WNOHANG else None if not wait([self.sentinel], timeout): return None try: self.returncode = forkserver.read_signed(self.sentinel) except (OSError, EOFError): # This should not happen usually, but perhaps the forkserver # process itself got killed self.returncode = 255 return self.returncode popen_fork.py000064400000005010147221272370007263 0ustar00import os import signal from . import util __all__ = ['Popen'] # # Start child process using fork # class Popen(object): method = 'fork' def __init__(self, process_obj): util._flush_std_streams() self.returncode = None self.finalizer = None self._launch(process_obj) def duplicate_for_child(self, fd): return fd def poll(self, flag=os.WNOHANG): if self.returncode is None: try: pid, sts = os.waitpid(self.pid, flag) except OSError as e: # Child process not yet created. See #1731717 # e.errno == errno.ECHILD == 10 return None if pid == self.pid: if os.WIFSIGNALED(sts): self.returncode = -os.WTERMSIG(sts) else: assert os.WIFEXITED(sts), "Status is {:n}".format(sts) self.returncode = os.WEXITSTATUS(sts) return self.returncode def wait(self, timeout=None): if self.returncode is None: if timeout is not None: from multiprocessing.connection import wait if not wait([self.sentinel], timeout): return None # This shouldn't block if wait() returned successfully. return self.poll(os.WNOHANG if timeout == 0.0 else 0) return self.returncode def _send_signal(self, sig): if self.returncode is None: try: os.kill(self.pid, sig) except ProcessLookupError: pass except OSError: if self.wait(timeout=0.1) is None: raise def terminate(self): self._send_signal(signal.SIGTERM) def kill(self): self._send_signal(signal.SIGKILL) def _launch(self, process_obj): code = 1 parent_r, child_w = os.pipe() child_r, parent_w = os.pipe() self.pid = os.fork() if self.pid == 0: try: os.close(parent_r) os.close(parent_w) code = process_obj._bootstrap(parent_sentinel=child_r) finally: os._exit(code) else: os.close(child_w) os.close(child_r) self.finalizer = util.Finalize(self, util.close_fds, (parent_r, parent_w,)) self.sentinel = parent_r def close(self): if self.finalizer is not None: self.finalizer() semaphore_tracker.py000064400000012422147221272370010624 0ustar00# # On Unix we run a server process which keeps track of unlinked # semaphores. The server ignores SIGINT and SIGTERM and reads from a # pipe. Every other process of the program has a copy of the writable # end of the pipe, so we get EOF when all other processes have exited. # Then the server process unlinks any remaining semaphore names. # # This is important because the system only supports a limited number # of named semaphores, and they will not be automatically removed till # the next reboot. Without this semaphore tracker process, "killall # python" would probably leave unlinked semaphores. # import os import signal import sys import threading import warnings import _multiprocessing from . import spawn from . import util __all__ = ['ensure_running', 'register', 'unregister'] class SemaphoreTracker(object): def __init__(self): self._lock = threading.Lock() self._fd = None self._pid = None def getfd(self): self.ensure_running() return self._fd def ensure_running(self): '''Make sure that semaphore tracker process is running. This can be run from any process. Usually a child process will use the semaphore created by its parent.''' with self._lock: if self._pid is not None: # semaphore tracker was launched before, is it still running? pid, status = os.waitpid(self._pid, os.WNOHANG) if not pid: # => still alive return # => dead, launch it again os.close(self._fd) self._fd = None self._pid = None warnings.warn('semaphore_tracker: process died unexpectedly, ' 'relaunching. Some semaphores might leak.') fds_to_pass = [] try: fds_to_pass.append(sys.stderr.fileno()) except Exception: pass cmd = 'from multiprocessing.semaphore_tracker import main;main(%d)' r, w = os.pipe() try: fds_to_pass.append(r) # process will out live us, so no need to wait on pid exe = spawn.get_executable() args = [exe] + util._args_from_interpreter_flags() args += ['-c', cmd % r] pid = util.spawnv_passfds(exe, args, fds_to_pass) except: os.close(w) raise else: self._fd = w self._pid = pid finally: os.close(r) def register(self, name): '''Register name of semaphore with semaphore tracker.''' self._send('REGISTER', name) def unregister(self, name): '''Unregister name of semaphore with semaphore tracker.''' self._send('UNREGISTER', name) def _send(self, cmd, name): self.ensure_running() msg = '{0}:{1}\n'.format(cmd, name).encode('ascii') if len(name) > 512: # posix guarantees that writes to a pipe of less than PIPE_BUF # bytes are atomic, and that PIPE_BUF >= 512 raise ValueError('name too long') nbytes = os.write(self._fd, msg) assert nbytes == len(msg) _semaphore_tracker = SemaphoreTracker() ensure_running = _semaphore_tracker.ensure_running register = _semaphore_tracker.register unregister = _semaphore_tracker.unregister getfd = _semaphore_tracker.getfd def main(fd): '''Run semaphore tracker.''' # protect the process from ^C and "killall python" etc signal.signal(signal.SIGINT, signal.SIG_IGN) signal.signal(signal.SIGTERM, signal.SIG_IGN) for f in (sys.stdin, sys.stdout): try: f.close() except Exception: pass cache = set() try: # keep track of registered/unregistered semaphores with open(fd, 'rb') as f: for line in f: try: cmd, name = line.strip().split(b':') if cmd == b'REGISTER': cache.add(name) elif cmd == b'UNREGISTER': cache.remove(name) else: raise RuntimeError('unrecognized command %r' % cmd) except Exception: try: sys.excepthook(*sys.exc_info()) except: pass finally: # all processes have terminated; cleanup any remaining semaphores if cache: try: warnings.warn('semaphore_tracker: There appear to be %d ' 'leaked semaphores to clean up at shutdown' % len(cache)) except Exception: pass for name in cache: # For some reason the process which created and registered this # semaphore has failed to unregister it. Presumably it has died. # We therefore unlink it. try: name = name.decode('ascii') try: _multiprocessing.sem_unlink(name) except Exception as e: warnings.warn('semaphore_tracker: %r: %s' % (name, e)) finally: pass __pycache__/spawn.cpython-36.opt-2.pyc000064400000013442147221272370013505 0ustar003 \"@s.ddlZddlZddlZddlZddlmZmZddlmZddlm Z ddlm Z ddd d d d d gZ ej dkrzdZ dZn&ej dkoeeddZ ejjjdZerejjejdanejadd Zdd ZddZddZdd Zd&ddZddZddZdd ZgZ dd Z!d!d"Z"d#d$Z#d%d Z$dS)'N)get_start_methodset_start_method)process) reduction)util_mainfreeze_supportset_executableget_executableget_preparation_dataget_command_lineimport_main_pathwin32Ffrozenzpythonservice.exez python.execCs|adS)N) _python_exe)Zexer-/usr/lib64/python3.6/multiprocessing/spawn.pyr )scCstS)N)rrrrrr -scCs$t|dkr|ddkrdSdSdS)Nrz--multiprocessing-forkTF)len)argvrrr is_forking4srcCshttjrdi}xBtjddD]0}|jd\}}|dkrBd||<qt|||<qWtf|tjdS)Nr=None)rsysrsplitint spawn_mainexit)kwdsargnamevaluerrrr >s   cKshttddr(tjdgdd|jDSd}|djdd |jD;}tj}tg|d |dgSdS) NrFz--multiprocessing-forkcSsg|] }d|qS)z%s=%rr).0itemrrr Tsz$get_command_line..zWsz#get_command_line..z-c)getattrr executableitemsjoinrZ_args_from_interpreter_flagsr)rprogZoptsrrrr Ns cCs\tjdkr.ddl}tj||}|j|tj}nddlm }||j _ |}t |}tj |dS)Nrrr)semaphore_tracker)rplatformmsvcrtrZ steal_handleZopen_osfhandleosO_RDONLYr,Z_semaphore_trackerZ_fdrr)Z pipe_handleZ parent_pidZ tracker_fdr.Z new_handlefdr,Zexitcoderrrr\s   rcCs^tj|ddd@}dtj_z$tjj|}t|tjj|}Wdtj`XWdQRX|j S)NrbT)closefd) r/fdopenrcurrent_process _inheritingrpickleloadprepare _bootstrap)r2Z from_parentZpreparation_dataselfrrrrms  cCsttjddrtddS)Nr7Fa An attempt has been made to start a new process before the current process has finished its bootstrapping phase. This probably means that you are not using fork to start your child processes and you have forgotten to use the proper idiom in the main module: if __name__ == '__main__': freeze_support() ... The "freeze_support()" line can be omitted if the program is not going to be frozen to produce an executable.)r'rr6 RuntimeErrorrrrr_check_not_importing_mainys r>cCs tttjtjjd}tjdk r2tjj|d<t j j }y|j d}Wnt k r^Yn Xtj||<|j||t jtjtjtdt jd}t|jdd}|dk r||d<nht jdkst ot rt|d d}|dk rtj j| otjdk r tj jtj|}tj j||d <|S) N) log_to_stderrauthkey log_levelr1)r!sys_pathsys_argvorig_dirdir start_method__main__r!init_main_from_namer__file__init_main_from_path)r>dictrZ_log_to_stderrrr6r@Z_loggerZgetEffectiveLevelrpathcopyindex ValueError ORIGINAL_DIRupdaterr/getcwdrmodulesr'__spec__r-WINEXE WINSERVICEisabsr*normpath)r!drBi main_moduleZ main_mod_name main_pathrrrr s>         cCsd|kr|dtj_d|kr,|dtj_d|krD|drDtjd|kr^tjj|dd|krp|dt_ d|kr|dt_ d|krt j |dd|kr|dt_ d |krt|d d d d |krt|d nd |krt|d dS)Nr!r@r?rArBrCrErDrFT)ZforcerHrJ)rr6r!r@rr?Z get_loggerZsetLevelrrLrr/chdirrPr_fixup_main_from_name_fixup_main_from_path)datarrrr:s,   r:cCs~tjd}|dks|jdr dSt|jdd|kr6dStj|tjd}t j |ddd}|j j ||tjd<tjd<dS)NrGz .__main__r! __mp_main__T)run_nameZ alter_sys) rrSendswithr'rTold_main_modulesappendtypes ModuleTyperunpyZ run_module__dict__rQ)Zmod_name current_mainr[ main_contentrrrr^s    r^cCstjd}tjjtjj|d}|dkr.dSt|dd|krBdStj|t j d}t j |dd}|j j||tjd<tjd<dS)NrGrZipythonrIra)rb)rrSr/rLsplitextbasenamer'rdrerfrgrhZrun_pathrirQ)r\rjZ main_namer[rkrrrr_s    r_cCs t|dS)N)r_)r\rrrrs)NN)%r/rrhrfr1rrrcontextrr__all__r-rUrVr'r(lowerrcrLr* exec_prefixrr r rr r rrr>r rdr:r^r_rrrrr s>        2&__pycache__/reduction.cpython-36.pyc000064400000017407147221272370013416 0ustar003 \ $@sddlmZmZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddddd gZ e j d kpeed oeed oeejd ZGdddejZejZd5dd Ze j d kre dddg7Z ddlZd6ddZddZddZddZGdddeZnHe dddg7Z ddlZe j dkZddZddZddZd dZd!dZd"d#Z Gd$d%d%Z!ee"e!j#e d&d'Z$ee"e%j&e$ee"e'j(e$d(d)Z)d*d+Z*eej+e)e j d krd,d-Z,d.d/Z-eeje,nd0d-Z,d1d/Z-eeje,Gd2d3d3ed4Z.dS)7)ABCMetaabstractmethodN)context send_handle recv_handleForkingPicklerregisterdumpwin32ZCMSG_LEN SCM_RIGHTSsendmsgcsJeZdZdZiZejZfddZe ddZ e d ddZ e j Z ZS) rz)Pickler subclass used by multiprocessing.cs*tj||jj|_|jj|jdS)N)super__init___copyreg_dispatch_tablecopydispatch_tableupdate_extra_reducers)selfargs) __class__!/usr/lib64/python3.6/reduction.pyr&s  zForkingPickler.__init__cCs||j|<dS)z&Register a reduce function for a type.N)r)clstypereducerrrr +szForkingPickler.registerNcCs tj}|||j||jS)N)ioBytesIOr getbuffer)robjprotocolZbufrrrdumps0szForkingPickler.dumps)N)__name__ __module__ __qualname____doc__rcopyregrrr classmethodr r"pickleloads __classcell__rr)rrr!s   cCst||j|dS)z3Replacement for pickle.dump() using ForkingPickler.N)rr )r filer!rrrr :s DupHandle duplicate steal_handleFcCs*|dkrtj}tjtj||d|tjS)zr?r@r0r5r6r2r1rAr7r8)rrErrrr=us  zDupHandle.detach)N)r#r$r%r&rr=rrrrr-ds DupFdsendfdsrecvfdsdarwincCsVtjd|}tt|dg}|j|gtjtj|fgtrR|jddkrRt ddS)z,Send an array of fds over an AF_UNIX socket.irAz%did not receive acknowledgement of fdN) arraybyteslenr socket SOL_SOCKETr ACKNOWLEDGEr< RuntimeError)sockZfdsmsgrrrrGs  c Cstjd}|j|}|jdtj|\}}}}| r>| r>tytrN|jdt|dkrjt dt||d\}} } |tj kr| tj krt| |jdkrt |j | t|d|dkstt|SWnt tfk rYnXt ddS) z/Receive an array of fds over an AF_UNIX socket.rJrrLzreceived %d items of ancdatarrKzInvalid data receivedN)rMitemsizeZrecvmsgrPZ CMSG_SPACEEOFErrorrRr9rOrSrQr ValueErrorZ frombytesAssertionErrorlist IndexError) rTsizeaZ bytes_sizerUZancdataflagsZaddrZ cmsg_levelZ cmsg_typeZ cmsg_datarrrrHs,          c Cs2tj|jtjtj}t||gWdQRXdS)z&Send a handle over a local connection.N)rPfromfdfilenoAF_UNIX SOCK_STREAMrG)r:r4r;srrrrsc Cs0tj|jtjtj}t|ddSQRXdS)z)Receive a handle over a local connection.rrN)rPr_r`rarbrH)r:rcrrrrscCsFtj}|dk r |j|j|Str:ddlm}|j|StddS)zReturn a wrapper for an fd.Nr)resource_sharerz&SCM_RIGHTS appears not to be available)rZget_spawning_popenrFZduplicate_for_childHAVE_SEND_HANDLErdrX)fdZ popen_objrdrrrrFs  cCs2|jdkrt|j|jjffSt|j|jjffSdS)N)__self__getattrr__func__r#)mrrr_reduce_methods rlc@seZdZddZdS)_CcCsdS)Nr)rrrrfsz_C.fN)r#r$r%rnrrrrrmsrmcCst|j|jffS)N)ri __objclass__r#)rkrrr_reduce_method_descriptorsrpcCst|j|j|jpiffS)N)_rebuild_partialfuncrkeywords)prrr_reduce_partialsrucCstj|f||S)N) functoolspartial)rrrrsrrrrqsrqcCsddlm}t||ffS)Nr) DupSocket)rdrx_rebuild_socket)rcrxrrr_reduce_sockets rzcCs|jS)N)r=)ZdsrrrrysrycCs"t|j}t||j|j|jffS)N)rFr`ryfamilyrproto)rcdfrrrrzs cCs|j}tj||||dS)N)r`)r=rP)r}r{rr|rgrrrrysc@sdeZdZdZeZeZeZeZeZe j dkr8e Z e Z e Z n eZeZeZeZeZeZeZeZddZdS)AbstractReducerzAbstract base class for use in implementing a Reduction class suitable for use in replacing the standard reduction mechanism used in multiprocessing.r cGsNtttjttttjttttj ttt j t tt j tdS)N)r rrmrnrlrZappendrpint__add__rvrwrurPrz)rrrrrr s  zAbstractReducer.__init__N)r#r$r%r&rr r rrsysplatformr/r.r-rGrHrFrlrprqrzryrrrrrr~s& r~) metaclass)N)NF)/abcrrr'rvrr>r)rPrrfr__all__rhasattrreZPicklerrr r r0r.r/rrobjectr-rMrRrGrHrFrlrmrrnrprZrrrrurqrwrzryr~rrrr sb         #    __pycache__/popen_forkserver.cpython-36.opt-2.pyc000064400000004430147221272370015743 0ustar003 \@sddlZddlZddlmZmZejs.edddlmZddlm Z ddlm Z ddlm Z d gZ Gd d d e ZGd d d e jZdS) N) reductionset_spawning_popenz,No support for sending fds between processes) forkserver) popen_fork)spawn)utilPopenc@seZdZddZddZdS)_DupFdcCs ||_dS)N)ind)selfr r 8/usr/lib64/python3.6/multiprocessing/popen_forkserver.py__init__sz_DupFd.__init__cCstj|jS)N)rZget_inherited_fdsr )r r r rdetachsz _DupFd.detachN)__name__ __module__ __qualname__rrr r r rr sr csBeZdZdZeZfddZddZddZe j fdd Z Z S) r rcsg|_tj|dS)N)_fdssuperr)r process_obj) __class__r rr!szPopen.__init__cCs|jj|t|jdS)Nr)rappendlen)r fdr r rduplicate_for_child%s zPopen.duplicate_for_childcCstj|j}tj}t|ztj||tj||WdtdXtj |j \|_ }t j |tj|j ft|ddd}|j|jWdQRXtj|j |_dS)NwbT)closefd)rZget_preparation_data_nameioBytesIOrrdumprZconnect_to_new_processrsentinelrZFinalizeoscloseopenwrite getbuffer read_unsignedpid)r rZ prep_dataZbufwfr r r_launch)s   z Popen._launchc Csr|jdkrlddlm}|tjkr$dnd}||jg|s:dSytj|j|_Wntt fk rjd|_YnX|jS)Nr)wait) returncodeZmultiprocessing.connectionr-r#WNOHANGr"rr(OSErrorEOFError)r flagr-Ztimeoutr r rpoll9s   z Popen.poll) rrrmethodr ZDupFdrrr,r#r0r4 __classcell__r r )rrr s  )rr#contextrrZHAVE_SEND_HANDLE ImportErrorrrrr__all__objectr r r r r rs     __pycache__/spawn.cpython-36.opt-1.pyc000064400000014361147221272370013505 0ustar003 \"@s.ddlZddlZddlZddlZddlmZmZddlmZddlm Z ddlm Z ddd d d d d gZ ej dkrzdZ dZn&ej dkoeeddZ ejjjdZerejjejdanejadd Zdd ZddZddZdd Zd&ddZddZddZdd ZgZ dd Z!d!d"Z"d#d$Z#d%d Z$dS)'N)get_start_methodset_start_method)process) reduction)util_mainfreeze_supportset_executableget_executableget_preparation_dataget_command_lineimport_main_pathwin32Ffrozenzpythonservice.exez python.execCs|adS)N) _python_exe)Zexer/usr/lib64/python3.6/spawn.pyr )scCstS)N)rrrrrr -scCs$t|dkr|ddkrdSdSdS)z= Return whether commandline indicates we are forking rz--multiprocessing-forkTFN)len)argvrrr is_forking4srcCshttjrdi}xBtjddD]0}|jd\}}|dkrBd||<qt|||<qWtf|tjdS)zE Run code for process object if this in not the main process rN=None)rsysrsplitint spawn_mainexit)kwdsargnamevaluerrrr >s   cKshttddr(tjdgdd|jDSd}|djdd |jD;}tj}tg|d |dgSd S) zJ Returns prefix of command line used for spawning a child process rFz--multiprocessing-forkcSsg|] }d|qS)z%s=%rr).0itemrrr Tsz$get_command_line..zWsz#get_command_line..z-cN)getattrr executableitemsjoinrZ_args_from_interpreter_flagsr)rprogZoptsrrrr Ns cCs\tjdkr.ddl}tj||}|j|tj}nddlm }||j _ |}t |}tj |dS)z7 Run code specified by data received over pipe rrNr)semaphore_tracker)rplatformmsvcrtrZ steal_handleZopen_osfhandleosO_RDONLYr,Z_semaphore_trackerZ_fdrr)Z pipe_handleZ parent_pidZ tracker_fdr.Z new_handlefdr,Zexitcoderrrr\s   rcCs^tj|ddd@}dtj_z$tjj|}t|tjj|}Wdtj`XWdQRX|j S)NrbT)closefd) r/fdopenrcurrent_process _inheritingrpickleloadprepare _bootstrap)r2Z from_parentZpreparation_dataselfrrrrms  cCsttjddrtddS)Nr7Fa An attempt has been made to start a new process before the current process has finished its bootstrapping phase. This probably means that you are not using fork to start your child processes and you have forgotten to use the proper idiom in the main module: if __name__ == '__main__': freeze_support() ... The "freeze_support()" line can be omitted if the program is not going to be frozen to produce an executable.)r'rr6 RuntimeErrorrrrr_check_not_importing_mainys r>cCs tttjtjjd}tjdk r2tjj|d<t j j }y|j d}Wnt k r^Yn Xtj||<|j||t jtjtjtdt jd}t|jdd}|dk r||d<nht jd kst ot rt|d d}|dk rtj j| otjdk r tj jtj|}tj j||d <|S) zM Return info about parent needed by child to unpickle process object ) log_to_stderrauthkeyN log_levelr1)r!sys_pathsys_argvorig_dirdir start_method__main__r!init_main_from_namer__file__init_main_from_path)r>dictrZ_log_to_stderrrr6r@Z_loggerZgetEffectiveLevelrpathcopyindex ValueError ORIGINAL_DIRupdaterr/getcwdrmodulesr'__spec__r-WINEXE WINSERVICEisabsr*normpath)r!drBi main_moduleZ main_mod_name main_pathrrrr s>         cCsd|kr|dtj_d|kr,|dtj_d|krD|drDtjd|kr^tjj|dd|krp|dt_ d|kr|dt_ d|krt j |dd|kr|dt_ d |krt|d d d d |krt|d nd |krt|d dS)zE Try to get current process ready to unpickle process object r!r@r?rArBrCrErDrFT)forcerHrJN)rr6r!r@rr?Z get_loggerZsetLevelrrLrr/chdirrPr_fixup_main_from_name_fixup_main_from_path)datarrrr:s,   r:cCs~tjd}|dks|jdr dSt|jdd|kr6dStj|tjd}t j |ddd}|j j ||tjd<tjd<dS)NrGz .__main__r! __mp_main__T)run_nameZ alter_sys) rrSendswithr'rTold_main_modulesappendtypes ModuleTyperunpyZ run_module__dict__rQ)Zmod_name current_mainr[ main_contentrrrr_s    r_cCstjd}tjjtjj|d}|dkr.dSt|dd|krBdStj|t j d}t j |dd}|j j||tjd<tjd<dS)NrGrZipythonrIrb)rc)rrSr/rLsplitextbasenamer'rerfrgrhriZrun_pathrjrQ)r\rkZ main_namer[rlrrrr`s    r`cCs t|dS)z< Set sys.modules['__main__'] to module at main_path N)r`)r\rrrrs)NN)%r/rrirgr1rrrcontextrr__all__r-rUrVr'r(lowerrdrLr* exec_prefixrr r rr r rrr>r rer:r_r`rrrrr s>        2&__pycache__/spawn.cpython-36.pyc000064400000014433147221272370012546 0ustar003 \"@s.ddlZddlZddlZddlZddlmZmZddlmZddlm Z ddlm Z ddd d d d d gZ ej dkrzdZ dZn&ej dkoeeddZ ejjjdZerejjejdanejadd Zdd ZddZddZdd Zd&ddZddZddZdd ZgZ dd Z!d!d"Z"d#d$Z#d%d Z$dS)'N)get_start_methodset_start_method)process) reduction)util_mainfreeze_supportset_executableget_executableget_preparation_dataget_command_lineimport_main_pathwin32Ffrozenzpythonservice.exez python.execCs|adS)N) _python_exe)Zexer/usr/lib64/python3.6/spawn.pyr )scCstS)N)rrrrrr -scCs$t|dkr|ddkrdSdSdS)z= Return whether commandline indicates we are forking rz--multiprocessing-forkTFN)len)argvrrr is_forking4srcCshttjrdi}xBtjddD]0}|jd\}}|dkrBd||<qt|||<qWtf|tjdS)zE Run code for process object if this in not the main process rN=None)rsysrsplitint spawn_mainexit)kwdsargnamevaluerrrr >s   cKshttddr(tjdgdd|jDSd}|djdd |jD;}tj}tg|d |dgSd S) zJ Returns prefix of command line used for spawning a child process rFz--multiprocessing-forkcSsg|] }d|qS)z%s=%rr).0itemrrr Tsz$get_command_line..zWsz#get_command_line..z-cN)getattrr executableitemsjoinrZ_args_from_interpreter_flagsr)rprogZoptsrrrr Ns cCsjttjsttjdkr         cCsd|kr|dtj_d|kr,|dtj_d|krD|drDtjd|kr^tjj|dd|krp|dt_ d|kr|dt_ d|krt j |dd|kr|dt_ d |krt|d d d d |krt|d nd |krt|d dS)zE Try to get current process ready to unpickle process object r!rAr@rBrCrDrFrErGT)forcerIrKN)rr7r!rArr@Z get_loggerZsetLevelrrMrr0chdirrQr_fixup_main_from_name_fixup_main_from_path)datarrrr;s,   r;cCs~tjd}|dks|jdr dSt|jdd|kr6dStj|tjd}t j |ddd}|j j ||tjd<tjd<dS)NrHz .__main__r! __mp_main__T)run_nameZ alter_sys) rrTendswithr'rUold_main_modulesappendtypes ModuleTyperunpyZ run_module__dict__rR)Zmod_name current_mainr\ main_contentrrrr`s    r`cCstjd}tjjtjj|d}|dkr.dSt|dd|krBdStj|t j d}t j |dd}|j j||tjd<tjd<dS)NrHrZipythonrJrc)rd)rrTr0rMsplitextbasenamer'rfrgrhrirjZrun_pathrkrR)r]rlZ main_namer\rmrrrras    racCs t|dS)z< Set sys.modules['__main__'] to module at main_path N)ra)r]rrrrs)NN)%r0rrjrhr2rrrcontextrr__all__r.rVrWr'r(lowerrerMr* exec_prefixrr r rr r rrr?r rfr;r`rarrrrr s>        2&__pycache__/connection.cpython-36.opt-1.pyc000064400000057717147221272370014530 0ustar003 /fVy @s ddddgZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z m Z dd lmZejZy$ddlZdd lmZmZmZmZWn$ek rejd kr‚dZYnXd Zd ZdZejZdZdgZe edrdZedg7Zejd krdZedg7ZefddZ!ddZ"ddZ#ddZ$ddZ%GdddZ&ernGddde&Z'Gd d!d!e&Z(Gd"dde)Z*dPd#dZ+ejd krdQd%dZ,n dRd&dZ,Gd'd(d(e)Z-d)d*Z.ejd krGd+d,d,e)Z/d-d.Z0d/Z1d0Z2d1Z3d2Z4d3d4Z5d5d6Z6Gd7d8d8e)Z7d9d:Z8d;d<Z9Gd=d>d>e*Z:d?d@Z;ejd krzdAdBZhZ?dSdCdZ@n,ddlAZAe eAdDreAjBZCneAjDZCdTdEdZ@ejd krdFdGZEdHdIZFejGe(eEdJdKZHdLdMZIejGe'eHndNdGZEdOdIZFejGe(eEdS)UClientListenerPipewaitN)util)AuthenticationErrorBufferTooShort) reduction) WAIT_OBJECT_0WAIT_ABANDONED_0 WAIT_TIMEOUTINFINITEwin32i g4@Zsha256AF_INETAF_UNIXAF_PIPEcCs tj|S)N)time monotonic)timeoutr"/usr/lib64/python3.6/connection.py _init_timeout?srcCs tj|kS)N)rr)trrr_check_timeoutBsrcCsX|dkr d S|dkr&tjdtjdS|dkrLtjdtjttfd dStd d S) z? Return an arbitrary free address for the given family r localhostrrz listener-)prefixdirrz\\.\pipe\pyc-%d-%d-zunrecognized familyN)rr) tempfileZmktemprZ get_temp_dirosgetpidnext _mmap_counter ValueError)familyrrrarbitrary_addressIsr&cCsJtjdkr|dkrtd|tjdkrF|dkrFtt|sFtd|dS)zD Checks if the family is valid for the current environment. rrzFamily %s is not recognized.rN)sysplatformr$hasattrsocket)r%rrr_validate_familyWs   r+cCsJt|tkrdSt|tkr*|jdr*dSt|tkr:dStd|dS)z] Return the types of the address This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE' rz\\rrzaddress type of %r unrecognizedN)typetuplestr startswithr$)addressrrr address_typecs  r1c@seZdZdZd+ddZddZddZd d Zd d Zd dZ e ddZ e ddZ e ddZ ddZddZd,ddZddZd-ddZd.d d!Zd"d#Zd/d%d&Zd'd(Zd)d*ZdS)0_ConnectionBaseNTcCsB|j}|dkrtd| r,| r,td||_||_||_dS)Nrzinvalid handlez6at least one of `readable` and `writable` must be True) __index__r$_handle _readable _writable)selfhandlereadablewritablerrr__init__ys z_ConnectionBase.__init__cCs|jdk r|jdS)N)r4_close)r7rrr__del__s z_ConnectionBase.__del__cCs|jdkrtddS)Nzhandle is closed)r4OSError)r7rrr _check_closeds z_ConnectionBase._check_closedcCs|jstddS)Nzconnection is write-only)r5r>)r7rrr_check_readablesz_ConnectionBase._check_readablecCs|jstddS)Nzconnection is read-only)r6r>)r7rrr_check_writablesz_ConnectionBase._check_writablecCs"|jrd|_n|jtddS)NFzbad message length)r6r5closer>)r7rrr_bad_message_lengthsz#_ConnectionBase._bad_message_lengthcCs |jdkS)z True if the connection is closedN)r4)r7rrrclosedsz_ConnectionBase.closedcCs|jS)z"True if the connection is readable)r5)r7rrrr9sz_ConnectionBase.readablecCs|jS)z"True if the connection is writable)r6)r7rrrr:sz_ConnectionBase.writablecCs|j|jS)z+File descriptor or handle of the connection)r?r4)r7rrrfilenosz_ConnectionBase.filenoc Cs$|jdk r z |jWdd|_XdS)zClose the connectionN)r4r<)r7rrrrBs  z_ConnectionBase.closercCs|j|jt|}|jdkr.tt|}t|}|dkrFtd||krVtd|dkrh||}n&|dkrztdn|||krtd|j||||dS)z,Send the bytes data from a bytes-like objectrrzoffset is negativezbuffer length < offsetNzsize is negativezbuffer length < offset + size)r?rA memoryviewitemsizebyteslenr$ _send_bytes)r7bufoffsetsizemnrrr send_bytess"     z_ConnectionBase.send_bytescCs$|j|j|jtj|dS)zSend a (picklable) objectN)r?rArJ_ForkingPicklerdumps)r7objrrrsendsz_ConnectionBase.sendcCsJ|j|j|dk r(|dkr(td|j|}|dkrB|j|jS)z7 Receive bytes data as a bytes object. Nrznegative maxlength)r?r@r$ _recv_bytesrCgetvalue)r7Z maxlengthrKrrr recv_bytess z_ConnectionBase.recv_bytesc Cs|j|jt|}|j}|t|}|dkr>tdn||krNtd|j}|j}|||krvt|j |j d|j |||||||SQRXdS)zq Receive bytes data into a writeable bytes-like object. Return the number of bytes read. rznegative offsetzoffset too largeN) r?r@rFrGrIr$rUtellr rVseekreadinto)r7rKrLrNrGZbytesizeresultrMrrrrecv_bytes_intos"       z_ConnectionBase.recv_bytes_intocCs&|j|j|j}tj|jS)zReceive a (picklable) object)r?r@rUrQloads getbuffer)r7rKrrrrecvsz_ConnectionBase.recvcCs|j|j|j|S)z/Whether there is any input available to be read)r?r@_poll)r7rrrrpollsz_ConnectionBase.pollcCs|S)Nr)r7rrr __enter__sz_ConnectionBase.__enter__cCs |jdS)N)rB)r7exc_type exc_valueexc_tbrrr__exit__ sz_ConnectionBase.__exit__)TT)rN)N)r)r`)__name__ __module__ __qualname__r4r;r=r?r@rArCpropertyrDr9r:rErBrPrTrWr\r_rbrcrgrrrrr2vs(       r2c@sDeZdZdZdZejfddZddZddd Z d d Z d d Z dS)PipeConnectionz Connection class based on a Windows named pipe. Overlapped I/O is used, so the handles must have been created with FILE_FLAG_OVERLAPPED. FcCs||jdS)N)r4)r7Z _CloseHandlerrrr<szPipeConnection._closecCshtj|j|dd\}}zwinerrorERROR_BROKEN_PIPEEOFError RuntimeError) r7maxsizeZbsizertrurvZnreadferrrrU*s6      zPipeConnection._recv_bytescCs.|jstj|jddkrdStt|g|S)NrT)rxrn PeekNamedPiper4boolr)r7rrrrraJszPipeConnection._pollcCs|j}tj}|j|tj|jd}|dk rJt|||krJ|jtj |j|dd\}}|j d\}}|j|j|S)NrT)rm) r^ryrzr}rnrr4rIrCr|rs)r7rtrrKrleftruZrbytesrrrr~Ps zPipeConnection._get_more_data)N) rhrirj__doc__rxrn CloseHandler<rJrUrar~rrrrrls rlc@s|eZdZdZer,ejfddZejZ ej Z ne j fddZe jZ e jZ e fddZe fddZd d Zdd d ZddZd S) Connectionzo Connection class based on an arbitrary file descriptor (Unix only), or a socket handle (Windows). cCs||jdS)N)r4)r7r<rrrr<gszConnection._closecCs||jdS)N)r4)r7r<rrrr<lscCs<t|}x.||j|}||8}|dkr(P||d}q WdS)Nr)rIr4)r7rKr} remainingrOrrr_sendqs zConnection._sendcCsftj}|j}|}xN|dkr`|||}t|}|dkrL||krDtntd|j|||8}qW|S)Nrzgot end of file during message)ryrzr4rIrr>r})r7rMreadrKr8rchunkrOrrr_recvzs    zConnection._recvcCsDt|}tjd|}|dkr2|j||j|n|j||dS)Nz!ii@)rIstructpackr)r7rKrOheaderrrrrJs    zConnection._send_bytesNcCs:|jd}tjd|j\}|dk r0||kr0dS|j|S)Nz!i)rrunpackrV)r7rrKrMrrrrUs  zConnection._recv_bytescCst|g|}t|S)N)rr)r7rrrrrras zConnection._poll)N)rhrirjrrn_multiprocessingZ closesocketr<rTZ_writer_Z_readr rBr}rrrrJrUrarrrrr`s  rc@sReZdZdZdddZddZdd Zed d Zed d Z d dZ ddZ dS)rz Returns a listener object. This is a wrapper for a bound socket which is 'listening' for connections, or for a Windows named pipe. NrcCsr|p|rt|pt}|pt|}t||dkr>t|||_nt||||_|dk rht|t rht d||_ dS)Nrzauthkey should be a byte string) r1default_familyr&r+ PipeListener _listenerSocketListener isinstancerH TypeError_authkey)r7r0r%backlogauthkeyrrrr;s zListener.__init__cCs>|jdkrtd|jj}|jr:t||jt||j|S)zz Accept a connection on the bound socket or named pipe of `self`. Returns a `Connection` object. Nzlistener is closed)rr>acceptrdeliver_challengeanswer_challenge)r7crrrrs    zListener.acceptcCs |j}|dk rd|_|jdS)zA Close the bound socket or named pipe of `self`. N)rrB)r7ZlistenerrrrrBszListener.closecCs|jjS)N)r_address)r7rrrszListener.cCs|jjS)N)r_last_accepted)r7rrrrscCs|S)Nr)r7rrrrcszListener.__enter__cCs |jdS)N)rB)r7rdrerfrrrrgszListener.__exit__)NNrN) rhrirjrr;rrBrkr0Z last_acceptedrcrgrrrrrs   cCsj|p t|}t||dkr&t|}nt|}|dk rJt|t rJtd|dk rft||t|||S)z= Returns a connection to the address of a `Listener` rNzauthkey should be a byte string) r1r+ PipeClient SocketClientrrHrrr)r0r%rrrrrrs    TcCsj|r>tj\}}|jd|jdt|j}t|j}n$tj\}}t|dd}t|dd}||fS)zL Returns pair of connection objects at either end of a pipe TF)r:)r9)r*Z socketpair setblockingrdetachr pipe)duplexs1s2c1c2Zfd1Zfd2rrrrs       c Cstd}|r*tj}tjtjB}tt}}ntj}tj}dt}}tj||tjBtj Btj tj Btj Bd||tj tj}tj||dtjtjtjtj}tj|tj ddtj|dd}|jd\} } t||d} t||d} | | fS) zL Returns pair of connection objects at either end of a pipe rrrNT)rm)r:)r9)r&rnPIPE_ACCESS_DUPLEX GENERIC_READ GENERIC_WRITEBUFSIZEZPIPE_ACCESS_INBOUNDCreateNamedPipeFILE_FLAG_OVERLAPPEDFILE_FLAG_FIRST_PIPE_INSTANCEPIPE_TYPE_MESSAGEPIPE_READMODE_MESSAGE PIPE_WAITNMPWAIT_WAIT_FOREVERNULL CreateFile OPEN_EXISTINGSetNamedPipeHandleStateConnectNamedPipersrl) rr0ZopenmodeaccessZobsizeZibsizeZh1Zh2rm_rurrrrrr s2         c@s*eZdZdZd ddZddZddZd S) rzO Representation of a socket which is bound to an address and listening rcCstjtt||_yRtjdkr2|jjtjtjd|jjd|jj ||jj ||jj |_ Wn t k r|jjYnX||_d|_|dkrtj|tj|fdd|_nd|_dS)NposixrTrr)args exitpriority)r*getattr_socketr nameZ setsockoptZ SOL_SOCKETZ SO_REUSEADDRrZbindZlistenZ getsocknamerr>rBZ_familyrrFinalizeunlink_unlink)r7r0r%rrrrr;<s$       zSocketListener.__init__cCs&|jj\}|_|jdt|jS)NT)rrrrrr)r7srrrrTs zSocketListener.acceptc Cs0z|jjWd|j}|dk r*d|_|XdS)N)rrBr)r7rrrrrBYs zSocketListener.closeN)r)rhrirjrr;rrBrrrrr8s rc CsDt|}tjtt|"}|jd|j|t|jSQRXdS)zO Return a connection object connected to the socket given by `address` TN)r1r*rrZconnectrr)r0r%rrrrrcs   rc@s8eZdZdZd ddZd ddZdd Zed d ZdS)rz0 Representation of a named pipe NcCsL||_|jddg|_d|_tjd|jtj|tj|j|jfdd|_ dS)NT)firstz listener created with address=%rr)rr) r _new_handle _handle_queuerr sub_debugrr_finalize_pipe_listenerrB)r7r0rrrrr;wszPipeListener.__init__Fc CsHtjtjB}|r|tjO}tj|j|tjtjBtjBtj t t tj tj S)N) rnrrrrrrrrZPIPE_UNLIMITED_INSTANCESrrr)r7rflagsrrrrs   zPipeListener._new_handlecCs|jj|j|jjd}ytj|dd}Wn0tk r^}z|jtjkrNWYdd}~XnPXzrZ ERROR_NO_DATArprqrrrrrsrl)r7r8rtrresrrurrrrs"    zPipeListener.acceptcCs(tjd|x|D]}tj|qWdS)Nz closing listener with address=%r)rrrnr)Zqueuer0r8rrrrs  z$PipeListener._finalize_pipe_listener)N)F) rhrirjrr;rr staticmethodrrrrrrss  rcCst}x~y6tj|dtj|tjtjBdtjtjtjtj}Wn>t k r|}z"|j tj tj fksjt |rlWYdd}~XqXPqWtj|tjddt|S)zU Return a connection object connected to the pipe given by `address` irN)rrnZ WaitNamedPiperrrrrrr>rZERROR_SEM_TIMEOUTZERROR_PIPE_BUSYrrrrl)r0rhrrrrrs"   rs #CHALLENGE#s #WELCOME#s #FAILURE#cCsfddl}tjt}|jt||j||tj}|j d}||krP|jt n|jt t ddS)Nrzdigest received was wrong) hmacr urandomMESSAGE_LENGTHrP CHALLENGEnewHMAC_DIGEST_NAMEdigestrWWELCOMEFAILUREr) connectionrrmessagerresponserrrrs    rcCs\ddl}|jd}|ttd}|j||tj}|j||jd}|tkrXt ddS)Nrrzdigest sent was rejected) rrWrIrrrrrPrr)rrrrrrrrrrs   rc@s$eZdZddZddZddZdS)ConnectionWrappercCs:||_||_||_x"dD]}t||}t|||qWdS)NrErBrbrWrP)rErBrbrWrP)_conn_dumps_loadsrsetattr)r7connrRr]attrrSrrrr;s   zConnectionWrapper.__init__cCs|j|}|jj|dS)N)rrrP)r7rSrrrrrTs zConnectionWrapper.sendcCs|jj}|j|S)N)rrWr)r7rrrrr_s zConnectionWrapper.recvN)rhrirjr;rTr_rrrrrsrcCstj|fddddjdS)Nrzutf-8) xmlrpclibrRencode)rSrrr _xml_dumpssrcCstj|jd\\}}|S)Nzutf-8)rr]decode)rrSmethodrrr _xml_loadssrc@seZdZddZdS) XmlListenercCs ddljatj|}t|ttS)Nr) xmlrpc.clientclientrrrrrr)r7rSrrrrs  zXmlListener.acceptN)rhrirjrrrrrrsrcOsddljatt||ttS)Nr)rrrrrrr)rkwdsrrr XmlClient s rcCst|}g}x|rtj|d|}|tkr,Pn\t|koFtt|knrV|t8}n2t|koptt|knr|t8}ntd|j||||dd}d}qW|S)NFzShould not get hererr) listrnrpr r rIr rr)ZhandlesrLreadyrrrr_exhaustive_waits    rc .sn|dkrt}n|dkrd}nt|dd}t|}ig}tt}zHx2|D](}yt|d}Wn tk r||j<YqTXytj|dd\}}Wn8t k r}zd|j }}|t krʂWYdd}~XnX|tj kr|j |||j<qT|rptjdddkrpy|jd \} }Wn*t k rT}z |j }WYdd}~XnX| rpt|d rpd|_j|d}qTWtj|}Wdx|D]}|jqWx|D]}y|jd\} }Wn6t k r}z|j }|t krWYdd}~XnX|tjkr|j}j||dkrt|d rd|_qWXjfd d |Dfd d|DS)z Wait till an object in object_list is ready/readable. Returns list of those objects in object_list which are ready/readable. Nrig?rETFrxc3s|]}|VqdS)Nr).0r)waithandle_to_objrr vszwait..csg|]}|kr|qSrr)ro) ready_objectsrr wszwait..)rr)rintrsetrAttributeErrorr3rnr|r>r _ready_errorsrorrqr'Zgetwindowsversionrsr)rxaddrkeysrrZERROR_OPERATION_ABORTEDupdate) object_listrZov_listZ ready_handlesrrErtrurrr)rrrr+sh              PollSelectorc Cstx}x|D]}|j|tjqW|dk r8tj|}x@|j|}|rVdd|DS|dk r:|tj}|dkr:|Sq:WWdQRXdS)z Wait till an object in object_list is ready/readable. Returns list of those objects in object_list which are ready/readable. NcSsg|]\}}|jqSr)Zfileobj)rkeyZeventsrrrrszwait..r) _WaitSelectorregister selectorsZ EVENT_READrrZselect)r rZselectorrSZdeadlinerrrrrs    c CsN|j}tj|tjtj*}ddlm}|j|}t||j |j ffSQRXdS)Nr)resource_sharer) rEr*ZfromfdrZ SOCK_STREAMrrZ DupSocketrebuild_connectionr9r:)rr8rrdsrrrreduce_connections   rcCs|j}t|j||S)N)rr)rr9r:ZsockrrrrsrcCsB|jr tjnd|jrtjndB}tj|j|}t||j|jffS)Nr) r9rnZFILE_GENERIC_READr:ZFILE_GENERIC_WRITEr Z DupHandlerErebuild_pipe_connection)rrdhrrrreduce_pipe_connectionsrcCs|j}t|||S)N)rrl)rr9r:r8rrrrsrcCs tj|j}t||j|jffS)N)r ZDupFdrErr9r:)rdfrrrrscCs|j}t|||S)N)rr)rr9r:fdrrrrs)NN)T)T)N)N)J__all__ryr r'r*rrr itertoolsrrrrr contextr ZForkingPicklerrQrnr r r r ImportErrorr(rZCONNECTION_TIMEOUTrcountr#rZfamiliesr)rrr&r+r1r2rlrobjectrrrrrrrrrrrrrrrrrrrrZERROR_NETNAME_DELETEDrrrr rZSelectSelectorrrrrrrrrr s           PJ8    ,+ 8    P    __pycache__/synchronize.cpython-36.opt-1.pyc000064400000026023147221272370014726 0ustar003 \/ @s,ddddddgZddlZddlZddlZddlZddlZdd lmZdd lmZdd lm Z ydd lm Z m Z Wne k re dYnXe ed\ZZej jZGdddeZ Gddde ZGdddeZGddde ZGddde ZGdddeZGdddeZGdddejZdS)LockRLock SemaphoreBoundedSemaphore ConditionEventN)context)process)util)SemLock sem_unlinkz*This platform lacks a functioning sem_openz( implementation, therefore, the requiredz+ synchronization primitives needed will notz function, see issue 3770.c@s\eZdZejZddZeddZddZ ddZ d d Z d d Z d dZ eddZdS)r c Cs|dkrtjj}|j}tjdkp*|dk}xPtdD]<}y tj||||j |}|_ Wnt k rnYq6XPq6Wt dt j d|j|jtjdkrdd} t j|| |j jdk rdd lm} | |j jt j|tj|j jfd d dS) Nwin32forkdzcannot find name for semaphorezcreated semlock with handle %scSs|jjdS)N)_semlock _after_fork)objr#/usr/lib64/python3.6/synchronize.pyrGsz%SemLock.__init__.._after_forkr)registerr)Z exitpriority)r Z_default_contextZ get_contextZget_start_methodsysplatformrange_multiprocessingr _make_namerFileExistsErrorr debughandle _make_methodsZregister_after_forknamesemaphore_trackerrZFinalize_cleanup) selfkindvaluemaxvaluectxr!Z unlink_nowislrrrrr__init__2s.       zSemLock.__init__cCs ddlm}t|||dS)Nr) unregister)r"r,r )r!r,rrrr#Ts zSemLock._cleanupcCs|jj|_|jj|_dS)N)racquirerelease)r$rrrr Zs zSemLock._make_methodscCs |jjS)N)r __enter__)r$rrrr/^szSemLock.__enter__cGs |jj|S)N)r__exit__)r$argsrrrr0aszSemLock.__exit__cCsDtj||j}tjdkr,tjj|j}n|j}||j|j |j fS)Nr) r assert_spawningrrrZget_spawning_popenZduplicate_for_childrr%r'r!)r$r*hrrr __getstate__ds   zSemLock.__getstate__cCs,tjj||_tjd|d|jdS)Nz recreated blocker with handle %rr)rr Z_rebuildrr rr )r$staterrr __setstate__mszSemLock.__setstate__cCsdtjjdttjfS)Nz%s-%sZ semprefix)r current_processZ_confignextr _randrrrrrrszSemLock._make_nameN)__name__ __module__ __qualname__tempfileZ_RandomNameSequencer9r+ staticmethodr#r r/r0r4r6rrrrrr .s"  r c@s&eZdZd ddZddZddZdS) rrcCstj|t|t|ddS)N)r()r r+ SEMAPHORE SEM_VALUE_MAX)r$r&r(rrrr+}szSemaphore.__init__cCs |jjS)N)r _get_value)r$rrr get_valueszSemaphore.get_valuec Cs8y|jj}Wntk r&d}YnXd|jj|fS)Nunknownz<%s(value=%s)>)rrA Exception __class__r:)r$r&rrr__repr__s  zSemaphore.__repr__N)r)r:r;r<r+rBrFrrrrr{s c@seZdZdddZddZdS)rrcCstj|t|||ddS)N)r()r r+r?)r$r&r(rrrr+szBoundedSemaphore.__init__c Cs>y|jj}Wntk r&d}YnXd|jj||jjfS)NrCz<%s(value=%s, maxvalue=%s)>)rrArDrEr:r')r$r&rrrrFs  zBoundedSemaphore.__repr__N)r)r:r;r<r+rFrrrrrs c@seZdZddZddZdS)rcCstj|tdd|ddS)Nr)r()r r+r?)r$r(rrrr+sz Lock.__init__c Csyf|jjr8tjj}tjjdkrd|dtjj7}n,|jjdkrLd}n|jjdkr`d}nd}Wnt k r~d}YnXd |j j |fS) N MainThread|rNonerSomeOtherThreadSomeOtherProcessrCz<%s(owner=%s)>) r_is_miner r7r! threadingcurrent_threadrA_countrDrEr:)r$r!rrrrFs   z Lock.__repr__N)r:r;r<r+rFrrrrrsc@seZdZddZddZdS)rcCstj|tdd|ddS)Nr)r()r r+RECURSIVE_MUTEX)r$r(rrrr+szRLock.__init__c Csy||jjrBtjj}tjjdkr6|dtjj7}|jj}n8|jjdkrZd \}}n |jjdkrrd \}}nd \}}Wnt k rd\}}YnXd |j j ||fS)NrGrHrrIrrJnonzerorKrCz <%s(%s, %s)>)rIr)rJrQ)rKrQ)rCrC) rrLr r7r!rMrNrOrArDrEr:)r$r!countrrrrFs      zRLock.__repr__N)r:r;r<r+rFrrrrrsc@sjeZdZdddZddZddZdd Zd d Zd d ZddZ dddZ ddZ ddZ dddZ dS)rNcCs>|p |j|_|jd|_|jd|_|jd|_|jdS)Nr)r_lockr_sleeping_count _woken_count_wait_semaphorer )r$lockr(rrrr+s    zCondition.__init__cCstj||j|j|j|jfS)N)r r2rSrTrUrV)r$rrrr4s zCondition.__getstate__cCs |\|_|_|_|_|jdS)N)rSrTrUrVr )r$r5rrrr6szCondition.__setstate__cCs |jjS)N)rSr/)r$rrrr/szCondition.__enter__cGs |jj|S)N)rSr0)r$r1rrrr0szCondition.__exit__cCs|jj|_|jj|_dS)N)rSr-r.)r$rrrr s zCondition._make_methodsc CsJy|jjj|jjj}Wntk r4d}YnXd|jj|j|fS)NrCz <%s(%s, %s)>)rTrrArUrDrEr:rS)r$Z num_waitersrrrrFs   zCondition.__repr__c Csn|jj|jjj}xt|D]}|jjq Wz|jjd|S|jjxt|D]}|jjqVWXdS)NT) rTr.rSrrOrrVr-rU)r$timeoutrRr)rrrwaits   zCondition.waitcCsNx|jjdr|jjd}qW|jjdrJ|jj|jj|jjddS)NF)rUr-rTrVr.)r$resrrrnotifys    zCondition.notifycCs|x|jjdr|jjd}qWd}x"|jjdrD|jj|d7}q$W|rxxt|D]}|jjqTWx|jjdrvqhWdS)NFrr)rUr-rTrVr.r)r$rZZsleepersr)rrr notify_alls   zCondition.notify_allcCsh|}|r|S|dk r$tj|}nd}d}x6|sb|dk rP|tj}|dkrPP|j||}q.W|S)Nr)timeZ monotonicrY)r$Z predicaterXresultZendtimeZwaittimerrrwait_for6s   zCondition.wait_for)N)N)N)r:r;r<r+r4r6r/r0r rFrYr[r\r_rrrrrs  c@s6eZdZddZddZddZddZd d d Zd S) rcCs |j|j|_|jd|_dS)Nr)rr_condr_flag)r$r(rrrr+NszEvent.__init__c Cs0|j |jjdr"|jjdSdSQRXdS)NFT)r`rar-r.)r$rrris_setRs   z Event.is_setc Cs6|j&|jjd|jj|jjWdQRXdS)NF)r`rar-r.r\)r$rrrsetYs  z Event.setc Cs"|j|jjdWdQRXdS)NF)r`rar-)r$rrrclear_sz Event.clearNc CsT|jD|jjdr |jjn |jj||jjdrF|jjdSdSQRXdS)NFT)r`rar-r.rY)r$rXrrrrYcs     z Event.wait)N)r:r;r<r+rbrcrdrYrrrrrLs c@sZeZdZdddZddZddZedd Zejd d Zed d Z e jd d Z dS)BarrierNc CsRddl}ddlm}||jdd}|j}|j|||||fd|_d|_dS)Nrr) BufferWrapperr)r)structheaprfcalcsizerr6_staterO) r$ZpartiesactionrXr(rgrfwrapperZcondrrrr+us zBarrier.__init__cCs.|\|_|_|_|_|_|jjjd|_dS)Nr))_parties_action_timeoutr`_wrapperZcreate_memoryviewcast_array)r$r5rrrr6~szBarrier.__setstate__cCs|j|j|j|j|jfS)N)rmrnror`rp)r$rrrr4s zBarrier.__getstate__cCs |jdS)Nr)rr)r$rrrrjszBarrier._statecCs||jd<dS)Nr)rr)r$r&rrrrjscCs |jdS)Nr)rr)r$rrrrOszBarrier._countcCs||jd<dS)Nr)rr)r$r&rrrrOs)NN) r:r;r<r+r6r4propertyrjsetterrOrrrrress   rezRThis platform lacks a functioning sem_open implementation, therefore, the requiredz}This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will notzThis platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770.)__all__rMrr=rr]r r r r r ImportErrorlistrrPr?r@objectrrrrrrrerrrr s0    Mz'__pycache__/synchronize.cpython-36.pyc000064400000026440147221272370013772 0ustar003 \/ @s,ddddddgZddlZddlZddlZddlZddlZdd lmZdd lmZdd lm Z ydd lm Z m Z Wne k re dYnXe ed\ZZej jZGdddeZ Gddde ZGdddeZGddde ZGddde ZGdddeZGdddeZGdddejZdS)LockRLock SemaphoreBoundedSemaphore ConditionEventN)context)process)util)SemLock sem_unlinkz*This platform lacks a functioning sem_openz( implementation, therefore, the requiredz+ synchronization primitives needed will notz function, see issue 3770.c@s\eZdZejZddZeddZddZ ddZ d d Z d d Z d dZ eddZdS)r c Cs|dkrtjj}|j}tjdkp*|dk}xPtdD]<}y tj||||j |}|_ Wnt k rnYq6XPq6Wt dt j d|j|jtjdkrdd} t j|| |j jdk rdd lm} | |j jt j|tj|j jfd d dS) Nwin32forkdzcannot find name for semaphorezcreated semlock with handle %scSs|jjdS)N)_semlock _after_fork)objr#/usr/lib64/python3.6/synchronize.pyrGsz%SemLock.__init__.._after_forkr)registerr)Z exitpriority)r Z_default_contextZ get_contextZget_start_methodsysplatformrange_multiprocessingr _make_namerFileExistsErrorr debughandle _make_methodsZregister_after_forknamesemaphore_trackerrZFinalize_cleanup) selfkindvaluemaxvaluectxr!Z unlink_nowislrrrrr__init__2s.       zSemLock.__init__cCs ddlm}t|||dS)Nr) unregister)r"r,r )r!r,rrrr#Ts zSemLock._cleanupcCs|jj|_|jj|_dS)N)racquirerelease)r$rrrr Zs zSemLock._make_methodscCs |jjS)N)r __enter__)r$rrrr/^szSemLock.__enter__cGs |jj|S)N)r__exit__)r$argsrrrr0aszSemLock.__exit__cCsDtj||j}tjdkr,tjj|j}n|j}||j|j |j fS)Nr) r assert_spawningrrrZget_spawning_popenZduplicate_for_childrr%r'r!)r$r*hrrr __getstate__ds   zSemLock.__getstate__cCs,tjj||_tjd|d|jdS)Nz recreated blocker with handle %rr)rr Z_rebuildrr rr )r$staterrr __setstate__mszSemLock.__setstate__cCsdtjjdttjfS)Nz%s-%sZ semprefix)r current_processZ_confignextr _randrrrrrrszSemLock._make_nameN)__name__ __module__ __qualname__tempfileZ_RandomNameSequencer9r+ staticmethodr#r r/r0r4r6rrrrrr .s"  r c@s&eZdZd ddZddZddZdS) rrcCstj|t|t|ddS)N)r()r r+ SEMAPHORE SEM_VALUE_MAX)r$r&r(rrrr+}szSemaphore.__init__cCs |jjS)N)r _get_value)r$rrr get_valueszSemaphore.get_valuec Cs8y|jj}Wntk r&d}YnXd|jj|fS)Nunknownz<%s(value=%s)>)rrA Exception __class__r:)r$r&rrr__repr__s  zSemaphore.__repr__N)r)r:r;r<r+rBrFrrrrr{s c@seZdZdddZddZdS)rrcCstj|t|||ddS)N)r()r r+r?)r$r&r(rrrr+szBoundedSemaphore.__init__c Cs>y|jj}Wntk r&d}YnXd|jj||jjfS)NrCz<%s(value=%s, maxvalue=%s)>)rrArDrEr:r')r$r&rrrrFs  zBoundedSemaphore.__repr__N)r)r:r;r<r+rFrrrrrs c@seZdZddZddZdS)rcCstj|tdd|ddS)Nr)r()r r+r?)r$r(rrrr+sz Lock.__init__c Csyf|jjr8tjj}tjjdkrd|dtjj7}n,|jjdkrLd}n|jjdkr`d}nd}Wnt k r~d}YnXd |j j |fS) N MainThread|rNonerSomeOtherThreadSomeOtherProcessrCz<%s(owner=%s)>) r_is_miner r7r! threadingcurrent_threadrA_countrDrEr:)r$r!rrrrFs   z Lock.__repr__N)r:r;r<r+rFrrrrrsc@seZdZddZddZdS)rcCstj|tdd|ddS)Nr)r()r r+RECURSIVE_MUTEX)r$r(rrrr+szRLock.__init__c Csy||jjrBtjj}tjjdkr6|dtjj7}|jj}n8|jjdkrZd \}}n |jjdkrrd \}}nd \}}Wnt k rd\}}YnXd |j j ||fS)NrGrHrrIrrJnonzerorKrCz <%s(%s, %s)>)rIr)rJrQ)rKrQ)rCrC) rrLr r7r!rMrNrOrArDrEr:)r$r!countrrrrFs      zRLock.__repr__N)r:r;r<r+rFrrrrrsc@sjeZdZdddZddZddZdd Zd d Zd d ZddZ dddZ ddZ ddZ dddZ dS)rNcCs>|p |j|_|jd|_|jd|_|jd|_|jdS)Nr)r_lockr_sleeping_count _woken_count_wait_semaphorer )r$lockr(rrrr+s    zCondition.__init__cCstj||j|j|j|jfS)N)r r2rSrTrUrV)r$rrrr4s zCondition.__getstate__cCs |\|_|_|_|_|jdS)N)rSrTrUrVr )r$r5rrrr6szCondition.__setstate__cCs |jjS)N)rSr/)r$rrrr/szCondition.__enter__cGs |jj|S)N)rSr0)r$r1rrrr0szCondition.__exit__cCs|jj|_|jj|_dS)N)rSr-r.)r$rrrr s zCondition._make_methodsc CsJy|jjj|jjj}Wntk r4d}YnXd|jj|j|fS)NrCz <%s(%s, %s)>)rTrrArUrDrEr:rS)r$Z num_waitersrrrrFs   zCondition.__repr__c Cs|jjjstd|jj|jjj}xt|D]}|jjq4Wz|jj d|S|j jxt|D]}|jj qjWXdS)Nz,must acquire() condition before using wait()T) rSrrLAssertionErrorrTr.rOrrVr-rU)r$timeoutrRr)rrrwaits   zCondition.waitcCs||jjjstd|jjd s&tx$|jjdrJ|jjd}|s(tq(W|jjdrx|jj|jj|jjddS)Nzlock is not ownedF) rSrrLrXrVr-rUrTr.)r$resrrrnotifys     zCondition.notifycCs|jjjstd|jjd s&tx$|jjdrJ|jjd}|s(tq(Wd}x"|jjdrr|jj|d7}qRW|rxt |D]}|jjqWx|jjdrqWdS)Nzlock is not ownedFrr) rSrrLrXrVr-rUrTr.r)r$r[Zsleepersr)rrr notify_alls    zCondition.notify_allcCsh|}|r|S|dk r$tj|}nd}d}x6|sb|dk rP|tj}|dkrPP|j||}q.W|S)Nr)timeZ monotonicrZ)r$Z predicaterYresultZendtimeZwaittimerrrwait_for6s   zCondition.wait_for)N)N)N)r:r;r<r+r4r6r/r0r rFrZr\r]r`rrrrrs  c@s6eZdZddZddZddZddZd d d Zd S) rcCs |j|j|_|jd|_dS)Nr)rr_condr_flag)r$r(rrrr+NszEvent.__init__c Cs0|j |jjdr"|jjdSdSQRXdS)NFT)rarbr-r.)r$rrris_setRs   z Event.is_setc Cs6|j&|jjd|jj|jjWdQRXdS)NF)rarbr-r.r])r$rrrsetYs  z Event.setc Cs"|j|jjdWdQRXdS)NF)rarbr-)r$rrrclear_sz Event.clearNc CsT|jD|jjdr |jjn |jj||jjdrF|jjdSdSQRXdS)NFT)rarbr-r.rZ)r$rYrrrrZcs     z Event.wait)N)r:r;r<r+rcrdrerZrrrrrLs c@sZeZdZdddZddZddZedd Zejd d Zed d Z e jd d Z dS)BarrierNc CsRddl}ddlm}||jdd}|j}|j|||||fd|_d|_dS)Nrr) BufferWrapperr)r)structheaprgcalcsizerr6_staterO) r$ZpartiesactionrYr(rhrgwrapperZcondrrrr+us zBarrier.__init__cCs.|\|_|_|_|_|_|jjjd|_dS)Nr))_parties_action_timeoutra_wrapperZcreate_memoryviewcast_array)r$r5rrrr6~szBarrier.__setstate__cCs|j|j|j|j|jfS)N)rnrorprarq)r$rrrr4s zBarrier.__getstate__cCs |jdS)Nr)rs)r$rrrrkszBarrier._statecCs||jd<dS)Nr)rs)r$r&rrrrkscCs |jdS)Nr)rs)r$rrrrOszBarrier._countcCs||jd<dS)Nr)rs)r$r&rrrrOs)NN) r:r;r<r+r6r4propertyrksetterrOrrrrrfss   rfzRThis platform lacks a functioning sem_open implementation, therefore, the requiredz}This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will notzThis platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770.)__all__rMrr=rr^r r r r r ImportErrorlistrrPr?r@objectrrrrrrrfrrrr s0    Mz'__pycache__/pool.cpython-36.opt-2.pyc000064400000045034147221272370013330 0ustar003 \e@s8ddgZddlZddlZddlZddlZddlZddlZddlZddlm Z ddlm Z m Z dZ dZ dZejZdd Zd d ZGd d d eZGdddZddZGdddeZdfddfddZddZGdddeZGdddeZeZGdddeZGdddeZGd d!d!eZ Gd"ddeZ!dS)#Pool ThreadPoolN)util) get_context TimeoutErrorcCs tt|S)N)listmap)argsr ,/usr/lib64/python3.6/multiprocessing/pool.pymapstar+srcCsttj|d|dS)Nrr)r itertoolsstarmap)r r r r starmapstar.src@seZdZddZddZdS)RemoteTracebackcCs ||_dS)N)tb)selfrr r r __init__6szRemoteTraceback.__init__cCs|jS)N)r)rr r r __str__8szRemoteTraceback.__str__N)__name__ __module__ __qualname__rrr r r r r5src@seZdZddZddZdS)ExceptionWithTracebackcCs0tjt|||}dj|}||_d||_dS)Nz """ %s""") tracebackformat_exceptiontypejoinexcr)rr rr r r r<s zExceptionWithTraceback.__init__cCst|j|jffS)N) rebuild_excr r)rr r r __reduce__Asz!ExceptionWithTraceback.__reduce__N)rrrrr"r r r r r;srcCst||_|S)N)r __cause__)r rr r r r!Ds r!cs,eZdZfddZddZddZZS)MaybeEncodingErrorcs.t||_t||_tt|j|j|jdS)N)reprr valuesuperr$r)rr r&) __class__r r rPs  zMaybeEncodingError.__init__cCsd|j|jfS)Nz(Error sending result: '%s'. Reason: '%s')r&r )rr r r rUszMaybeEncodingError.__str__cCsd|jj|fS)Nz<%s: %s>)r(r)rr r r __repr__YszMaybeEncodingError.__repr__)rrrrrr) __classcell__r r )r(r r$Ls r$Fc'Cs|j}|j}t|dr*|jj|jj|dk r:||d}xH|dksX|oT||kry |} Wn$ttfk rtj dPYnX| dkrtj dP| \} } } } }yd| | |f}WnBt k r}z&|r| t k rt ||j }d|f}WYdd}~XnXy|| | |fWnRt k rd}z4t||d}tj d||| | d|ffWYdd}~XnXd} } }} } }|d7}qBWtj d |dS) N_writerrz)worker got EOFError or OSError -- exitingzworker got sentinel -- exitingTFrz0Possible encoding error while sending result: %szworker exiting after %d tasks)putgethasattrr+close_readerEOFErrorOSErrorrdebug Exception_helper_reraises_exceptionr __traceback__r$)inqueueoutqueue initializerinitargsZmaxtasksZwrap_exceptionr,r-Z completedtaskjobifuncr kwdsresultewrappedr r r worker]sD        $ rCcCs|dS)Nr )Zexr r r r5sr5c@s2eZdZdZddZddfddfddZddZd d Zd d Zd dZ fifddZ dddZ ddZd?ddZd@ddZfiddfddZdAd d!ZdBd"d#Zed$d%Zed&d'Zed(d)Zed*d+Zd,d-Zd.d/Zd0d1Zd2d3Zed4d5Zed6d7Zd8d9Z d:d;Z!dS)CrTcOs|jj||S)N)_ctxProcess)rr r?r r r rEsz Pool.ProcessNc Csn|pt|_|jtj|_i|_t|_||_ ||_ ||_ |dkrPt j pNd}|dkr`td|dk rzt| rztd||_g|_|jtjtj|fd|_d|j_t|j_|jjtjtj|j|j|j|j|jfd|_d|j_t|j_|jjtjtj|j|j |jfd|_!d|j!_t|j!_|j!jt"j#||j$|j|j%|j|j|j|j|j!|jfdd|_&dS)Nrz&Number of processes must be at least 1zinitializer must be a callable)targetr T)r Z exitpriority)'rrD _setup_queuesqueueQueue _taskqueue_cacheRUN_state_maxtasksperchild _initializer _initargsos cpu_count ValueErrorcallable TypeError _processes_pool_repopulate_pool threadingZThreadr_handle_workers_worker_handlerdaemonstart _handle_tasks _quick_put _outqueue _task_handler_handle_results _quick_get_result_handlerrZFinalize_terminate_pool_inqueue _terminate)r processesr9r:Zmaxtasksperchildcontextr r r rsT         z Pool.__init__cCsZd}xPttt|jD]:}|j|}|jdk rtjd||jd}|j|=qW|S)NFzcleaning up worker %dT)reversedrangelenrXexitcoderr3r)rZcleanedr=rCr r r _join_exited_workerss   zPool._join_exited_workersc Cs|xvt|jt|jD]^}|jt|j|j|j|j |j |j fd}|jj ||j jdd|_ d|_|jtjdqWdS)N)rFr rEZ PoolWorkerTz added worker)rlrWrmrXrErCrgrarPrQrO_wrap_exceptionappendnamereplacer]r^rr3)rr=wr r r rYs  zPool._repopulate_poolcCs|jr|jdS)N)rorY)rr r r _maintain_poolszPool._maintain_poolcCs4|jj|_|jj|_|jjj|_|jjj|_ dS)N) rDZ SimpleQueuergrar+sendr`r0recvrd)rr r r rHs   zPool._setup_queuescCs|j|||jS)N) apply_asyncr-)rr>r r?r r r applysz Pool.applycCs|j||t|jS)N) _map_asyncrr-)rr>iterable chunksizer r r r szPool.mapcCs|j||t|jS)N)rzrr-)rr>r{r|r r r r sz Pool.starmapcCs|j||t|||S)N)rzr)rr>r{r|callbackerror_callbackr r r starmap_asyncs zPool.starmap_asyncccsny0d}x&t|D]\}}||||fifVqWWn8tk rh}z||dt|fifVWYdd}~XnXdS)Nr) enumerater4r5)rZ result_jobr>r{r=xrAr r r _guarded_task_generations zPool._guarded_task_generationrcCs|jtkrtd|dkrFt|j}|jj|j|j|||j f|St j |||}t|j}|jj|j|jt ||j fdd|DSdS)NzPool not runningrcss|]}|D] }|Vq qdS)Nr ).0chunkitemr r r @szPool.imap..) rNrMrT IMapIteratorrLrKr,r_job _set_lengthr _get_tasksr)rr>r{r|r@ task_batchesr r r imap's      z Pool.imapcCs|jtkrtd|dkrFt|j}|jj|j|j|||j f|St j |||}t|j}|jj|j|jt ||j fdd|DSdS)NzPool not runningrcss|]}|D] }|Vq qdS)Nr )rrrr r r r[sz&Pool.imap_unordered..) rNrMrTIMapUnorderedIteratorrLrKr,rrrrrr)rr>r{r|r@rr r r imap_unorderedBs      zPool.imap_unorderedcCsB|jtkrtdt|j||}|jj|jd|||fgdf|S)NzPool not runningr)rNrMrT ApplyResultrLrKr,r)rr>r r?r}r~r@r r r rx]s  zPool.apply_asynccCs|j||t|||S)N)rzr)rr>r{r|r}r~r r r map_asynchszPool.map_asyncc Cs|jtkrtdt|ds$t|}|dkrTtt|t|jd\}}|rT|d7}t|dkrdd}tj |||}t |j |t|||d} |j j |j| j||df| S)NzPool not running__len__rr)r~)rNrMrTr.r divmodrmrXrr MapResultrLrKr,rr) rr>r{Zmapperr|r}r~Zextrarr@r r r rzps&   zPool._map_asynccCsTtj}x0|jtks$|jr8|jtkr8|jtjdq W|j j dt j ddS)Ng?zworker handler exiting) rZcurrent_threadrNrMrL TERMINATErutimesleeprKr,rr3)poolthreadr r r r[s  zPool._handle_workersc Csjtj}xt|jdD]\}}d}zx|D]}|jr@tjdPy ||Wq*tk r} zD|dd\} } y|| j| d| fWnt k rYnXWYdd} ~ Xq*Xq*W|rtjd|r|dnd } || dwPWdd}}} XqWtjdy:tjd|j dtjdx|D]} |dq&WWn t k rZtjd YnXtjd dS) Nz'task handler found thread._state != RUNrFzdoing set_length()rztask handler got sentinelz/task handler sending sentinel to result handlerz(task handler sending sentinel to workersz/task handler got OSError when sending sentinelsztask handler exitingr) rZriterr-rNrr3r4_setKeyErrorr,r2) taskqueuer,r8rcacherZtaskseqZ set_lengthr;rAr<idxpr r r r_sB          zPool._handle_taskscCstj}xy |}Wn"ttfk r6tjddSX|jrJtjdP|dkr^tjdP|\}}}y||j||Wntk rYnXd}}}q Wx|o|jt kr:y |}Wn"ttfk rtjddSX|dkrtjdq|\}}}y||j||Wntk r*YnXd}}}qWt |drtjdy,x&t dD]}|j j spP|q^WWnttfk rYnXtjdt||jdS) Nz.result handler got EOFError/OSError -- exitingz,result handler found thread._state=TERMINATEzresult handler got sentinelz&result handler ignoring extra sentinelr0z"ensuring that outqueue is not full z7result handler exiting: len(cache)=%s, thread._state=%s)rZrr2r1rr3rNrrrr.rlr0pollrm)r8r-rrr;r<r=objr r r rcsZ            zPool._handle_resultsccs4t|}x&ttj||}|s"dS||fVq WdS)N)rtuplerislice)r>itsizerr r r rs zPool._get_taskscCs tddS)Nz:pool objects cannot be passed between processes or pickled)NotImplementedError)rr r r r"szPool.__reduce__cCs&tjd|jtkr"t|_t|j_dS)Nz closing pool)rr3rNrMCLOSEr\)rr r r r/s  z Pool.closecCs$tjdt|_t|j_|jdS)Nzterminating pool)rr3rrNr\rh)rr r r terminates zPool.terminatecCsDtjd|jj|jj|jjx|jD] }|jq0WdS)Nz joining pool)rr3r\rrbrerX)rrr r r rs      z Pool.joincCsDtjd|jjx*|jr>|jjr>|jjtj dqWdS)Nz7removing tasks from inqueue until task handler finishedr) rr3Z_rlockacquireis_aliver0rrwrr)r7 task_handlerrr r r _help_stuff_finish(s    zPool._help_stuff_finishc Cs(tjdt|_t|_tjd|j||t|t|_|jdtjdtj|k r`|j |rt |ddrtjdx|D]} | j dkr| j qWtjdtj|k r|j tjdtj|k r|j |ot |ddr$tjd x,|D]$} | j rtjd | j| j qWdS) Nzfinalizing poolz&helping task handler/workers to finishzjoining worker handlerrrzterminating workerszjoining task handlerzjoining result handlerzjoining pool workerszcleaning up worker %d)rr3rrNrrmr,rZrrr.rnrrpid) clsrr7r8rZworker_handlerrZresult_handlerrrr r r rf1s6               zPool._terminate_poolcCs|S)Nr )rr r r __enter___szPool.__enter__cCs |jdS)N)r)rexc_typeZexc_valZexc_tbr r r __exit__bsz Pool.__exit__)N)N)NNN)r)r)NNN)NNN)"rrrrprErrorYrurHryr rrrrrrxrrz staticmethodr[r_rcrr"r/rrr classmethodrfrrr r r r rsD8         . <  .c@s@eZdZddZddZddZddd Zdd d Zd d ZdS)rcCs4tj|_tt|_||_||_||_|||j<dS)N) rZZEvent_eventnext job_counterrrL _callback_error_callback)rrr}r~r r r rks   zApplyResult.__init__cCs |jjS)N)rZis_set)rr r r readysszApplyResult.readycCs|jS)N)_success)rr r r successfulvszApplyResult.successfulNcCs|jj|dS)N)rwait)rtimeoutr r r rzszApplyResult.waitcCs,|j||jst|jr"|jS|jdS)N)rrrr_value)rrr r r r-}s  zApplyResult.getcCsV|\|_|_|jr$|jr$|j|j|jr>|j r>|j|j|jj|j|j=dS)N)rrrrrsetrLr)rr=rr r r rs     zApplyResult._set)N)N) rrrrrrrr-rr r r r ris   rc@seZdZddZddZdS)rcCsftj||||dd|_dg||_||_|dkrLd|_|jj||j=n||t |||_dS)N)r~Tr) rrrr _chunksize _number_leftrrrbool)rrr|lengthr}r~r r r rs    zMapResult.__init__cCs|jd8_|\}}|rp|jrp||j||j|d|j<|jdkr|jrZ|j|j|j|j=|jjnH| r|jrd|_||_|jdkr|j r|j |j|j|j=|jjdS)NrrF) rrrrrrLrrrr)rr=Zsuccess_resultsuccessr@r r r rs"         zMapResult._setN)rrrrrr r r r rs rc@s:eZdZddZddZd ddZeZdd Zd d ZdS) rcCsJtjtj|_tt|_||_tj |_ d|_ d|_ i|_ |||j<dS)Nr)rZZ ConditionZLock_condrrrrL collectionsdeque_items_index_length _unsorted)rrr r r rs  zIMapIterator.__init__cCs|S)Nr )rr r r __iter__szIMapIterator.__iter__NcCs|j~y|jj}Wnhtk r~|j|jkr6t|jj|y|jj}Wn(tk rx|j|jkrpttYnXYnXWdQRX|\}}|r|S|dS)N) rrpopleft IndexErrorrr StopIterationrr)rrrrr&r r r rs"   zIMapIterator.nextc Cs|j|j|krr|jj||jd7_x8|j|jkrd|jj|j}|jj||jd7_q.W|jjn ||j|<|j|jkr|j|j =WdQRXdS)Nr) rrrrqrpopnotifyrrLr)rr=rr r r rs      zIMapIterator._setc Cs<|j,||_|j|jkr.|jj|j|j=WdQRXdS)N)rrrrrLr)rrr r r rs   zIMapIterator._set_length)N) rrrrrr__next__rrr r r r rs   rc@seZdZddZdS)rc CsP|j@|jj||jd7_|jj|j|jkrB|j|j=WdQRXdS)Nr)rrrqrrrrLr)rr=rr r r rs    zIMapUnorderedIterator._setN)rrrrr r r r rsrc@s@eZdZdZeddZddffddZddZed d ZdS) rFcOsddlm}|||S)Nr)rE)ZdummyrE)r r?rEr r r rEs zThreadPool.ProcessNcCstj||||dS)N)rr)rrir9r:r r r rszThreadPool.__init__cCs,tj|_tj|_|jj|_|jj|_dS)N)rIrJrgrar,r`r-rd)rr r r rHs   zThreadPool._setup_queuesc Cs<|j,|jj|jjdg||jjWdQRXdS)N)Z not_emptyrIclearextendZ notify_all)r7rrr r r rs zThreadPool._help_stuff_finish) rrrrprrErrHrr r r r r s  )"__all__rZrIrrrRrrrrrrrMrrcountrrrr4rrr!r$rCr5objectrrZ AsyncResultrrrrr r r r  s@   *\&)@__pycache__/sharedctypes.cpython-36.pyc000064400000015314147221272370014113 0ustar003 \e @s:ddlZddlZddlmZddlmZddlmZmZejZ dddd d d gZ ej ej ej ejejejejejejejejejd Zd dZddZddZdddddZddddd Zdd Zd&dd ZddZddZ ddZ!dZ"iZ#ej$Z%Gddde&Z'Gd d!d!e'Z(Gd"d#d#e'Z)Gd$d%d%e)Z*dS)'N)heap) get_context) reductionassert_spawningRawValueRawArrayValueArraycopy synchronized) cubBhHiIlLfdcCs tj|}tj|}t||dS)N)ctypessizeofrZ BufferWrapper rebuild_ctype)type_sizewrapperr$/usr/lib64/python3.6/sharedctypes.py _new_value&s  r!cGs<tj||}t|}tjtj|dtj||j||S)z> Returns a ctypes object allocated from shared memory r)typecode_to_typegetr!rmemset addressofr__init__)typecode_or_typeargsrobjrrr r+s   cCsjtj||}t|trD||}t|}tjtj|dtj||S|t |}t|}|j ||SdS)z= Returns a ctypes array allocated from shared memory rN) r"r# isinstanceintr!rr$r%rlenr&)r'size_or_initializerrr)resultrrr r5s    T)lockctxcGsXt|f|}|dkr|S|dkr4|p*t}|j}t|dsJtd|t|||dS)z6 Return a synchronization wrapper for a Value FTNacquirez'%r' has no method 'acquire')r0)TN)rrRLockhasattrAttributeErrorr )r'r/r0r(r)rrr r Es   cCsTt||}|dkr|S|dkr0|p&t}|j}t|dsFtd|t|||dS)z9 Return a synchronization wrapper for a RawArray FTNr1z'%r' has no method 'acquire')r0)TN)rrr2r3r4r )r'r-r/r0r)rrr r Ss    cCstt|}|tj|d<|S)Nr)r!typerZpointer)r)Znew_objrrr r as c Cst|t std|pt}t|tjr6t|||St|tjrf|jtj krZt |||St |||St |}y t |}WnVtk rdd|jD}tdd|D}d|j}t |tf|}t |<YnX||||SdS)Nzobject already synchronizedcSsg|] }|dqS)rr).0Zfieldrrr usz synchronized..css|]}|t|fVqdS)N) make_property)r6namerrr vszsynchronized.. Synchronized)r*SynchronizedBaseAssertionErrorrrZ _SimpleCDatar;r _type_c_charSynchronizedStringSynchronizedArrayr5 class_cacheKeyErrorZ_fields_dict__name__)r)r/r0clssclsnamesrZ classnamerrr r fs"         cCs@t|t|tjr(t|j|j|jffStt||jdffSdS)N) rr*rr rr>_wrapperZ_length_r5)r)rrr reduce_ctypes rJcCs8|dk r||}tj|t|j}|j|}||_|S)N)_ForkingPicklerregisterrJZcreate_memoryviewZ from_bufferrI)rrZlengthZbufr)rrr rs  rc CsJyt|Stk rDi}tt|fd|||t|<||SXdS)N) prop_cacherCexectemplate)r9rrrr r8s r8z def get%s(self): self.acquire() try: return self._obj.%s finally: self.release() def set%s(self, value): self.acquire() try: self._obj.%s = value finally: self.release() %s = property(get%s, set%s) c@sFeZdZdddZddZddZdd Zd d Zd d ZddZ dS)r<NcCsB||_|r||_n|ptdd}|j|_|jj|_|jj|_dS)NT)force)_obj_lockrr2r1release)selfr)r/r0rrr r&s  zSynchronizedBase.__init__cCs |jjS)N)rS __enter__)rUrrr rVszSynchronizedBase.__enter__cGs |jj|S)N)rS__exit__)rUr(rrr rWszSynchronizedBase.__exit__cCst|t|j|jffS)N)rr rRrS)rUrrr __reduce__szSynchronizedBase.__reduce__cCs|jS)N)rR)rUrrr get_objszSynchronizedBase.get_objcCs|jS)N)rS)rUrrr get_lockszSynchronizedBase.get_lockcCsdt|j|jfS)Nz<%s wrapper for %s>)r5rErR)rUrrr __repr__szSynchronizedBase.__repr__)NN) rE __module__ __qualname__r&rVrWrXrYrZr[rrrr r<s r<c@seZdZedZdS)r;valueN)rEr\r]r8r^rrrr r;sr;c@s4eZdZddZddZddZddZd d Zd S) rAcCs t|jS)N)r,rR)rUrrr __len__szSynchronizedArray.__len__c Cs| |j|SQRXdS)N)rR)rUrrrr __getitem__szSynchronizedArray.__getitem__c Cs|||j|<WdQRXdS)N)rR)rUrr^rrr __setitem__szSynchronizedArray.__setitem__c Cs||j||SQRXdS)N)rR)rUstartstoprrr __getslice__szSynchronizedArray.__getslice__c Cs"|||j||<WdQRXdS)N)rR)rUrbrcvaluesrrr __setslice__szSynchronizedArray.__setslice__N)rEr\r]r_r`rardrfrrrr rAs rAc@seZdZedZedZdS)r@r^rawN)rEr\r]r8r^rgrrrr r@sr@)NN)+rweakrefrrcontextrrZForkingPicklerrK__all__r?Zc_wcharZc_byteZc_ubyteZc_shortZc_ushortZc_intZc_uintZc_longZc_ulongZc_floatZc_doubler"r!rrr r r r rJrr8rPrNWeakKeyDictionaryrBobjectr<r;rAr@rrrr  s:      __pycache__/managers.cpython-36.opt-1.pyc000064400000100034147221272370014143 0ustar003 \@sddddgZddlZddlZddlZddlZddlZddlmZddlm Z dd l m Z m Z dd lm Z dd lmZdd lmZdd lmZddZe jejedddDZedek rddZxeD]Ze jeeqWGdddeZfifddZddZGdddeZddZd d!ZGd"d#d#eZGd$d%d%eZ e j!e j"fe j#e j$fd&Z%Gd'ddeZ&Gd(d)d)e'Z(Gd*ddeZ)d+d,Z*ifd-d.Z+dd0d1Z,Gd2d3d3eZ-Gd4d5d5eZ.dd6d7Z/Gd8d9d9e)Z0Gd:d;d;e)Z1Gdd?d?e)Z3Gd@dAdAe)Z4GdBdCdCe)Z5GdDdEdEe)Z6e+dFdZ7GdZd[d[e7Z8e+d\dZ9d]deie9_:e+dfdZ;e+dgdZe>jdwej?e>jdxej?e>jdyej@e3e>jdzejAe1e>jd{ejBe1e>jd|ejCe1e>jd}ejDe1e>jd~ejEe2e>jdejFe4e>jde jGe=e>jdee8e>jdeHe9e>jd5e.e6e>jd7e/e;e>jd3e-e5e>jdee0dde>jdsdddS) BaseManager SyncManager BaseProxyTokenN) format_exc) connection) reductionget_spawning_popen)pool)process)util) get_contextcCstj|j|jffS)N)arraytypecodetobytes)ar /usr/lib64/python3.6/managers.py reduce_array$srcCsg|]}tti|qSr)typegetattr).0namerrr (sritemskeysvaluescCstt|ffS)N)list)objrrrrebuild_as_list*sr c@s4eZdZdZdZddZddZd d Zd d Zd S)rz4 Type to uniquely indentify a shared object typeidaddressidcCs||||_|_|_dS)N)r!r"r#)selfr!r"r#rrr__init__9szToken.__init__cCs|j|j|jfS)N)r!r"r#)r$rrr __getstate__<szToken.__getstate__cCs|\|_|_|_dS)N)r!r"r#)r$staterrr __setstate__?szToken.__setstate__cCsd|jj|j|j|jfS)Nz %s(typeid=%r, address=%r, id=%r)) __class____name__r!r"r#)r$rrr__repr__BszToken.__repr__N)r!r"r#) r* __module__ __qualname____doc__ __slots__r%r&r(r+rrrrr3s cCs8|j||||f|j\}}|dkr*|St||dS)zL Send a message to manager using connection `c` and return response z#RETURNN)sendrecvconvert_to_error)cr# methodnameargskwdskindresultrrrdispatchJs  r9cCs<|dkr |S|dkrt|S|dkr0td|StdSdS)Nz#ERRORz #TRACEBACKz#UNSERIALIZABLEzUnserializable message: %s zUnrecognized message type) RemoteError ValueError)r7r8rrrr2Ts r2c@seZdZddZdS)r:cCs&ddddt|jdddS)N -Kr)strr5)r$rrr__str__aszRemoteError.__str__N)r*r,r-r@rrrrr:`sr:cCs6g}x,t|D] }t||}t|r|j|qW|S)z4 Return a list of names of methods of `obj` )dirrcallableappend)rtemprfuncrrr all_methodshs  rFcCsddt|DS)zP Return a list of names of methods of `obj` which do not start with '_' cSsg|]}|ddkr|qS)r_r)rrrrrrwsz"public_methods..)rF)rrrrpublic_methodsssrHc @seZdZdZdddddddd d g Zd d Zd dZddZddZddZ ddZ ddZ ddZ e e e dZ ddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.S)/ServerzM Server class which runs in a process controlled by a manager object shutdowncreateaccept_connection get_methods debug_infonumber_of_objectsdummyincrefdecrefcCs^||_tj||_t|\}}||dd|_|jj|_ddffi|_i|_i|_ t j |_ dS)N)r"Zbacklog0) registryr AuthenticationStringauthkeylistener_clientlistenerr" id_to_objid_to_refcountid_to_local_proxy_obj threadingLockmutex)r$rUr"rW serializerListenerClientrrrr%s   zServer.__init__cCstj|_|tj_zZtj|jd}d|_|j y x|jj sN|jj dq6WWnt t fk rjYnXWdtjtjkrtjdtjt_tjt_tjdXdS)z( Run the server forever )targetTrNzresetting stdout, stderrr)r]Event stop_eventr current_process_manager_serverThreadaccepterdaemonstartis_setwaitKeyboardInterrupt SystemExitsysstdout __stdout__r debug __stderr__stderrexit)r$rirrr serve_forevers       zServer.serve_foreverc CsPxJy|jj}Wntk r&wYnXtj|j|fd}d|_|jqWdS)N)rcr5T)rYZacceptOSErrorr]rhhandle_requestrjrk)r$r3trrrriszServer.accepterc 'Cs4d}}}y>tj||jtj||j|j}|\}}}}t||}Wntk rhdtf} Yn>Xy||f||}Wntk rdtf} Yn Xd|f} y|j| Wnrtk r&} zTy|jdtfWntk rYnXt j d| t j d|t j d| WYdd} ~ XnX|j dS)z) Handle a new connection Nz #TRACEBACKz#RETURNzFailure to send message: %rz ... request was %rz ... exception was %r) rZdeliver_challengerWZanswer_challenger1r Exceptionrr0r infoclose) r$r3funcnamer8requestignorer5r6rEmsgerrrrys2    zServer.handle_requestcDCstjdtjj|j}|j}|j}x|jj syBd}}|}|\}}} } y||\}} } Wn^t k r} zBy|j |\}} } Wn&t k r}z | WYdd}~XnXWYdd} ~ XnX|| krt d|t || ft||}y|| | }Wn,tk r&}zd|f}WYdd}~XnPX| o8| j|d}|rn|j|||\}}t||j|}d||ff}nd|f}Wnt k r|dkrdtf}nNy,|j|}|||||f| | }d|f}Wn tk rdtf}YnXYnPtk r"tjdtjjtjd Yn tk r@dtf}YnXyDy ||Wn2tk r}z|d tfWYdd}~XnXWq(tk r}zBtjd tjjtjd |tjd ||jtjdWYdd}~Xq(Xq(WdS)zQ Handle requests from the proxies in a particular process/thread z$starting server thread to service %rNz+method %r of %r object is not in exposed=%rz#ERRORz#PROXYz#RETURNz #TRACEBACKz$got EOF -- exiting thread serving %rrz#UNSERIALIZABLEzexception in thread serving %rz ... message was %rz ... exception was %rr)r rsr]current_threadrr1r0rZrerlKeyErrorr\AttributeErrorrrr{getrKrr"rfallback_mappingEOFErrorrprvr|r})r$connr1r0rZr4rridentr5r6exposed gettypeidkeZ second_keZfunctionresrrr!ZridentZrexposedtokenZ fallback_funcr8rrr serve_clientsx  (        $   zServer.serve_clientcCs|S)Nr)r$rrrrrrfallback_getvalue&szServer.fallback_getvaluecCst|S)N)r?)r$rrrrrr fallback_str)szServer.fallback_strcCst|S)N)repr)r$rrrrrr fallback_repr,szServer.fallback_repr)r@r+z #GETVALUEcCsdS)Nr)r$r3rrrrP5sz Server.dummycCs||jlg}t|jj}|jxD|D]<}|dkr(|jd||j|t|j|dddfq(Wdj|SQRXdS)zO Return some info --- useful to spot problems with refcounting rTz %s: refcount=%s %srNr>r<) r_rr[rsortrCr?rZjoin)r$r3r8rrrrrrN8s  $zServer.debug_infocCs t|jS)z* Number of shared objects )lenr[)r$r3rrrrOGszServer.number_of_objectscCsLz:ytjd|jdWnddl}|jYnXWd|jjXdS)z' Shutdown this process z!manager received shutdown message#RETURNNr)rN)r rsr0 traceback print_excreset)r$r3rrrrrJNs zServer.shutdownc Os|j|j|\}}}}|dkr,|d} n |||} |dkrFt| }|dk r^t|t|}dt| } tjd|| | t||f|j| <| |j krd|j | <WdQRX|j || | t |fS)z> Create a new shared object and return its id Nrz%xz&%r callable returned object with id %r) r_rUrHrr#r rsrrZr[rQtuple) r$r3r!r5r6rBrmethod_to_typeid proxytyperrrrrrK[s      z Server.createcCst|j|jdS)zL Return the methods of the shared object indicated by token r)rrZr#)r$r3rrrrrMzszServer.get_methodscCs"|tj_|jd|j|dS)z= Spawn a new thread to serve this connection #RETURNN)rN)r]rrr0r)r$r3rrrrrLs  zServer.accept_connectioncCs|jy|j|d7<Wnhtk r}zL||jkrrd|j|<|j||j|<|j|\}}}tjd|n|WYdd}~XnXWdQRXdS)Nrz&Server re-enabled tracking & INCREF %r)r_r[rr\rZr rs)r$r3rrrrrrrrrQs  z Server.increfcCs||jkr$||jkr$tjd|dS|j.|j|d8<|j|dkrT|j|=WdQRX||jkrdfdf|j|<tjd||j|j|=WdQRXdS)NzServer DECREF skipping %rrrzdisposing of obj with id %r)r[r\r rsr_rZ)r$r3rrrrrRs     z Server.decrefN)r*r,r-r.Zpublicr%rwriryrrrrrrPrNrOrJrKrMrLrQrRrrrrrI}s. "Q rIc@seZdZdgZdZdZdZdS)StatevaluerrN)r*r,r-r/INITIALSTARTEDSHUTDOWNrrrrrsr)pickleZ xmlrpclibc@seZdZdZiZeZd!ddZddZdd Z dffd d Z e dffd d Z ddZ d"ddZddZddZddZddZeddZeddZe d#dd ZdS)$rz! Base class for managers NrcCs\|dkrtjj}||_tj||_t|_tj|j_ ||_ t |\|_ |_ |pTt|_dS)N)r rfrW_addressrV_authkeyr_staterr _serializerrXZ _Listener_Clientr_ctx)r$r"rWr`Zctxrrrr%s   zBaseManager.__init__cCst|j|j|j|jS)zX Return server object with serve_forever() method and address attribute )rI _registryrrr)r$rrr get_servers zBaseManager.get_servercCs8t|j\}}||j|jd}t|ddtj|j_dS)z> Connect manager object to the server process )rWNrP) rXrrrr9rrrr)r$rarbrrrrconnects zBaseManager.connectc Cs|dk rt| rtdtjdd\}}|jjt|j|j|j |j |j |||fd|_ dj dd|j jD}t|jd ||j _|j j|j|j|_ |jtj|j_tj|t|j|j |j |j |j|jfd d |_dS) z@ Spawn a server process for this manager object Nzinitializer must be a callableF)Zduplex)rcr5:css|]}t|VqdS)N)r?)rirrr sz$BaseManager.start..r=r)r5 exitpriority)rB TypeErrorrZPiperZProcessr _run_serverrrrr_processrZ _identityr*rrkr}r1rrrrr Finalize_finalize_managerrrJ)r$ initializerinitargsreaderwriterrrrrrks&       zBaseManager.startc CsN|dk r|||j||||}|j|j|jtjd|j|jdS)z@ Create a server, report its address and run it Nzmanager serving at %r)_Serverr0r"r}r r|rw) clsrUr"rWr`rrrserverrrrrs zBaseManager._run_serverc OsN|j|j|jd}zt|dd|f||\}}Wd|jXt||j||fS)zP Create a new shared object; return the token and exposed tuple )rWNrK)rrrr9r}r)r$r!r5r6rr#rrrr_create%s  zBaseManager._createcCs*|jdk r&|jj||jjs&d|_dS)zC Join the manager process (if it has been spawned) N)rris_alive)r$timeoutrrrr1s   zBaseManager.joinc Cs.|j|j|jd}z t|ddS|jXdS)zS Return some info about the servers shared objects and connections )rWNrN)rrrr9r})r$rrrr _debug_info:s zBaseManager._debug_infoc Cs.|j|j|jd}z t|ddS|jXdS)z5 Return the number of shared objects )rWNrO)rrrr9r})r$rrrr_number_of_objectsDs zBaseManager._number_of_objectscCs|jjtjkr|j|S)N)rrrrrk)r$rrr __enter__NszBaseManager.__enter__cCs |jdS)N)rJ)r$exc_typeexc_valexc_tbrrr__exit__TszBaseManager.__exit__cCs|jrtjdy,|||d}zt|ddWd|jXWntk rRYnX|jdd|jrtjdt|drtjd |j|jd d|jrtjd t j |_ y t j |=Wntk rYnXdS) zQ Shutdown the manager process; will be registered as a finalizer z#sending shutdown message to manager)rWNrJg?)rzmanager still alive terminatez'trying to `terminate()` manager processg?z#manager still alive after terminate)rr r|r9r}r{rhasattrrrrrr_address_to_localr)r r"rWr'rrrrrrWs.         zBaseManager._finalize_managercCs|jS)N)r)r$rrrwszBaseManager.Tc sd|jkr|jj|_dkr"t|p0tdd}|p@tdd}|r`xt|jD]\}}qTW|||f|j<|rfdd} | _t|| dS)z9 Register a typeid with the manager type rN _exposed__method_to_typeid_cs`tjd|jf||\}}||j||j|d}|j|j|jd}t|dd|jf|S)Nz)requesting creation of a shared %r object)managerrWr)rWrR) r rsrrrrr"r9r#)r$r5r6rZexpproxyr)rr!rrrDs  z"BaseManager.register..temp) __dict__rcopy AutoProxyrrrr*setattr) rr!rBrrr create_methodkeyrrDr)rr!rregisterys    zBaseManager.register)NNrN)N)NNNNT)r*r,r-r.rrIrr%rrrk classmethodrrrrrrr staticmethodrpropertyr"rrrrrrs*  $    c@seZdZddZddZdS)ProcessLocalSetcCstj|dddS)NcSs|jS)N)clear)rrrrrsz*ProcessLocalSet.__init__..)r register_after_fork)r$rrrr%szProcessLocalSet.__init__cCs t|ffS)N)r)r$rrr __reduce__szProcessLocalSet.__reduce__N)r*r,r-r%rrrrrrsrc@seZdZdZiZejZdddZddZ fifd d Z d d Z d dZ e ddZddZddZddZddZddZdS)rz. A base for proxies of shared objects NTFc Cstj8tjj|jd}|dkr:tjtf}|tj|j<WdQRX|d|_|d|_ ||_ |j j |_ ||_ ||_t|d|_||_|dk rtj||_n"|j dk r|j j|_n tjj|_|r|jtj|tjdS)Nrr)r_mutexrrr"r ZForkAwareLocalr_tls_idset_tokenr#_id_managerrrXr_owned_by_managerr rVrrfrW_increfr _after_fork) r$rr`rrWrrQ manager_ownedZ tls_idsetrrrr%s*      zBaseProxy.__init__cCsdtjdtjj}tjjdkr4|dtjj7}|j|jj |j d}t |dd|f||j _ dS)Nzmaking connection to managerZ MainThread|)rWrL)r rsr rfrr]rrrr"rr9rr)r$rrrrr_connects  zBaseProxy._connectc Csy |jj}Wn6tk rBtjdtjj|j|jj}YnX|j |j |||f|j \}}|dkrp|S|dkr|\}}|j j |jd } |jj|_| ||j|j |j|d} |j|j|jd}t|dd|jf| St||dS) zW Try to call a method of the referrent and return a copy of the result z#thread %r does not own a connectionz#RETURNz#PROXYr)rrWr)rWNrR)rrrr rsr]rrrr0rr1rrr!rr"rrrr9r#r2) r$r4r5r6rr7r8rrrrrrr _callmethods,      zBaseProxy._callmethodcCs |jdS)z9 Get a copy of the value of the referent z #GETVALUE)r)r$rrr _getvalueszBaseProxy._getvaluec Cs|jrtjd|jjdS|j|jj|jd}t|dd|j ftjd|jj|j j |j |j oj|j j }tj|tj|j|j||j|j |jfdd|_dS)Nz%owned_by_manager skipped INCREF of %r)rWrQz INCREF %r )r5r)rr rsrr#rr"rr9rraddrrrr_decrefrZ_close)r$rr'rrrr s zBaseProxy._increfcCs|j|j|dks |jtjkry2tjd|j||j|d}t|dd|jfWqt k r}ztjd|WYdd}~XqXntjd|j| rt |drtjdt j j |jj|`dS)Nz DECREF %r)rWrRz... decref failed %sz%DECREF %r -- manager already shutdownrz-thread %r has no more proxies so closing conn)discardr#rrrr rsr"r9r{rr]rrrr})rrWr'ZtlsZidsetrrrrrrr s    zBaseProxy._decrefcCsHd|_y |jWn0tk rB}ztjd|WYdd}~XnXdS)Nzincref failed: %s)rrr{r r|)r$rrrrr9s  zBaseProxy._after_forkcCs^i}tdk r|j|d<t|ddrB|j|d<tt|j|j|ffStt||j|j|ffSdS)NrW_isautoFr) r rrr RebuildProxyrrrr)r$r6rrrrAs    zBaseProxy.__reduce__cCs|jS)N)r)r$memorrr __deepcopy__NszBaseProxy.__deepcopy__cCsdt|j|jjt|fS)Nz<%s object, typeid %r at %#x>)rr*rr!r#)r$rrrr+QszBaseProxy.__repr__c Cs4y |jdStk r.t|dddSXdS)zV Return representation of the referent (or a fall-back if that fails) r+Nrz; '__str__()' failed>r)rr{r)r$rrrr@Us zBaseProxy.__str__)NNNTF)r*r,r-r.rr ZForkAwareThreadLockrr%rrrrrrrrrr+r@rrrrrs (   cCsttjdd}|rT|j|jkrTtjd|d|d<|j|jkrT|j|j|j|j<|j ddopttjdd }|||fd|i|S) z5 Function used for unpickling proxy objects. rgNz*Rebuild a proxy owned by manager, token=%rTrrQZ _inheritingF) rr rfr"r rsr#r\rZpop)rErr`r6rrQrrrrbs   rc Csrt|}y |||fStk r(YnXi}x|D]}td||f|q4Wt|tf|}||_||||f<|S)zB Return a proxy type whose methods are given by `exposed` zLdef %s(self, *args, **kwds): return self._callmethod(%r, args, kwds))rrexecrrr)rr_cacheZdicmeth ProxyTyperrr MakeProxyTypews   rTc Cst|d}|dkrB||j|d}zt|dd|f}Wd|jX|dkrX|dk rX|j}|dkrjtjj}td|j |}||||||d} d| _ | S)z* Return an auto-proxy for `token` rN)rWrMz AutoProxy[%s])rrWrQT) rXr"r9r}rr rfrWrr!r) rr`rrWrrQrrrrrrrrs    rc@seZdZddZddZdS) NamespacecKs|jj|dS)N)rupdate)r$r6rrrr%szNamespace.__init__cCs^t|jj}g}x,|D]$\}}|jds|jd||fqW|jd|jjdj|fS)NrGz%s=%rz%s(%s)z, ) rrr startswithrCrr)r*r)r$rrDrrrrrr+s zNamespace.__repr__N)r*r,r-r%r+rrrrrsrc@s8eZdZd ddZddZddZdd ZeeeZd S) ValueTcCs||_||_dS)N) _typecode_value)r$rrlockrrrr%szValue.__init__cCs|jS)N)r)r$rrrrsz Value.getcCs ||_dS)N)r)r$rrrrrsz Value.setcCsdt|j|j|jfS)Nz %s(%r, %r))rr*rr)r$rrrr+szValue.__repr__N)T) r*r,r-r%rrr+rrrrrrrs  rcCs tj||S)N)r)rZsequencerrrrArraysrc@s8eZdZdZddZddZd d Zd d Zd dZdS) IteratorProxy__next__r0throwr}cCs|S)Nr)r$rrr__iter__szIteratorProxy.__iter__cGs |jd|S)Nr)r)r$r5rrrrszIteratorProxy.__next__cGs |jd|S)Nr0)r)r$r5rrrr0szIteratorProxy.sendcGs |jd|S)Nr)r)r$r5rrrrszIteratorProxy.throwcGs |jd|S)Nr})r)r$r5rrrr}szIteratorProxy.closeN)rr0rr}) r*r,r-rrrr0rr}rrrrrs rc@s2eZdZd ZdddZddZd d Zd d ZdS) AcquirerProxyacquirereleaseTNcCs"|dkr|fn||f}|jd|S)Nr )r)r$Zblockingrr5rrrr szAcquirerProxy.acquirecCs |jdS)Nr )r)r$rrrr szAcquirerProxy.releasecCs |jdS)Nr )r)r$rrrrszAcquirerProxy.__enter__cCs |jdS)Nr )r)r$rrrrrrrszAcquirerProxy.__exit__)r r )TN)r*r,r-rr r rrrrrrr s  r c@s4eZdZdZdddZd d Zd d Zdd dZdS)ConditionProxyr r rmnotify notify_allNcCs|jd|fS)Nrm)r)r$rrrrrmszConditionProxy.waitcCs |jdS)Nr )r)r$rrrr szConditionProxy.notifycCs |jdS)Nr)r)r$rrrrszConditionProxy.notify_allcCsh|}|r|S|dk r$tj|}nd}d}x6|sb|dk rP|tj}|dkrPP|j||}q.W|S)Nr)timeZ monotonicrm)r$Z predicaterr8ZendtimeZwaittimerrrwait_fors   zConditionProxy.wait_for)r r rmr r)N)N)r*r,r-rrmr rrrrrrr s  r c@s2eZdZdZddZddZd d Zdd d Zd S) EventProxyrlrrrmcCs |jdS)Nrl)r)r$rrrrlszEventProxy.is_setcCs |jdS)Nr)r)r$rrrrszEventProxy.setcCs |jdS)Nr)r)r$rrrrszEventProxy.clearNcCs|jd|fS)Nrm)r)r$rrrrrmszEventProxy.wait)rlrrrm)N)r*r,r-rrlrrrmrrrrrs rc@sNeZdZdZdddZdd Zd d Zed d ZeddZ eddZ dS) BarrierProxy__getattribute__rmabortresetNcCs|jd|fS)Nrm)r)r$rrrrrm szBarrierProxy.waitcCs |jdS)Nr)r)r$rrrrszBarrierProxy.abortcCs |jdS)Nr)r)r$rrrrszBarrierProxy.resetcCs |jddS)Nrparties)r)r)r$rrrrszBarrierProxy.partiescCs |jddS)Nr n_waiting)r)r)r$rrrrszBarrierProxy.n_waitingcCs |jddS)Nrbroken)r)r)r$rrrrszBarrierProxy.broken)rrmrr)N) r*r,r-rrmrrrrrrrrrrr s   rc@s(eZdZd ZddZddZdd Zd S) NamespaceProxyr __setattr__ __delattr__cCs0|ddkrtj||Stj|d}|d|fS)NrrGrr)objectr)r$r callmethodrrr __getattr__ s   zNamespaceProxy.__getattr__cCs4|ddkrtj|||Stj|d}|d||fS)NrrGrr)rrr)r$rrrrrrr%s  zNamespaceProxy.__setattr__cCs0|ddkrtj||Stj|d}|d|fS)NrrGrr)rrr)r$rrrrrr*s   zNamespaceProxy.__delattr__N)rrr)r*r,r-rrrrrrrrrsrc@s*eZdZdZddZddZeeeZdS) ValueProxyrrcCs |jdS)Nr)r)r$rrrr3szValueProxy.getcCs|jd|fS)Nr)r)r$rrrrr5szValueProxy.setN)rr)r*r,r-rrrrrrrrrr1sr BaseListProxy__add__ __contains__ __delitem__ __getitem____len____mul__ __reversed____rmul__ __setitem__rCcountextendindexinsertrremovereverser__imul__c@seZdZddZddZdS) ListProxycCs|jd|f|S)Nr+)r)r$rrrr__iadd__AszListProxy.__iadd__cCs|jd|f|S)Nr0)r)r$rrrrr0DszListProxy.__imul__N)r*r,r-r2r0rrrrr1@sr1 DictProxyrrrrhas_keypopitem setdefaultrIterator ArrayProxy PoolProxyapply apply_asyncr}imapimap_unorderedrmap map_asyncstarmap starmap_asyncrZ AsyncResult)r;r?rAr<r=c@seZdZddZddZdS)r9cCs|S)Nr)r$rrrrdszPoolProxy.__enter__cCs |jdS)N)r)r$rrrrrrrfszPoolProxy.__exit__N)r*r,r-rrrrrrr9csc@seZdZdZdS)ra( Subclass of `BaseManager` which supports a number of shared object types. The types registered are those intended for the synchronization of threads, plus `dict`, `list` and `Namespace`. The `multiprocessing.Manager()` function creates started instances of this class. N)r*r,r-r.rrrrrms QueueZ JoinableQueuerdr^RLock SemaphoreBoundedSemaphore ConditionBarrierPoolrdictF)rr)r)rrr)NNNT)T)r!r"r#r$r%r&r'r(r)rCr*r+r,r-rr.r/rr0)r"r#r$rr%r)rrrr4rrrr5r6rr)r%r$r)) r:r;r}r<r=rr>r?r@rAr)I__all__rpr]rZqueuerrrrcontextr r r r r rrrZ view_typesrr Z view_typerrr9r2r{r:rFrHrIrrarbZ XmlListenerZ XmlClientrXrrrrrrrrrrrr r rrrrr r1r3rr8Z BasePoolProxyr9rrBrdr^rCrDrErFrGrHrIrrrr s             ; ] 4             __pycache__/reduction.cpython-36.opt-2.pyc000064400000015662147221272370014357 0ustar003 \ $@sddlmZmZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddddd gZ e j d kpeed oeed oeejd ZGdddejZejZd5dd Ze j d kre dddg7Z ddlZd6ddZddZddZddZGdddeZnHe dddg7Z ddlZe j dkZddZddZddZd dZd!dZd"d#Z Gd$d%d%Z!ee"e!j#e d&d'Z$ee"e%j&e$ee"e'j(e$d(d)Z)d*d+Z*eej+e)e j d krd,d-Z,d.d/Z-eeje,nd0d-Z,d1d/Z-eeje,Gd2d3d3ed4Z.dS)7)ABCMetaabstractmethodN)context send_handle recv_handleForkingPicklerregisterdumpwin32ZCMSG_LEN SCM_RIGHTSsendmsgcsFeZdZiZejZfddZeddZ edddZ e j Z Z S) rcs*tj||jj|_|jj|jdS)N)super__init___copyreg_dispatch_tablecopydispatch_tableupdate_extra_reducers)selfargs) __class__1/usr/lib64/python3.6/multiprocessing/reduction.pyr&s  zForkingPickler.__init__cCs||j|<dS)N)r)clstypereducerrrr +szForkingPickler.registerNcCs tj}|||j||jS)N)ioBytesIOr getbuffer)robjprotocolZbufrrrdumps0szForkingPickler.dumps)N)__name__ __module__ __qualname__rcopyregrrr classmethodr r"pickleloads __classcell__rr)rrr!s   cCst||j|dS)N)rr )r filer!rrrr :s DupHandle duplicate steal_handleFcCs*|dkrtj}tjtj||d|tjS)Nr)_winapiGetCurrentProcessDuplicateHandleDUPLICATE_SAME_ACCESS)handleZtarget_processZ inheritablerrrr-Gs  cCsBtjtjd|}z tj||tjddtjtjBStj|XdS)NFr)r/ OpenProcessPROCESS_DUP_HANDLEr1r0r2DUPLICATE_CLOSE_SOURCE CloseHandle)Z source_pidr3Zsource_process_handlerrrr.Os  cCst|tj|}|j|dS)N)r,r/r2send)connr3destination_pidZdhrrrr[scCs |jjS)N)recvdetach)r9rrrr`sc@seZdZdddZddZdS)r,Nc Cs\|dkrtj}tjtjd|}ztjtj|||dd|_Wdtj|X||_ ||_ dS)NFr) osgetpidr/r4r5r1r0_handler7_access_pid)rr3accesspidprocrrrrfs zDupHandle.__init__c CsV|jtjkr|jStjtjd|j}ztj||jtj|j dtj Stj |XdS)NF) rAr=r>r?r/r4r5r1r0r@r6r7)rrDrrrr<us  zDupHandle.detach)N)r#r$r%rr<rrrrr,ds DupFdsendfdsrecvfdsdarwincCsVtjd|}tt|dg}|j|gtjtj|fgtrR|jddkrRt ddS)NirAz%did not receive acknowledgement of fd) arraybyteslenr socket SOL_SOCKETr ACKNOWLEDGEr; RuntimeError)sockZfdsmsgrrrrFs  c Cstjd}|j|}|jdtj|\}}}}| r>| r>tyxtrN|jdt|dkrjt dt||d\}} } |tj kr| tj krt| |jdkrt |j | t|SWnt tfk rYnXt ddS)NrIrrKzreceived %d items of ancdatarzInvalid data received)rLitemsizeZrecvmsgrOZ CMSG_SPACEEOFErrorrQr8rNrRrPr ValueErrorZ frombyteslist IndexError) rSsizeaZ bytes_sizerTZancdataflagsZaddrZ cmsg_levelZ cmsg_typeZ cmsg_datarrrrGs*          c Cs2tj|jtjtj}t||gWdQRXdS)N)rOfromfdfilenoAF_UNIX SOCK_STREAMrF)r9r3r:srrrrsc Cs0tj|jtjtj}t|ddSQRXdS)Nrr)rOr]r^r_r`rG)r9rarrrrscCsFtj}|dk r |j|j|Str:ddlm}|j|StddS)Nr)resource_sharerz&SCM_RIGHTS appears not to be available)rZget_spawning_popenrEZduplicate_for_childHAVE_SEND_HANDLErbrW)fdZ popen_objrbrrrrEs  cCs2|jdkrt|j|jjffSt|j|jjffSdS)N)__self__getattrr__func__r#)mrrr_reduce_methods rjc@seZdZddZdS)_CcCsdS)Nr)rrrrfsz_C.fN)r#r$r%rlrrrrrksrkcCst|j|jffS)N)rg __objclass__r#)rirrr_reduce_method_descriptorsrncCst|j|j|jpiffS)N)_rebuild_partialfuncrkeywords)prrr_reduce_partialsrscCstj|f||S)N) functoolspartial)rprrqrrrrosrocCsddlm}t||ffS)Nr) DupSocket)rbrv_rebuild_socket)rarvrrr_reduce_sockets rxcCs|jS)N)r<)ZdsrrrrwsrwcCs"t|j}t||j|j|jffS)N)rEr^rwfamilyrproto)radfrrrrxs cCs|j}tj||||dS)N)r^)r<rO)r{ryrrzrerrrrwsc@s`eZdZeZeZeZeZeZej dkr4e Z e Z e Z n e Z eZeZeZeZeZeZeZddZdS)AbstractReducerr cGsNtttjttttjttttj ttt j t tt j tdS)N)r rrkrlrjrXappendrnint__add__rtrursrOrx)rrrrrr s  zAbstractReducer.__init__N)r#r$r%rr r rrsysplatformr.r-r,rFrGrErjrnrorxrwrrrrrr|s$ r|) metaclass)N)NF)/abcrrr&rtrr=r(rOrrdr__all__rhasattrrcZPicklerrr r r/r-r.rrobjectr,rLrQrFrGrErjrkrrlrnrXr}r~rrsrorurxrwr|rrrr sb         #    __pycache__/popen_spawn_win32.cpython-36.opt-2.pyc000064400000005122147221272370015724 0ustar003 \ @sddlZddlZddlZddlZddlZddlmZmZmZddl m Z ddl m Z dgZ dZ ejdkoreed d Zejjjd ZGd ddeZdS) N) reductionget_spawning_popenset_spawning_popen)spawn)utilPopeniZwin32frozenFzpythonservice.exec@s:eZdZdZddZddZd ddZd d Zd d ZdS)rrc Cstj|j}tjdd\}}tj|d}tjtj |d}dj dd|D}t |ddd}y4tj tj |ddd dddd \}} } } tj| Wntj|YnX| |_d|_||_t||_tj|tj|jft|ztj||tj||WdtdXWdQRXdS) Nr)Z parent_pidZ pipe_handle css|]}d|VqdS)z"%s"N).0xr r 9/usr/lib64/python3.6/multiprocessing/popen_spawn_win32.py )sz!Popen.__init__..wbT)closefdF)rZget_preparation_data_name_winapiZ CreatePipemsvcrtZopen_osfhandleZget_command_lineosgetpidjoinopenZ CreateProcessZget_executableZ CloseHandlepid returncode_handleintsentinelrZFinalizerrdump) selfZ process_objZ prep_dataZrhandleZwhandleZwfdcmdZto_childZhpZhtrtidr r r__init__ s2      zPopen.__init__cCstj||jS)N)rZ duplicater)rZhandler r rduplicate_for_childEszPopen.duplicate_for_childNcCst|jdkrn|dkrtj}ntdt|dd}tjt|j|}|tjkrntj|j}|t krht j }||_|jS)Nrig?) rrZINFINITEmaxrZWaitForSingleObjectrZ WAIT_OBJECT_0ZGetExitCodeProcess TERMINATEsignalSIGTERM)rtimeoutZmsecsrescoder r rwaitIs   z Popen.waitcCs |jddS)Nr)r()r+)rr r rpollYsz Popen.pollc CsL|jdkrHytjt|jtWn&tk rF|jdddkrBYnXdS)Ng?)r()rrZTerminateProcessrrr%OSErrorr+)rr r r terminate\s  zPopen.terminate)N) __name__ __module__ __qualname__methodr"r#r+r,r.r r r rrs % )rrr&sysrcontextrrrrr__all__r%platformgetattrZWINEXE executablelowerendswithZ WINSERVICEobjectrr r r rs  __pycache__/process.cpython-36.opt-2.pyc000064400000014455147221272370014040 0ustar003 \# @sdddgZddlZddlZddlZddlZddlmZyejjej Z Wne k rbdZ YnXddZ ddZ dd ZGd ddeZGd d d eZGd ddeZeaejdaea[iZxSsz'BaseProcess.__init__..)next_process_counterr _identity_configcopyosgetpid _parent_pidr _targettuple_argsdict_kwargstype__name__join_namer _danglingadd)rgrouptargetnameargskwargsrcountrrr__init__Gs    zBaseProcess.__init__cCs|jr|j|j|jdS)N)r"r$r&)rrrrrunXszBaseProcess.runcCs6t|j||_|jj|_|`|`|`tj |dS)N) r rr sentinel _sentinelr"r$r&r r,)rrrrstart_s    zBaseProcess.startcCs|jjdS)N)r terminate)rrrrr8pszBaseProcess.terminatecCs"|jj|}|dk rtj|dS)N)r waitr r)rZtimeoutresrrrr)vs zBaseProcess.joincCsB|tkr dS|jdkrdS|jj}|dkr0dStj|dSdS)NTF)rr r r r)r returncoderrris_alives   zBaseProcess.is_alivecCs|jS)N)r*)rrrrr/szBaseProcess.namecCs ||_dS)N)r*)rr/rrrr/scCs|jjddS)NrF)rget)rrrrrszBaseProcess.daemoncCs||jd<dS)Nr)r)rZdaemonicrrrrscCs |jdS)Nauthkey)r)rrrrr>szBaseProcess.authkeycCst||jd<dS)Nr>)AuthenticationStringr)rr>rrrr>scCs|jdkr|jS|jjS)N)r r )rrrrexitcodes zBaseProcess.exitcodecCs"|tkrtjS|jo|jjSdS)N)rrr r pid)rrrridentszBaseProcess.identc Cs(y|jStk r"tdYnXdS)Nzprocess not started)r6AttributeError ValueError)rrrrr5szBaseProcess.sentinelcCs|tkrd}n>|jtjkr"d}n*|jdkr2d}n|jjdk rH|j}nd}t|tkrv|dkrfd}ndt j ||}dt|j |j ||j rdpd fS) NZstartedunknowninitialrZstoppedz stopped[%s]z<%s(%s, %s%s)>z daemon)rr!rr r r r@r'int_exitcode_to_namer=r(r*r)rZstatusrrr__repr__s  zBaseProcess.__repr__c CsJddlm}m}zy||jdk r,|j|jtjdata |j t }|a z|j j |jWd~X|jdz|jd}Wd|jXWntk r}zL|jsd}n:t|jdtr|jd}ntjjt|jddd}WYdd}~Xn2d}ddl}tjjd|j|jYnXWd|jd||jX|S)N)utilcontextz child process calling self.run()r z Process %s: z process exiting with exitcode %d)rGrLrMZ _start_methodZ_force_start_method itertoolsr2rsetr Z _close_stdinrZ_finalizer_registryclearZ_run_after_forkersinfor4Z_exit_function SystemExitr0 isinstancerHsysstderrwriter tracebackr/ print_excZ_flush_std_streams)rrLrMZ old_processr@erXrrr _bootstrapsB        zBaseProcess._bootstrap)N)r( __module__ __qualname__rr3r4r7r8r)r<propertyr/setterrr>r@rBrAr5rJr[rrrrr>s(       c@seZdZddZdS)r?cCs,ddlm}|dkrtdtt|ffS)NrK)get_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)rMr` TypeErrorr?bytes)rr`rrr __reduce__s   zAuthenticationString.__reduce__N)r(r\r]rcrrrrr?sr?c@seZdZddZdS) _MainProcesscCs2f|_d|_d|_d|_ttjddd|_dS)NZ MainProcess z/mp)r>Z semprefix)rr*r!r r?rurandomr)rrrrr3-s  z_MainProcess.__init__N)r(r\r]r3rrrrrd+srdrKZSIG_) __all__rrUsignalrO _weakrefsetrpathabspathgetcwdZ ORIGINAL_DIROSErrorrrr objectrrbr?rdrr2rrPr rIr __dict__itemsr/Zsignumr+rrrr s2     ` __pycache__/forkserver.cpython-36.opt-1.pyc000064400000015106147221272370014543 0ustar003 \!@sddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddlm Z ddl m Z ddlm Z ddlmZddlmZd d d d gZd ZejdZGdddeZdddZddZddZddZeZejZejZejZejZdS)N) connection)process) reduction)semaphore_tracker)spawn)utilensure_runningget_inherited_fdsconnect_to_new_processset_forkserver_preloadQc@s4eZdZddZddZddZddZd d Zd S) ForkServercCs.d|_d|_d|_d|_tj|_dg|_dS)N__main__)_forkserver_address_forkserver_alive_fd_forkserver_pid_inherited_fds threadingZLock_lock_preload_modules)selfr"/usr/lib64/python3.6/forkserver.py__init__!s  zForkServer.__init__cCs&tdd|jDstd||_dS)z>Set list of module names to try to load in forkserver process.css|]}t|tkVqdS)N)typestr).0modrrr +sz4ForkServer.set_forkserver_preload..z&module_names must be a list of stringsN)allr TypeError)rZ modules_namesrrrr )sz!ForkServer.set_forkserver_preloadcCs|jS)zReturn list of fds inherited from parent process. This returns None if the current process was not started by fork server. )r)rrrrr /szForkServer.get_inherited_fdscCs|jt|dtkr tdtjtj}|j|jtj \}}tj \}}|||j t j g}||7}z.r(iz-czCfrom multiprocessing.forkserver import main; main(%d, %d, %r, **%r))rrr rr)waitpidWNOHANGr+rrrrZget_preparation_datadictitemsr'r(rZarbitrary_addressZbindchmodZlistenr*filenoZget_executablerZ_args_from_interpreter_flagsZspawnv_passfds) rpidZstatuscmddatalistenerZaddressalive_rZalive_wZ fds_to_passZexeargsr)r4rr TsL             zForkServer.ensure_runningN)__name__ __module__ __qualname__rr r r r rrrrrs rc4Cs|rhd|kr8|dk r8dtj_ztj|Wdtj`Xx.|D]&}y t|Wq>tk rbYq>Xq>Wtjt j t j t j t j i}dd|j D}tjtj|d,}tj} |jt_| j|tj| j|tjxyxdd| jD} | rPqW|| kr t|jd l} d } tjd krzFyt| |||Wn.tk rntjtj tj!j"YnXWdtj#| XWdQRXWqt$k r} z| j%t%j&krWYdd} ~ XqXqWWdQRXWdQRXdS) zRun forkserver.rNTcSsi|]\}}tj|||qSr)signal)rsigvalrrr szmain..)r:cSsg|]\}}|jqSr)Zfileobj)rkeyZeventsrrr szmain..rr)'rZcurrent_processZ _inheritingrZimport_main_path __import__ ImportErrorrZ _close_stdinrDSIGCHLDSIG_IGNSIGINTr8r'r( selectorsZDefaultSelectorZ getsockname _forkserverrregisterZ EVENT_READZselect SystemExitZacceptr)fork _serve_one Exceptionsys excepthookexc_infostderrflush_exitOSErrorerrnoZ ECONNABORTED)Z listener_fdr?Zpreloadr/r0modnamehandlersZ old_handlersr>ZselectorZrfdsscodeerrrmainsR          rcc Cs|jtj|x |jD]\}}tj||qWtj|td}|j|^}}t_} t_ | t j _ t |tjdtjkrddl} | jtj|} t || dS)Nrrandomr)r+r)r8rDrZrecvfdsr%rPrrrZ_semaphore_trackerZ_fdwrite_unsignedgetpidrVmodulesrdZseedr_main) r`r>r?r_rErFr,r.r-ZstfdrdrarrrrTs   rTcCsRd}tj}x8t||krBtj||t|}|s8td||7}q Wtj|dS)Nzunexpected EOFr)UNSIGNED_STRUCTsizer$r)readEOFErrorunpack)fdr=Zlengthr`rrr read_unsigneds rpcCs@tj|}x0|r:tj||}|dkr,td||d}q WdS)Nrzshould not get here)rjpackr)write RuntimeError)ronmsgnbytesrrrres   re)NN)r]r)rOrDr'structrVrrrcontextrrrr__all__r%StructrjobjectrrcrTrprerPr r r r rrrrs6       s =!  __pycache__/pool.cpython-36.opt-1.pyc000064400000050106147221272370013323 0ustar003 \e@s8ddgZddlZddlZddlZddlZddlZddlZddlZddlm Z ddlm Z m Z dZ dZ dZejZdd Zd d ZGd d d eZGdddZddZGdddeZdfddfddZddZGdddeZGdddeZeZGdddeZGdddeZGd d!d!eZ Gd"ddeZ!dS)#Pool ThreadPoolN)util) get_context TimeoutErrorcCs tt|S)N)listmap)argsr /usr/lib64/python3.6/pool.pymapstar+srcCsttj|d|dS)Nrr)r itertoolsstarmap)r r r r starmapstar.src@seZdZddZddZdS)RemoteTracebackcCs ||_dS)N)tb)selfrr r r __init__6szRemoteTraceback.__init__cCs|jS)N)r)rr r r __str__8szRemoteTraceback.__str__N)__name__ __module__ __qualname__rrr r r r r5src@seZdZddZddZdS)ExceptionWithTracebackcCs0tjt|||}dj|}||_d||_dS)Nz """ %s""") tracebackformat_exceptiontypejoinexcr)rr rr r r r<s zExceptionWithTraceback.__init__cCst|j|jffS)N) rebuild_excr r)rr r r __reduce__Asz!ExceptionWithTraceback.__reduce__N)rrrrr"r r r r r;srcCst||_|S)N)r __cause__)r rr r r r!Ds r!cs0eZdZdZfddZddZddZZS)MaybeEncodingErrorzVWraps possible unpickleable errors, so they can be safely sent through the socket.cs.t||_t||_tt|j|j|jdS)N)reprr valuesuperr$r)rr r&) __class__r r rPs  zMaybeEncodingError.__init__cCsd|j|jfS)Nz(Error sending result: '%s'. Reason: '%s')r&r )rr r r rUszMaybeEncodingError.__str__cCsd|jj|fS)Nz<%s: %s>)r(r)rr r r __repr__YszMaybeEncodingError.__repr__)rrr__doc__rrr) __classcell__r r )r(r r$Ls r$Fc'Cs|j}|j}t|dr*|jj|jj|dk r:||d}xH|dksX|oT||kry |} Wn$ttfk rtj dPYnX| dkrtj dP| \} } } } }yd| | |f}WnBt k r}z&|r| t k rt ||j }d|f}WYdd}~XnXy|| | |fWnRt k rd}z4t||d}tj d||| | d|ffWYdd}~XnXd} } }} } }|d7}qBWtj d |dS) N_writerrz)worker got EOFError or OSError -- exitingzworker got sentinel -- exitingTFrz0Possible encoding error while sending result: %szworker exiting after %d tasks)putgethasattrr,close_readerEOFErrorOSErrorrdebug Exception_helper_reraises_exceptionr __traceback__r$)inqueueoutqueue initializerinitargsZmaxtasksZwrap_exceptionr-r.Z completedtaskjobifuncr kwdsresultewrappedr r r worker]sD        $ rDcCs|dS)z@Pickle-able helper function for use by _guarded_task_generation.Nr )Zexr r r r6sr6c@s6eZdZdZdZddZddfddfddZdd Zd d Zd d Z ddZ fifddZ d=ddZ d>ddZ d?ddZddZd@ddZdAddZfiddfdd ZdBd!d"ZdCd#d$Zed%d&Zed'd(Zed)d*Zed+d,Zd-d.Zd/d0Zd1d2Zd3d4Zed5d6Zed7d8Z d9d:Z!d;d<Z"dS)DrzS Class which supports an async version of applying functions to arguments. TcOs|jj||S)N)_ctxProcess)rr r@r r r rFsz Pool.ProcessNc Csn|pt|_|jtj|_i|_t|_||_ ||_ ||_ |dkrPt j pNd}|dkr`td|dk rzt| rztd||_g|_|jtjtj|fd|_d|j_t|j_|jjtjtj|j|j|j|j|jfd|_d|j_t|j_|jjtjtj|j|j |jfd|_!d|j!_t|j!_|j!jt"j#||j$|j|j%|j|j|j|j|j!|jfdd|_&dS)Nrz&Number of processes must be at least 1zinitializer must be a callable)targetr T)r Z exitpriority)'rrE _setup_queuesqueueQueue _taskqueue_cacheRUN_state_maxtasksperchild _initializer _initargsos cpu_count ValueErrorcallable TypeError _processes_pool_repopulate_pool threadingZThreadr_handle_workers_worker_handlerdaemonstart _handle_tasks _quick_put _outqueue _task_handler_handle_results _quick_get_result_handlerrZFinalize_terminate_pool_inqueue _terminate)r processesr:r;Zmaxtasksperchildcontextr r r rsT         z Pool.__init__cCsZd}xPttt|jD]:}|j|}|jdk rtjd||jd}|j|=qW|S)zCleanup after any worker processes which have exited due to reaching their specified lifetime. Returns True if any workers were cleaned up. FNzcleaning up worker %dT)reversedrangelenrYexitcoderr4r)rZcleanedr>rDr r r _join_exited_workerss   zPool._join_exited_workersc Cs|xvt|jt|jD]^}|jt|j|j|j|j |j |j fd}|jj ||j jdd|_ d|_|jtjdqWdS)zBring the number of pool processes up to the specified number, for use after reaping workers which have exited. )rGr rFZ PoolWorkerTz added workerN)rmrXrnrYrFrDrhrbrQrRrP_wrap_exceptionappendnamereplacer^r_rr4)rr>wr r r rZs  zPool._repopulate_poolcCs|jr|jdS)zEClean up any exited workers and start replacements for them. N)rprZ)rr r r _maintain_poolszPool._maintain_poolcCs4|jj|_|jj|_|jjj|_|jjj|_ dS)N) rEZ SimpleQueuerhrbr,sendrar1recvre)rr r r rIs   zPool._setup_queuescCs|j|||jS)z6 Equivalent of `func(*args, **kwds)`. ) apply_asyncr.)rr?r r@r r r applysz Pool.applycCs|j||t|jS)zx Apply `func` to each element in `iterable`, collecting the results in a list that is returned. ) _map_asyncrr.)rr?iterable chunksizer r r r szPool.mapcCs|j||t|jS)z Like `map()` method but the elements of the `iterable` are expected to be iterables as well and will be unpacked as arguments. Hence `func` and (a, b) becomes func(a, b). )r{rr.)rr?r|r}r r r r sz Pool.starmapcCs|j||t|||S)z= Asynchronous version of `starmap()` method. )r{r)rr?r|r}callbackerror_callbackr r r starmap_asyncs zPool.starmap_asyncccsny0d}x&t|D]\}}||||fifVqWWn8tk rh}z||dt|fifVWYdd}~XnXdS)zProvides a generator of tasks for imap and imap_unordered with appropriate handling for iterables which throw exceptions during iteration.rN) enumerater5r6)rZ result_jobr?r|r>xrBr r r _guarded_task_generations zPool._guarded_task_generationrcCs|jtkrtd|dkrFt|j}|jj|j|j|||j f|St j |||}t|j}|jj|j|jt ||j fdd|DSdS)zP Equivalent of `map()` -- can be MUCH slower than `Pool.map()`. zPool not runningrcss|]}|D] }|Vq qdS)Nr ).0chunkitemr r r @szPool.imap..N) rOrNrU IMapIteratorrMrLr-r_job _set_lengthr _get_tasksr)rr?r|r}rA task_batchesr r r imap's      z Pool.imapcCs|jtkrtd|dkrFt|j}|jj|j|j|||j f|St j |||}t|j}|jj|j|jt ||j fdd|DSdS)zL Like `imap()` method but ordering of results is arbitrary. zPool not runningrcss|]}|D] }|Vq qdS)Nr )rrrr r r r[sz&Pool.imap_unordered..N) rOrNrUIMapUnorderedIteratorrMrLr-rrrrrr)rr?r|r}rArr r r imap_unorderedBs      zPool.imap_unorderedcCsB|jtkrtdt|j||}|jj|jd|||fgdf|S)z; Asynchronous version of `apply()` method. zPool not runningrN)rOrNrU ApplyResultrMrLr-r)rr?r r@r~rrAr r r ry]s  zPool.apply_asynccCs|j||t|||S)z9 Asynchronous version of `map()` method. )r{r)rr?r|r}r~rr r r map_asynchszPool.map_asyncc Cs|jtkrtdt|ds$t|}|dkrTtt|t|jd\}}|rT|d7}t|dkrdd}tj |||}t |j |t|||d} |j j |j| j||df| S)zY Helper function to implement map, starmap and their async counterparts. zPool not running__len__Nrr)r)rOrNrUr/r divmodrnrYrr MapResultrMrLr-rr) rr?r|Zmapperr}r~rZextrarrAr r r r{ps&   zPool._map_asynccCsTtj}x0|jtks$|jr8|jtkr8|jtjdq W|j j dt j ddS)Ng?zworker handler exiting) r[current_threadrOrNrM TERMINATErvtimesleeprLr-rr4)poolthreadr r r r\s  zPool._handle_workersc Csjtj}xt|jdD]\}}d}zx|D]}|jr@tjdPy ||Wq*tk r} zD|dd\} } y|| j| d| fWnt k rYnXWYdd} ~ Xq*Xq*W|rtjd|r|dnd } || dwPWdd}}} XqWtjdy:tjd|j dtjdx|D]} |dq&WWn t k rZtjd YnXtjd dS) Nz'task handler found thread._state != RUNrFzdoing set_length()rztask handler got sentinelz/task handler sending sentinel to result handlerz(task handler sending sentinel to workersz/task handler got OSError when sending sentinelsztask handler exitingr) r[riterr.rOrr4r5_setKeyErrorr-r3) taskqueuer-r9rcacherZtaskseqZ set_lengthr<rBr=idxpr r r r`sB          zPool._handle_taskscCstj}xy |}Wn"ttfk r6tjddSX|jrJtjdP|dkr^tjdP|\}}}y||j||Wntk rYnXd}}}q Wx|o|jt kr:y |}Wn"ttfk rtjddSX|dkrtjdq|\}}}y||j||Wntk r*YnXd}}}qWt |drtjdy,x&t dD]}|j j spP|q^WWnttfk rYnXtjdt||jdS) Nz.result handler got EOFError/OSError -- exitingz,result handler found thread._state=TERMINATEzresult handler got sentinelz&result handler ignoring extra sentinelr1z"ensuring that outqueue is not full z7result handler exiting: len(cache)=%s, thread._state=%s)r[rr3r2rr4rOrrrr/rmr1pollrn)r9r.rrr<r=r>objr r r rdsZ            zPool._handle_resultsccs4t|}x&ttj||}|s"dS||fVq WdS)N)rtuplerislice)r?itsizerr r r rs zPool._get_taskscCs tddS)Nz:pool objects cannot be passed between processes or pickled)NotImplementedError)rr r r r"szPool.__reduce__cCs&tjd|jtkr"t|_t|j_dS)Nz closing pool)rr4rOrNCLOSEr])rr r r r0s  z Pool.closecCs$tjdt|_t|j_|jdS)Nzterminating pool)rr4rrOr]ri)rr r r terminates zPool.terminatecCsDtjd|jj|jj|jjx|jD] }|jq0WdS)Nz joining pool)rr4r]rrcrfrY)rrr r r rs      z Pool.joincCsDtjd|jjx*|jr>|jjr>|jjtj dqWdS)Nz7removing tasks from inqueue until task handler finishedr) rr4Z_rlockacquireis_aliver1rrxrr)r8 task_handlerrr r r _help_stuff_finish(s    zPool._help_stuff_finishc Cs(tjdt|_t|_tjd|j||t|t|_|jdtjdtj|k r`|j |rt |ddrtjdx|D]} | j dkr| j qWtjdtj|k r|j tjdtj|k r|j |ot |ddr$tjd x,|D]$} | j rtjd | j| j qWdS) Nzfinalizing poolz&helping task handler/workers to finishzjoining worker handlerrrzterminating workerszjoining task handlerzjoining result handlerzjoining pool workerszcleaning up worker %d)rr4rrOrrnr-r[rrr/rorrpid) clsrr8r9rZworker_handlerrZresult_handlerrrr r r rg1s6               zPool._terminate_poolcCs|S)Nr )rr r r __enter___szPool.__enter__cCs |jdS)N)r)rexc_typeZexc_valZexc_tbr r r __exit__bsz Pool.__exit__)N)N)NNN)r)r)NNN)NNN)#rrrr*rqrFrrprZrvrIrzr rrrrrryrr{ staticmethodr\r`rdrr"r0rrr classmethodrgrrr r r r rsF8         . <  .c@s@eZdZddZddZddZddd Zdd d Zd d ZdS)rcCs4tj|_tt|_||_||_||_|||j<dS)N) r[ZEvent_eventnext job_counterrrM _callback_error_callback)rrr~rr r r rks   zApplyResult.__init__cCs |jjS)N)rZis_set)rr r r readysszApplyResult.readycCs|jS)N)_success)rr r r successfulvszApplyResult.successfulNcCs|jj|dS)N)rwait)rtimeoutr r r rzszApplyResult.waitcCs,|j||jst|jr"|jS|jdS)N)rrrr_value)rrr r r r.}s  zApplyResult.getcCsV|\|_|_|jr$|jr$|j|j|jr>|j r>|j|j|jj|j|j=dS)N)rrrrrsetrMr)rr>rr r r rs     zApplyResult._set)N)N) rrrrrrrr.rr r r r ris   rc@seZdZddZddZdS)rcCsftj||||dd|_dg||_||_|dkrLd|_|jj||j=n||t |||_dS)N)rTr) rrrr _chunksize _number_leftrrrbool)rrr}lengthr~rr r r rs    zMapResult.__init__cCs|jd8_|\}}|rp|jrp||j||j|d|j<|jdkr|jrZ|j|j|j|j=|jjnH| r|jrd|_||_|jdkr|j r|j |j|j|j=|jjdS)NrrF) rrrrrrMrrrr)rr>Zsuccess_resultsuccessrAr r r rs"         zMapResult._setN)rrrrrr r r r rs rc@s:eZdZddZddZd ddZeZdd Zd d ZdS) rcCsJtjtj|_tt|_||_tj |_ d|_ d|_ i|_ |||j<dS)Nr)r[Z ConditionZLock_condrrrrM collectionsdeque_items_index_length _unsorted)rrr r r rs  zIMapIterator.__init__cCs|S)Nr )rr r r __iter__szIMapIterator.__iter__NcCs|j~y|jj}Wnhtk r~|j|jkr6t|jj|y|jj}Wn(tk rx|j|jkrpttYnXYnXWdQRX|\}}|r|S|dS)N) rrpopleft IndexErrorrr StopIterationrr)rrrrr&r r r rs"   zIMapIterator.nextc Cs|j|j|krr|jj||jd7_x8|j|jkrd|jj|j}|jj||jd7_q.W|jjn ||j|<|j|jkr|j|j =WdQRXdS)Nr) rrrrrrpopnotifyrrMr)rr>rr r r rs      zIMapIterator._setc Cs<|j,||_|j|jkr.|jj|j|j=WdQRXdS)N)rrrrrMr)rrr r r rs   zIMapIterator._set_length)N) rrrrrr__next__rrr r r r rs   rc@seZdZddZdS)rc CsP|j@|jj||jd7_|jj|j|jkrB|j|j=WdQRXdS)Nr)rrrrrrrrMr)rr>rr r r rs    zIMapUnorderedIterator._setN)rrrrr r r r rsrc@s@eZdZdZeddZddffddZddZed d ZdS) rFcOsddlm}|||S)Nr)rF)ZdummyrF)r r@rFr r r rFs zThreadPool.ProcessNcCstj||||dS)N)rr)rrjr:r;r r r rszThreadPool.__init__cCs,tj|_tj|_|jj|_|jj|_dS)N)rJrKrhrbr-rar.re)rr r r rIs   zThreadPool._setup_queuesc Cs<|j,|jj|jjdg||jjWdQRXdS)N)Z not_emptyrJclearextendZ notify_all)r8rrr r r rs zThreadPool._help_stuff_finish) rrrrqrrFrrIrr r r r r s  )"__all__r[rJrrrSrrrrrrrNrrcountrrrr5rrr!r$rDr6objectrrZ AsyncResultrrrrr r r r  s@   *\&)@__pycache__/sharedctypes.cpython-36.opt-1.pyc000064400000015211147221272370015046 0ustar003 \e @s:ddlZddlZddlmZddlmZddlmZmZejZ dddd d d gZ ej ej ej ejejejejejejejejejd Zd dZddZddZdddddZddddd Zdd Zd&dd ZddZddZ ddZ!dZ"iZ#ej$Z%Gddde&Z'Gd d!d!e'Z(Gd"d#d#e'Z)Gd$d%d%e)Z*dS)'N)heap) get_context) reductionassert_spawningRawValueRawArrayValueArraycopy synchronized) cubBhHiIlLfdcCs tj|}tj|}t||dS)N)ctypessizeofrZ BufferWrapper rebuild_ctype)type_sizewrapperr$/usr/lib64/python3.6/sharedctypes.py _new_value&s  r!cGs<tj||}t|}tjtj|dtj||j||S)z> Returns a ctypes object allocated from shared memory r)typecode_to_typegetr!rmemset addressofr__init__)typecode_or_typeargsrobjrrr r+s   cCsjtj||}t|trD||}t|}tjtj|dtj||S|t |}t|}|j ||SdS)z= Returns a ctypes array allocated from shared memory rN) r"r# isinstanceintr!rr$r%rlenr&)r'size_or_initializerrr)resultrrr r5s    T)lockctxcGsXt|f|}|dkr|S|dkr4|p*t}|j}t|dsJtd|t|||dS)z6 Return a synchronization wrapper for a Value FTNacquirez'%r' has no method 'acquire')r0)TN)rrRLockhasattrAttributeErrorr )r'r/r0r(r)rrr r Es   cCsTt||}|dkr|S|dkr0|p&t}|j}t|dsFtd|t|||dS)z9 Return a synchronization wrapper for a RawArray FTNr1z'%r' has no method 'acquire')r0)TN)rrr2r3r4r )r'r-r/r0r)rrr r Ss    cCstt|}|tj|d<|S)Nr)r!typerZpointer)r)Znew_objrrr r as c Cs|pt}t|tjr"t|||St|tjrR|jtjkrFt|||St |||St |}y t |}WnVt k rdd|j D}tdd|D}d|j}t |tf|}t |<YnX||||SdS)NcSsg|] }|dqS)rr).0Zfieldrrr usz synchronized..css|]}|t|fVqdS)N) make_property)r6namerrr vszsynchronized.. Synchronized)rr*rZ _SimpleCDatar;r _type_c_charSynchronizedStringSynchronizedArrayr5 class_cacheKeyErrorZ_fields_dict__name__SynchronizedBase)r)r/r0clssclsnamesrZ classnamerrr r fs          cCs@t|t|tjr(t|j|j|jffStt||jdffSdS)N) rr*rr rr<_wrapperZ_length_r5)r)rrr reduce_ctypes rIcCs8|dk r||}tj|t|j}|j|}||_|S)N)_ForkingPicklerregisterrIZcreate_memoryviewZ from_bufferrH)rrZlengthZbufr)rrr rs  rc CsJyt|Stk rDi}tt|fd|||t|<||SXdS)N) prop_cacherAexectemplate)r9rrrr r8s r8z def get%s(self): self.acquire() try: return self._obj.%s finally: self.release() def set%s(self, value): self.acquire() try: self._obj.%s = value finally: self.release() %s = property(get%s, set%s) c@sFeZdZdddZddZddZdd Zd d Zd d ZddZ dS)rDNcCsB||_|r||_n|ptdd}|j|_|jj|_|jj|_dS)NT)force)_obj_lockrr2r1release)selfr)r/r0rrr r&s  zSynchronizedBase.__init__cCs |jjS)N)rR __enter__)rTrrr rUszSynchronizedBase.__enter__cGs |jj|S)N)rR__exit__)rTr(rrr rVszSynchronizedBase.__exit__cCst|t|j|jffS)N)rr rQrR)rTrrr __reduce__szSynchronizedBase.__reduce__cCs|jS)N)rQ)rTrrr get_objszSynchronizedBase.get_objcCs|jS)N)rR)rTrrr get_lockszSynchronizedBase.get_lockcCsdt|j|jfS)Nz<%s wrapper for %s>)r5rCrQ)rTrrr __repr__szSynchronizedBase.__repr__)NN) rC __module__ __qualname__r&rUrVrWrXrYrZrrrr rDs rDc@seZdZedZdS)r;valueN)rCr[r\r8r]rrrr r;sr;c@s4eZdZddZddZddZddZd d Zd S) r?cCs t|jS)N)r,rQ)rTrrr __len__szSynchronizedArray.__len__c Cs| |j|SQRXdS)N)rQ)rTrrrr __getitem__szSynchronizedArray.__getitem__c Cs|||j|<WdQRXdS)N)rQ)rTrr]rrr __setitem__szSynchronizedArray.__setitem__c Cs||j||SQRXdS)N)rQ)rTstartstoprrr __getslice__szSynchronizedArray.__getslice__c Cs"|||j||<WdQRXdS)N)rQ)rTrarbvaluesrrr __setslice__szSynchronizedArray.__setslice__N)rCr[r\r^r_r`rcrerrrr r?s r?c@seZdZedZedZdS)r>r]rawN)rCr[r\r8r]rfrrrr r>sr>)NN)+rweakrefrrcontextrrZForkingPicklerrJ__all__r=Zc_wcharZc_byteZc_ubyteZc_shortZc_ushortZc_intZc_uintZc_longZc_ulongZc_floatZc_doubler"r!rrr r r r rIrr8rOrMWeakKeyDictionaryr@objectrDr;r?r>rrrr  s:      __pycache__/resource_sharer.cpython-36.pyc000064400000012024147221272370014603 0ustar003 \@sddlZddlZddlZddlZddlZddlmZddlmZddlm Z dgZ ej dkrxe dg7Z Gd dde Z ne d g7Z Gd d d e ZGd d d e ZeZejZdS)N)process) reduction)utilstopZwin32 DupSocketc@s eZdZdZddZddZdS)rzPicklable wrapper for a socket.cs(|jfdd}tj|j|_dS)Ncsj|}|j|dS)N)shareZ send_bytes)connpidr)new_sock'/usr/lib64/python3.6/resource_sharer.pysends z DupSocket.__init__..send)dup_resource_sharerregisterclose_id)selfZsockrr )r r __init__s zDupSocket.__init__c Cs*tj|j}|j}tj|SQRXdS)z1Get the socket. This should only be called once.N)rget_connectionrZ recv_bytessocketZ fromshare)rr rr r r detach$szDupSocket.detachN)__name__ __module__ __qualname____doc__rrr r r r rsDupFdc@s eZdZdZddZddZdS)rz-Wrapper for fd which can be used at any time.cs4tj|fdd}fdd}tj|||_dS)Ncstj||dS)N)rZ send_handle)r r )new_fdr r r1szDupFd.__init__..sendcstjdS)N)osrr )rr r r3szDupFd.__init__..close)rrrrr)rfdrrr )rr r/s   zDupFd.__init__c Cs"tj|j }tj|SQRXdS)z-Get the fd. This should only be called once.N)rrrrZ recv_handle)rr r r r r7sz DupFd.detachN)rrrrrrr r r r r-sc@sNeZdZdZddZddZeddZdd d Zd d Z d dZ ddZ dS)_ResourceSharerz-Manager for resouces using background thread.cCs@d|_i|_g|_tj|_d|_d|_d|_t j |t j dS)Nr) _key_cache _old_locks threadingLock_lock _listener_address_threadrZregister_after_forkr! _afterfork)rr r r r?s z_ResourceSharer.__init__c CsN|j>|jdkr|j|jd7_||f|j|j<|j|jfSQRXdS)z+Register resource, returning an identifier.Nr)r'r)_startr"r#)rrrr r r rIs  z_ResourceSharer.registercCs<ddlm}|\}}||tjjd}|j|tjf|S)z s       `__pycache__/util.cpython-36.opt-1.pyc000064400000022710147221272370013327 0ustar003 \n.@sddlZddlZddlZddlZddlZddlZddlmZddlm Z ddddd d d d d ddddddgZ dZ dZ dZ dZdZdZdZdadaddZddZddZddZdd Zd6d d Zd!d ZejZejZd"d#Zd$d Z iZ!ejZ"Gd%dde#Z$d7d&d'Z%d(d Z&da'eee%e j(e j)fd)d*Z*ej+e*Gd+dde#Z,Gd,ddej-Z.yej/d-Z0Wne1k rd.Z0YnXd/dZ2d0d1Z3d2d3Z4d4d5Z5dS)8N)_args_from_interpreter_flags)process sub_debugdebuginfo sub_warning get_logger log_to_stderr get_temp_dirregister_after_fork is_exitingFinalizeForkAwareThreadLockForkAwareLocalclose_all_fds_exceptSUBDEBUG SUBWARNING Zmultiprocessingz+[%(levelname)s/%(processName)s] %(message)sFcGstrtjt|f|dS)N)_loggerlogr)msgargsr/usr/lib64/python3.6/util.pyr,scGstrtjt|f|dS)N)rrDEBUG)rrrrrr0scGstrtjt|f|dS)N)rrINFO)rrrrrr4scGstrtjt|f|dS)N)rrr)rrrrrr8sc Cs|ddl}|jz\tsj|jtadt_ttdrFtjt tj t n$tj j t fiftj j t fifWd|jXtS)z0 Returns logger used by multiprocessing rN unregister)loggingZ _acquireLockrZ getLogger LOGGER_NAMEZ propagatehasattratexitr _exit_functionregisterZ _exithandlersremoveappendZ _releaseLock)r!rrrr <s     cCsJddl}t}|jt}|j}|j||j||rB|j|dat S)zB Turn on logging and add a handler which prints to stderr rNT) r!r Z FormatterDEFAULT_LOGGING_FORMATZ StreamHandlerZ setFormatterZ addHandlerZsetLevel_log_to_stderrr)levelr!ZloggerZ formatterZhandlerrrrr Ws    cCsdtjjjd}|dkr`ddl}ddl}|jdd}td|td|j |gdd|tjjd<|S) Ntempdirrzpymp-)prefixzcreated temp directory %sd)r exitpriorityi) rcurrent_processZ_configgetshutiltempfileZmkdtemprrZrmtree)r,r2r3rrrr ms  cCsjttj}|jxP|D]H\\}}}}y ||Wqtk r`}ztd|WYdd}~XqXqWdS)Nz after forker raised exception %s)list_afterfork_registryitemssort Exceptionr)r6indexZidentfuncobjerrr_run_after_forkerss  r=cCs|tttt||f<dS)N)r5next_afterfork_counterid)r;r:rrrr sc@sLeZdZdZfddfddZdeeejfddZ ddZ d d Z d d Z dS) rzA Class which supports object finalization using weakrefs NcCsT|dk rtj|||_n||_||_|p*i|_|ttf|_t j |_ |t |j<dS)N) weakrefref_weakref _callback_args_kwargsr>_finalizer_counter_keyosgetpid_pid_finalizer_registry)selfr;callbackrkwargsr/rrr__init__s  zFinalize.__init__c Csy ||j=Wntk r(|dYnbX|j|krD|dd}n$|d|j|j|j|j|j|j}d|_|_|_|_|_|SdS)zQ Run the callback unless it has already been called or cancelled zfinalizer no longer registeredz+finalizer ignored because different processNz/finalizer calling %s with args %s and kwargs %s)rHKeyErrorrKrDrErFrC)rMwrrLrrJresrrr__call__s  zFinalize.__call__c CsDy t|j=Wntk r Yn Xd|_|_|_|_|_dS)z3 Cancel finalization of the object N)rLrHrQrCrDrErF)rMrrrcancels  zFinalize.cancelcCs |jtkS)zS Return whether this finalizer is still waiting to invoke callback )rHrL)rMrrr still_activeszFinalize.still_activecCsy |j}Wnttfk r(d}YnX|dkr>d|jjSd|jjt|jd|jf}|jrr|dt|j7}|j r|dt|j 7}|j ddk r|dt|j d7}|dS) Nz<%s object, dead>z<%s object, callback=%s__name__z, args=z , kwargs=rz, exitprority=>) rCAttributeError TypeError __class__rWgetattrrDrEstrrFrH)rMr;xrrr__repr__s    zFinalize.__repr__) rW __module__ __qualname____doc__rPrLrrIrJrTrUrVr_rrrrrs c stdkr dSdkrddn fddfddttD}|jddxX|D]P}tj|}|dk rRtd |y |WqRtk rd dl}|jYqRXqRWdkrtjdS) z Run all finalizers whose exit priority is not None and at least minpriority Finalizers with highest priority are called first; finalizers with the same priority will be called in reverse order of creation. NcSs |ddk S)Nrr)prrrsz!_run_finalizers..cs|ddk o|dkS)Nrr)rc) minpriorityrrrdscsg|]}|r|qSrr).0key)frr sz#_run_finalizers..T)reversez calling %sr) rLr4r7r1rr8 traceback print_excclear)rekeysrg finalizerrkr)rhrer_run_finalizerss$       rpcCs tp tdkS)z6 Returns true if the process is shutting down N)_exitingrrrrr scCstsda|d|d|d|dk rzx*|D] }|jr2|d|j|jjq2Wx"|D]}|d|j|jq^W|d|dS)NTzprocess shutting downz2running all "atexit" finalizers with priority >= 0rz!calling terminate() for daemon %szcalling join() for process %sz)running the remaining "atexit" finalizers)rqZdaemonnameZ_popenZ terminatejoin)rrrpactive_childrenr0rcrrrr%s       r%c@s,eZdZddZddZddZddZd S) rcCs|jt|tjdS)N)_resetr r)rMrrrrPKszForkAwareThreadLock.__init__cCs"tj|_|jj|_|jj|_dS)N) threadingZLock_lockacquirerelease)rMrrrruOs  zForkAwareThreadLock._resetcCs |jjS)N)rw __enter__)rMrrrrzTszForkAwareThreadLock.__enter__cGs |jj|S)N)rw__exit__)rMrrrrr{WszForkAwareThreadLock.__exit__N)rWr`rarPrurzr{rrrrrJsc@seZdZddZddZdS)rcCst|dddS)NcSs |jjS)N)__dict__rm)r;rrrrd]sz)ForkAwareLocal.__init__..)r )rMrrrrP\szForkAwareLocal.__init__cCs t|ffS)N)type)rMrrr __reduce__^szForkAwareLocal.__reduce__N)rWr`rarPr~rrrrr[s SC_OPEN_MAXcCsRt|dtg}|jx4tt|dD] }tj||d||dq*WdS)Nr)r4MAXFDr7rangelenrI closerange)ZfdsirrrrjscCstjdkrdSytjjWnttfk r4YnXy@tjtjtj}yt|ddt_Wntj|YnXWnttfk rYnXdS)NF)closefd) sysstdincloseOSError ValueErrorrIopendevnullO_RDONLY)fdrrr _close_stdints   rcCsTytjjWnttfk r&YnXytjjWnttfk rNYnXdS)N)rstdoutflushrYrstderrrrrr_flush_std_streamssrcCstddl}tttt|}tj\}}z2|j|tj|gd|ddddddd d ||dddStj |tj |XdS) NrTrFrrrrrr) _posixsubprocesstuplesortedmapintrIpipeZ fork_execfsencoder)pathrZpassfdsrZ errpipe_readZ errpipe_writerrrspawnv_passfdss   r)N)N)6rI itertoolsrrAr$rv subprocessrr__all__ZNOTSETrrrrr"r)rr*rrrrr r r WeakValueDictionaryr5countr?r=r rLrGobjectrrpr rqrtr0r%r&rZlocalrsysconfrr8rrrrrrrr sf      S ,(    __pycache__/popen_spawn_posix.cpython-36.pyc000064400000004054147221272370015167 0ustar003 \p@spddlZddlZddlmZmZddlmZddlmZddlmZdgZ Gdd d e Z Gd ddej Z dS) N) reductionset_spawning_popen) popen_fork)spawn)utilPopenc@seZdZddZddZdS)_DupFdcCs ||_dS)N)fd)selfr r )/usr/lib64/python3.6/popen_spawn_posix.py__init__sz_DupFd.__init__cCs|jS)N)r )r r r r detachsz _DupFd.detachN)__name__ __module__ __qualname__rrr r r r r sr cs4eZdZdZeZfddZddZddZZ S)rrcsg|_tj|dS)N)_fdssuperr)r process_obj) __class__r r rszPopen.__init__cCs|jj||S)N)rappend)r r r r r duplicate_for_child"s zPopen.duplicate_for_childc Cs@ddlm}|j}|jj|tj|j}tj }t |zt j ||t j ||Wdt dXd}}}} z~t j\}}t j\}} tj||d} |jj||gtjtj| |j|_||_t| ddd} | j|jWdQRXWd|dk rtj|t j|fx(||| fD]} | dk rt j| qWXdS)Nr)semaphore_tracker) tracker_fdZ pipe_handlewbF)closefd)rZgetfdrrrZget_preparation_data_nameioBytesIOrrdumpospipeZget_command_lineextendrZspawnv_passfdsZget_executablepidsentinelopenwrite getbufferZFinalizeclose) r rrrZ prep_datafpZparent_rZchild_wZchild_rZparent_wcmdfr r r r _launch&s6           z Popen._launch) rrrmethodr ZDupFdrrr. __classcell__r r )rr rs  ) rr"contextrrrrrr__all__objectr rr r r r s    __pycache__/popen_fork.cpython-36.pyc000064400000004104147221272370013552 0ustar003 \ @s>ddlZddlZddlZddlmZdgZGdddeZdS)N)utilPopenc@sHeZdZdZddZddZejfddZdd d Z d d Z d dZ dS)rforkcCstjd|_|j|dS)N)rZ_flush_std_streams returncode_launch)self process_objr "/usr/lib64/python3.6/popen_fork.py__init__szPopen.__init__cCs|S)Nr )rfdr r r duplicate_for_childszPopen.duplicate_for_childcCs|jdkrx>ytj|j|\}}Wn tk rB}zdSd}~Xq XPq W||jkrtj|rntj| |_ntj|s|ttj ||_|jS)N) roswaitpidpidOSError WIFSIGNALEDWTERMSIG WIFEXITEDAssertionError WEXITSTATUS)rflagrstser r r polls    z Popen.pollNcCsN|jdkrH|dk r0ddlm}||jg|s0dS|j|dkrBtjndS|jS)Nr)waitg)rZmultiprocessing.connectionrsentinelrrWNOHANG)rtimeoutrr r r r+s  z Popen.waitc Cs\|jdkrXytj|jtjWn8tk r2Yn&tk rV|jdddkrRYnXdS)Ng?)r) rrkillrsignalSIGTERMProcessLookupErrorrr)rr r r terminate5s zPopen.terminatec Csd}tj\}}tj|_|jdkrdz0tj|dtjkrJddl}|j|j }Wdtj |Xn"tj|t j |tj|f||_ dS)Nrrrandom)rpiperrclosesysmodulesr%Zseed _bootstrap_exitrZFinalizer)rr codeZparent_rZchild_wr%r r r r?s       z Popen._launch)N) __name__ __module__ __qualname__methodr rrrrrr$rr r r r r s  )rr(r!r__all__objectrr r r r s  __pycache__/sharedctypes.cpython-36.opt-2.pyc000064400000014650147221272370015055 0ustar003 \e @s:ddlZddlZddlmZddlmZddlmZmZejZ dddd d d gZ ej ej ej ejejejejejejejejejd Zd dZddZddZdddddZddddd Zdd Zd&dd ZddZddZ ddZ!dZ"iZ#ej$Z%Gddde&Z'Gd d!d!e'Z(Gd"d#d#e'Z)Gd$d%d%e)Z*dS)'N)heap) get_context) reductionassert_spawningRawValueRawArrayValueArraycopy synchronized) cubBhHiIlLfdcCs tj|}tj|}t||dS)N)ctypessizeofrZ BufferWrapper rebuild_ctype)type_sizewrapperr4/usr/lib64/python3.6/multiprocessing/sharedctypes.py _new_value&s  r!cGs<tj||}t|}tjtj|dtj||j||S)Nr)typecode_to_typegetr!rmemset addressofr__init__)typecode_or_typeargsrobjrrr r+s   cCsjtj||}t|trD||}t|}tjtj|dtj||S|t |}t|}|j ||SdS)Nr) r"r# isinstanceintr!rr$r%rlenr&)r'size_or_initializerrr)resultrrr r5s    T)lockctxcGsXt|f|}|dkr|S|dkr4|p*t}|j}t|dsJtd|t|||dS)NFTacquirez'%r' has no method 'acquire')r0)TN)rrRLockhasattrAttributeErrorr )r'r/r0r(r)rrr r Es   cCsTt||}|dkr|S|dkr0|p&t}|j}t|dsFtd|t|||dS)NFTr1z'%r' has no method 'acquire')r0)TN)rrr2r3r4r )r'r-r/r0r)rrr r Ss    cCstt|}|tj|d<|S)Nr)r!typerZpointer)r)Znew_objrrr r as c Cs|pt}t|tjr"t|||St|tjrR|jtjkrFt|||St |||St |}y t |}WnVt k rdd|j D}tdd|D}d|j}t |tf|}t |<YnX||||SdS)NcSsg|] }|dqS)rr).0Zfieldrrr usz synchronized..css|]}|t|fVqdS)N) make_property)r6namerrr vszsynchronized.. Synchronized)rr*rZ _SimpleCDatar;r _type_c_charSynchronizedStringSynchronizedArrayr5 class_cacheKeyErrorZ_fields_dict__name__SynchronizedBase)r)r/r0clssclsnamesrZ classnamerrr r fs          cCs@t|t|tjr(t|j|j|jffStt||jdffSdS)N) rr*rr rr<_wrapperZ_length_r5)r)rrr reduce_ctypes rIcCs8|dk r||}tj|t|j}|j|}||_|S)N)_ForkingPicklerregisterrIZcreate_memoryviewZ from_bufferrH)rrZlengthZbufr)rrr rs  rc CsJyt|Stk rDi}tt|fd|||t|<||SXdS)N) prop_cacherAexectemplate)r9rrrr r8s r8z def get%s(self): self.acquire() try: return self._obj.%s finally: self.release() def set%s(self, value): self.acquire() try: self._obj.%s = value finally: self.release() %s = property(get%s, set%s) c@sFeZdZdddZddZddZdd Zd d Zd d ZddZ dS)rDNcCsB||_|r||_n|ptdd}|j|_|jj|_|jj|_dS)NT)Zforce)_obj_lockrr2r1release)selfr)r/r0rrr r&s  zSynchronizedBase.__init__cCs |jjS)N)rQ __enter__)rSrrr rTszSynchronizedBase.__enter__cGs |jj|S)N)rQ__exit__)rSr(rrr rUszSynchronizedBase.__exit__cCst|t|j|jffS)N)rr rPrQ)rSrrr __reduce__szSynchronizedBase.__reduce__cCs|jS)N)rP)rSrrr get_objszSynchronizedBase.get_objcCs|jS)N)rQ)rSrrr get_lockszSynchronizedBase.get_lockcCsdt|j|jfS)Nz<%s wrapper for %s>)r5rCrP)rSrrr __repr__szSynchronizedBase.__repr__)NN) rC __module__ __qualname__r&rTrUrVrWrXrYrrrr rDs rDc@seZdZedZdS)r;valueN)rCrZr[r8r\rrrr r;sr;c@s4eZdZddZddZddZddZd d Zd S) r?cCs t|jS)N)r,rP)rSrrr __len__szSynchronizedArray.__len__c Cs| |j|SQRXdS)N)rP)rSrrrr __getitem__szSynchronizedArray.__getitem__c Cs|||j|<WdQRXdS)N)rP)rSrr\rrr __setitem__szSynchronizedArray.__setitem__c Cs||j||SQRXdS)N)rP)rSstartstoprrr __getslice__szSynchronizedArray.__getslice__c Cs"|||j||<WdQRXdS)N)rP)rSr`ravaluesrrr __setslice__szSynchronizedArray.__setslice__N)rCrZr[r]r^r_rbrdrrrr r?s r?c@seZdZedZedZdS)r>r\rawN)rCrZr[r8r\rerrrr r>sr>)NN)+rweakrefrrcontextrrZForkingPicklerrJ__all__r=Zc_wcharZc_byteZc_ubyteZc_shortZc_ushortZc_intZc_uintZc_longZc_ulongZc_floatZc_doubler"r!rrr r r r rIrr8rOrMWeakKeyDictionaryr@objectrDr;r?r>rrrr  s:      __pycache__/popen_forkserver.cpython-36.pyc000064400000004410147221272370015001 0ustar003 \@sddlZddlZddlmZmZejs.edddlmZddlm Z ddlm Z ddlm Z d gZ Gd d d e ZGd d d e jZdS) N) reductionset_spawning_popenz,No support for sending fds between processes) forkserver) popen_fork)spawn)utilPopenc@seZdZddZddZdS)_DupFdcCs ||_dS)N)ind)selfr r (/usr/lib64/python3.6/popen_forkserver.py__init__sz_DupFd.__init__cCstj|jS)N)rZget_inherited_fdsr )r r r rdetachsz _DupFd.detachN)__name__ __module__ __qualname__rrr r r rr sr csBeZdZdZeZfddZddZddZe j fdd Z Z S) r rcsg|_tj|dS)N)_fdssuperr)r process_obj) __class__r rr!szPopen.__init__cCs|jj|t|jdS)Nr)rappendlen)r fdr r rduplicate_for_child%s zPopen.duplicate_for_childcCstj|j}tj}t|ztj||tj||WdtdXtj |j \|_ }t j |tj|j ft|ddd}|j|jWdQRXtj|j |_dS)NwbT)closefd)rZget_preparation_data_nameioBytesIOrrdumprZconnect_to_new_processrsentinelrZFinalizeoscloseopenwrite getbuffer read_unsignedpid)r rZ prep_dataZbufwfr r r_launch)s   z Popen._launchc Csr|jdkrlddlm}|tjkr$dnd}||jg|s:dSytj|j|_Wntt fk rjd|_YnX|jS)Nr)wait) returncodeZmultiprocessing.connectionr-r#WNOHANGr"rr(OSErrorEOFError)r flagr-Ztimeoutr r rpoll9s   z Popen.poll) rrrmethodr ZDupFdrrr,r#r0r4 __classcell__r r )rrr s  )rr#contextrrZHAVE_SEND_HANDLE ImportErrorrrrr__all__objectr r r r r rs     __pycache__/popen_fork.cpython-36.opt-1.pyc000064400000004031147221272370014510 0ustar003 \ @s>ddlZddlZddlZddlmZdgZGdddeZdS)N)utilPopenc@sHeZdZdZddZddZejfddZdd d Z d d Z d dZ dS)rforkcCstjd|_|j|dS)N)rZ_flush_std_streams returncode_launch)self process_objr "/usr/lib64/python3.6/popen_fork.py__init__szPopen.__init__cCs|S)Nr )rfdr r r duplicate_for_childszPopen.duplicate_for_childcCs|jdkrzx>ytj|j|\}}Wn tk rB}zdSd}~Xq XPq W||jkrztj|rntj| |_n tj||_|jS)N)roswaitpidpidOSError WIFSIGNALEDWTERMSIG WEXITSTATUS)rflagrstser r r polls    z Popen.pollNcCsN|jdkrH|dk r0ddlm}||jg|s0dS|j|dkrBtjndS|jS)Nr)waitg)rZmultiprocessing.connectionrsentinelrrWNOHANG)rtimeoutrr r r r+s  z Popen.waitc Cs\|jdkrXytj|jtjWn8tk r2Yn&tk rV|jdddkrRYnXdS)Ng?)r) rrkillrsignalSIGTERMProcessLookupErrorrr)rr r r terminate5s zPopen.terminatec Csd}tj\}}tj|_|jdkrdz0tj|dtjkrJddl}|j|j }Wdtj |Xn"tj|t j |tj|f||_ dS)Nrrrandom)rpiperrclosesysmodulesr#Zseed _bootstrap_exitrZFinalizer)rr codeZparent_rZchild_wr#r r r r?s       z Popen._launch)N) __name__ __module__ __qualname__methodr rrrrrr"rr r r r r s  )rr&rr__all__objectrr r r r s  __pycache__/connection.cpython-36.opt-2.pyc000064400000053450147221272370014517 0ustar003 /fVy @s ddddgZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z m Z dd lmZejZy$ddlZdd lmZmZmZmZWn$ek rejd kr‚dZYnXd Zd ZdZejZdZdgZe edrdZedg7Zejd krdZedg7ZefddZ!ddZ"ddZ#ddZ$ddZ%GdddZ&ernGddde&Z'Gd d!d!e&Z(Gd"dde)Z*dPd#dZ+ejd krdQd%dZ,n dRd&dZ,Gd'd(d(e)Z-d)d*Z.ejd krGd+d,d,e)Z/d-d.Z0d/Z1d0Z2d1Z3d2Z4d3d4Z5d5d6Z6Gd7d8d8e)Z7d9d:Z8d;d<Z9Gd=d>d>e*Z:d?d@Z;ejd krzdAdBZhZ?dSdCdZ@n,ddlAZAe eAdDreAjBZCneAjDZCdTdEdZ@ejd krdFdGZEdHdIZFejGe(eEdJdKZHdLdMZIejGe'eHndNdGZEdOdIZFejGe(eEdS)UClientListenerPipewaitN)util)AuthenticationErrorBufferTooShort) reduction) WAIT_OBJECT_0WAIT_ABANDONED_0 WAIT_TIMEOUTINFINITEwin32i g4@Zsha256AF_INETAF_UNIXAF_PIPEcCs tj|S)N)time monotonic)timeoutr2/usr/lib64/python3.6/multiprocessing/connection.py _init_timeout?srcCs tj|kS)N)rr)trrr_check_timeoutBsrcCsX|dkr d S|dkr&tjdtjdS|dkrLtjdtjttfd dStd dS) Nr localhostrrz listener-)prefixdirrz\\.\pipe\pyc-%d-%d-zunrecognized family)rr) tempfileZmktemprZ get_temp_dirosgetpidnext _mmap_counter ValueError)familyrrrarbitrary_addressIsr&cCsJtjdkr|dkrtd|tjdkrF|dkrFtt|sFtd|dS)NrrzFamily %s is not recognized.r)sysplatformr$hasattrsocket)r%rrr_validate_familyWs   r+cCsJt|tkrdSt|tkr*|jdr*dSt|tkr:dStd|dS)Nrz\\rrzaddress type of %r unrecognized)typetuplestr startswithr$)addressrrr address_typecs  r1c@seZdZdZd+ddZddZddZd d Zd d Zd dZ e ddZ e ddZ e ddZ ddZddZd,ddZddZd-ddZd.d d!Zd"d#Zd/d%d&Zd'd(Zd)d*ZdS)0_ConnectionBaseNTcCsB|j}|dkrtd| r,| r,td||_||_||_dS)Nrzinvalid handlez6at least one of `readable` and `writable` must be True) __index__r$_handle _readable _writable)selfhandlereadablewritablerrr__init__ys z_ConnectionBase.__init__cCs|jdk r|jdS)N)r4_close)r7rrr__del__s z_ConnectionBase.__del__cCs|jdkrtddS)Nzhandle is closed)r4OSError)r7rrr _check_closeds z_ConnectionBase._check_closedcCs|jstddS)Nzconnection is write-only)r5r>)r7rrr_check_readablesz_ConnectionBase._check_readablecCs|jstddS)Nzconnection is read-only)r6r>)r7rrr_check_writablesz_ConnectionBase._check_writablecCs"|jrd|_n|jtddS)NFzbad message length)r6r5closer>)r7rrr_bad_message_lengthsz#_ConnectionBase._bad_message_lengthcCs |jdkS)N)r4)r7rrrclosedsz_ConnectionBase.closedcCs|jS)N)r5)r7rrrr9sz_ConnectionBase.readablecCs|jS)N)r6)r7rrrr:sz_ConnectionBase.writablecCs|j|jS)N)r?r4)r7rrrfilenosz_ConnectionBase.filenoc Cs$|jdk r z |jWdd|_XdS)N)r4r<)r7rrrrBs  z_ConnectionBase.closercCs|j|jt|}|jdkr.tt|}t|}|dkrFtd||krVtd|dkrh||}n&|dkrztdn|||krtd|j||||dS)Nrrzoffset is negativezbuffer length < offsetzsize is negativezbuffer length < offset + size)r?rA memoryviewitemsizebyteslenr$ _send_bytes)r7bufoffsetsizemnrrr send_bytess"     z_ConnectionBase.send_bytescCs$|j|j|jtj|dS)N)r?rArJ_ForkingPicklerdumps)r7objrrrsendsz_ConnectionBase.sendcCsJ|j|j|dk r(|dkr(td|j|}|dkrB|j|jS)Nrznegative maxlength)r?r@r$ _recv_bytesrCgetvalue)r7Z maxlengthrKrrr recv_bytess z_ConnectionBase.recv_bytesc Cs|j|jt|}|j}|t|}|dkr>tdn||krNtd|j}|j}|||krvt|j |j d|j |||||||SQRXdS)Nrznegative offsetzoffset too large) r?r@rFrGrIr$rUtellr rVseekreadinto)r7rKrLrNrGZbytesizeresultrMrrrrecv_bytes_intos"       z_ConnectionBase.recv_bytes_intocCs&|j|j|j}tj|jS)N)r?r@rUrQloads getbuffer)r7rKrrrrecvsz_ConnectionBase.recvcCs|j|j|j|S)N)r?r@_poll)r7rrrrpollsz_ConnectionBase.pollcCs|S)Nr)r7rrr __enter__sz_ConnectionBase.__enter__cCs |jdS)N)rB)r7exc_type exc_valueexc_tbrrr__exit__ sz_ConnectionBase.__exit__)TT)rN)N)r)r`)__name__ __module__ __qualname__r4r;r=r?r@rArCpropertyrDr9r:rErBrPrTrWr\r_rbrcrgrrrrr2vs(       r2c@s@eZdZdZejfddZddZd ddZd d Z d d Z dS)PipeConnectionFcCs||jdS)N)r4)r7Z _CloseHandlerrrr<szPipeConnection._closecCshtj|j|dd\}}zwinerrorERROR_BROKEN_PIPEEOFError RuntimeError) r7maxsizeZbsizertrurvZnreadferrrrU*s6      zPipeConnection._recv_bytescCs.|jstj|jddkrdStt|g|S)NrT)rxrn PeekNamedPiper4boolr)r7rrrrraJszPipeConnection._pollcCs|j}tj}|j|tj|jd}|dk rJt|||krJ|jtj |j|dd\}}|j d\}}|j|j|S)NrT)rm) r^ryrzr}rnrr4rIrCr|rs)r7rtrrKrleftruZrbytesrrrr~Ps zPipeConnection._get_more_data)N) rhrirjrxrn CloseHandler<rJrUrar~rrrrrls  rlc@sxeZdZer(ejfddZejZej Z ne j fddZe j Ze jZ efddZe fddZdd Zdd d Zd dZd S) ConnectioncCs||jdS)N)r4)r7r<rrrr<gszConnection._closecCs||jdS)N)r4)r7r<rrrr<lscCs<t|}x.||j|}||8}|dkr(P||d}q WdS)Nr)rIr4)r7rKr} remainingrOrrr_sendqs zConnection._sendcCsftj}|j}|}xN|dkr`|||}t|}|dkrL||krDtntd|j|||8}qW|S)Nrzgot end of file during message)ryrzr4rIrr>r})r7rMreadrKr8rchunkrOrrr_recvzs    zConnection._recvcCsDt|}tjd|}|dkr2|j||j|n|j||dS)Nz!ii@)rIstructZpackr)r7rKrOheaderrrrrJs    zConnection._send_bytesNcCs:|jd}tjd|j\}|dk r0||kr0dS|j|S)Nz!i)rrZunpackrV)r7rrKrMrrrrUs  zConnection._recv_bytescCst|g|}t|S)N)rr)r7rrrrrras zConnection._poll)N)rhrirjrn_multiprocessingZ closesocketr<rTZ_writer_Z_readr rBr}rrrrJrUrarrrrr`s  rc@sNeZdZdddZddZddZed d Zed d Zd d Z ddZ dS)rNrcCsr|p|rt|pt}|pt|}t||dkr>t|||_nt||||_|dk rht|t rht d||_ dS)Nrzauthkey should be a byte string) r1default_familyr&r+ PipeListener _listenerSocketListener isinstancerH TypeError_authkey)r7r0r%backlogauthkeyrrrr;s zListener.__init__cCs>|jdkrtd|jj}|jr:t||jt||j|S)Nzlistener is closed)rr>acceptrdeliver_challengeanswer_challenge)r7crrrrs    zListener.acceptcCs |j}|dk rd|_|jdS)N)rrB)r7ZlistenerrrrrBszListener.closecCs|jjS)N)r_address)r7rrrszListener.cCs|jjS)N)r_last_accepted)r7rrrrscCs|S)Nr)r7rrrrcszListener.__enter__cCs |jdS)N)rB)r7rdrerfrrrrgszListener.__exit__)NNrN) rhrirjr;rrBrkr0Z last_acceptedrcrgrrrrrs   cCsj|p t|}t||dkr&t|}nt|}|dk rJt|t rJtd|dk rft||t|||S)Nrzauthkey should be a byte string) r1r+ PipeClient SocketClientrrHrrr)r0r%rrrrrrs    TcCsj|r>tj\}}|jd|jdt|j}t|j}n$tj\}}t|dd}t|dd}||fS)NTF)r:)r9)r*Z socketpair setblockingrdetachr pipe)duplexs1s2c1c2Zfd1Zfd2rrrrs       c Cstd}|r*tj}tjtjB}tt}}ntj}tj}dt}}tj||tjBtj Btj tj Btj Bd||tj tj}tj||dtjtjtjtj}tj|tj ddtj|dd}|jd\} } t||d} t||d} | | fS)NrrrT)rm)r:)r9)r&rnPIPE_ACCESS_DUPLEX GENERIC_READ GENERIC_WRITEBUFSIZEZPIPE_ACCESS_INBOUNDCreateNamedPipeFILE_FLAG_OVERLAPPEDFILE_FLAG_FIRST_PIPE_INSTANCEPIPE_TYPE_MESSAGEPIPE_READMODE_MESSAGE PIPE_WAITNMPWAIT_WAIT_FOREVERNULL CreateFile OPEN_EXISTINGSetNamedPipeHandleStateConnectNamedPipersrl) rr0ZopenmodeaccessZobsizeZibsizeZh1Zh2rm_rurrrrrr s2         c@s&eZdZd ddZddZddZdS) rrcCstjtt||_yRtjdkr2|jjtjtjd|jjd|jj ||jj ||jj |_ Wn t k r|jjYnX||_d|_|dkrtj|tj|fdd|_nd|_dS)NposixrTrr)args exitpriority)r*getattr_socketr nameZ setsockoptZ SOL_SOCKETZ SO_REUSEADDRrZbindZlistenZ getsocknamerr>rBZ_familyrrFinalizeunlink_unlink)r7r0r%rrrrr;<s$       zSocketListener.__init__cCs&|jj\}|_|jdt|jS)NT)rrrrrr)r7srrrrTs zSocketListener.acceptc Cs0z|jjWd|j}|dk r*d|_|XdS)N)rrBr)r7rrrrrBYs zSocketListener.closeN)r)rhrirjr;rrBrrrrr8s rc CsDt|}tjtt|"}|jd|j|t|jSQRXdS)NT)r1r*rrZconnectrr)r0r%rrrrrcs   rc@s4eZdZd ddZd ddZddZed d ZdS) rNcCsL||_|jddg|_d|_tjd|jtj|tj|j|jfdd|_ dS)NT)firstz listener created with address=%rr)rr) r _new_handle _handle_queuerr sub_debugrr_finalize_pipe_listenerrB)r7r0rrrrr;wszPipeListener.__init__Fc CsHtjtjB}|r|tjO}tj|j|tjtjBtjBtj t t tj tj S)N) rnrrrrrrrrZPIPE_UNLIMITED_INSTANCESrrr)r7rflagsrrrrs   zPipeListener._new_handlecCs|jj|j|jjd}ytj|dd}Wn0tk r^}z|jtjkrNWYdd}~XnPXzrZ ERROR_NO_DATArprqrrrrrsrl)r7r8rtrresrrurrrrs"    zPipeListener.acceptcCs(tjd|x|D]}tj|qWdS)Nz closing listener with address=%r)rrrnr)Zqueuer0r8rrrrs  z$PipeListener._finalize_pipe_listener)N)F)rhrirjr;rr staticmethodrrrrrrss rcCst}x~y6tj|dtj|tjtjBdtjtjtjtj}Wn>t k r|}z"|j tj tj fksjt |rlWYdd}~XqXPqWtj|tjddt|S)Nir)rrnZ WaitNamedPiperrrrrrr>rZERROR_SEM_TIMEOUTZERROR_PIPE_BUSYrrrrl)r0rhrrrrrs"   rs #CHALLENGE#s #WELCOME#s #FAILURE#cCsfddl}tjt}|jt||j||tj}|j d}||krP|jt n|jt t ddS)Nrzdigest received was wrong) hmacr urandomMESSAGE_LENGTHrP CHALLENGEnewHMAC_DIGEST_NAMEdigestrWWELCOMEFAILUREr) connectionrrmessagerresponserrrrs    rcCs\ddl}|jd}|ttd}|j||tj}|j||jd}|tkrXt ddS)Nrrzdigest sent was rejected) rrWrIrrrrrPrr)rrrrrrrrrrs   rc@s$eZdZddZddZddZdS)ConnectionWrappercCs:||_||_||_x"dD]}t||}t|||qWdS)NrErBrbrWrP)rErBrbrWrP)_conn_dumps_loadsrsetattr)r7connrRr]attrrSrrrr;s   zConnectionWrapper.__init__cCs|j|}|jj|dS)N)rrrP)r7rSrrrrrTs zConnectionWrapper.sendcCs|jj}|j|S)N)rrWr)r7rrrrr_s zConnectionWrapper.recvN)rhrirjr;rTr_rrrrrsrcCstj|fddddjdS)Nrzutf-8) xmlrpclibrRencode)rSrrr _xml_dumpssrcCstj|jd\\}}|S)Nzutf-8)rr]decode)rrSmethodrrr _xml_loadssrc@seZdZddZdS) XmlListenercCs ddljatj|}t|ttS)Nr) xmlrpc.clientclientrrrrrr)r7rSrrrrs  zXmlListener.acceptN)rhrirjrrrrrrsrcOsddljatt||ttS)Nr)rrrrrrr)rkwdsrrr XmlClient s rcCst|}g}x|rtj|d|}|tkr,Pn\t|koFtt|knrV|t8}n2t|koptt|knr|t8}ntd|j||||dd}d}qW|S)NFzShould not get hererr) listrnrpr r rIr rr)ZhandlesrLreadyrrrr_exhaustive_waits    rc .sn|dkrt}n|dkrd}nt|dd}t|}ig}tt}zHx2|D](}yt|d}Wn tk r||j<YqTXytj|dd\}}Wn8t k r}zd|j }}|t krʂWYdd}~XnX|tj kr|j |||j<qT|rptjdddkrpy|jd\} }Wn*t k rT}z |j }WYdd}~XnX| rpt|d rpd|_j|d}qTWtj|}Wdx|D]}|jqWx|D]}y|jd\} }Wn6t k r}z|j }|t krWYdd}~XnX|tjkr|j}j||dkrt|d rd|_qWXjfd d |Dfd d |DS)Nrig?rETFrxc3s|]}|VqdS)Nr).0r)waithandle_to_objrr vszwait..csg|]}|kr|qSrr)ro) ready_objectsrr wszwait..)rr)rintrsetrAttributeErrorr3rnr|r>r _ready_errorsrorrqr'Zgetwindowsversionrsr)rxaddrkeysrrZERROR_OPERATION_ABORTEDupdate) object_listrZov_listZ ready_handlesrrErtrurrr)rrrr+sh              PollSelectorc Cstx}x|D]}|j|tjqW|dk r8tj|}x@|j|}|rVdd|DS|dk r:|tj}|dkr:|Sq:WWdQRXdS)NcSsg|]\}}|jqSr)Zfileobj)rkeyZeventsrrrrszwait..r) _WaitSelectorregister selectorsZ EVENT_READrrZselect)r rZselectorrSZdeadlinerrrrrs    c CsN|j}tj|tjtj*}ddlm}|j|}t||j |j ffSQRXdS)Nr)resource_sharer) rEr*ZfromfdrZ SOCK_STREAMrrZ DupSocketrebuild_connectionr9r:)rr8rrdsrrrreduce_connections   rcCs|j}t|j||S)N)rr)rr9r:ZsockrrrrsrcCsB|jr tjnd|jrtjndB}tj|j|}t||j|jffS)Nr) r9rnZFILE_GENERIC_READr:ZFILE_GENERIC_WRITEr Z DupHandlerErebuild_pipe_connection)rrdhrrrreduce_pipe_connectionsrcCs|j}t|||S)N)rrl)rr9r:r8rrrrsrcCs tj|j}t||j|jffS)N)r ZDupFdrErr9r:)rdfrrrrscCs|j}t|||S)N)rr)rr9r:fdrrrrs)NN)T)T)N)N)J__all__ryr r'r*rrr itertoolsrrrrr contextr ZForkingPicklerrQrnr r r r ImportErrorr(rZCONNECTION_TIMEOUTrcountr#rZfamiliesr)rrr&r+r1r2rlrobjectrrrrrrrrrrrrrrrrrrrrZERROR_NETNAME_DELETEDrrrr r ZSelectSelectorrrr rrrrrr s           PJ8    ,+ 8    P    __pycache__/popen_spawn_posix.cpython-36.opt-1.pyc000064400000004054147221272370016126 0ustar003 \p@spddlZddlZddlmZmZddlmZddlmZddlmZdgZ Gdd d e Z Gd ddej Z dS) N) reductionset_spawning_popen) popen_fork)spawn)utilPopenc@seZdZddZddZdS)_DupFdcCs ||_dS)N)fd)selfr r )/usr/lib64/python3.6/popen_spawn_posix.py__init__sz_DupFd.__init__cCs|jS)N)r )r r r r detachsz _DupFd.detachN)__name__ __module__ __qualname__rrr r r r r sr cs4eZdZdZeZfddZddZddZZ S)rrcsg|_tj|dS)N)_fdssuperr)r process_obj) __class__r r rszPopen.__init__cCs|jj||S)N)rappend)r r r r r duplicate_for_child"s zPopen.duplicate_for_childc Cs@ddlm}|j}|jj|tj|j}tj }t |zt j ||t j ||Wdt dXd}}}} z~t j\}}t j\}} tj||d} |jj||gtjtj| |j|_||_t| ddd} | j|jWdQRXWd|dk rtj|t j|fx(||| fD]} | dk rt j| qWXdS)Nr)semaphore_tracker) tracker_fdZ pipe_handlewbF)closefd)rZgetfdrrrZget_preparation_data_nameioBytesIOrrdumpospipeZget_command_lineextendrZspawnv_passfdsZget_executablepidsentinelopenwrite getbufferZFinalizeclose) r rrrZ prep_datafpZparent_rZchild_wZchild_rZparent_wcmdfr r r r _launch&s6           z Popen._launch) rrrmethodr ZDupFdrrr. __classcell__r r )rr rs  ) rr"contextrrrrrr__all__objectr rr r r r s    __pycache__/forkserver.cpython-36.pyc000064400000015246147221272370013611 0ustar003 \!@sddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddlm Z ddl m Z ddlm Z ddlmZddlmZd d d d gZd ZejdZGdddeZdddZddZddZddZeZejZejZejZejZdS)N) connection)process) reduction)semaphore_tracker)spawn)utilensure_runningget_inherited_fdsconnect_to_new_processset_forkserver_preloadQc@s4eZdZddZddZddZddZd d Zd S) ForkServercCs.d|_d|_d|_d|_tj|_dg|_dS)N__main__)_forkserver_address_forkserver_alive_fd_forkserver_pid_inherited_fds threadingZLock_lock_preload_modules)selfr"/usr/lib64/python3.6/forkserver.py__init__!s  zForkServer.__init__cCs&tdd|jDstd||_dS)z>Set list of module names to try to load in forkserver process.css|]}t|tkVqdS)N)typestr).0modrrr +sz4ForkServer.set_forkserver_preload..z&module_names must be a list of stringsN)allr TypeError)rZ modules_namesrrrr )sz!ForkServer.set_forkserver_preloadcCs|jS)zReturn list of fds inherited from parent process. This returns None if the current process was not started by fork server. )r)rrrrr /szForkServer.get_inherited_fdscCs|jt|dtkr tdtjtj}|j|jtj \}}tj \}}|||j t j g}||7}z.r(iz-czCfrom multiprocessing.forkserver import main; main(%d, %d, %r, **%r))rrr rr)waitpidWNOHANGr+rrrrZget_preparation_datadictitemsr'r(rZarbitrary_addressZbindchmodZlistenr*filenoZget_executablerZ_args_from_interpreter_flagsZspawnv_passfds) rpidZstatuscmddatalistenerZaddressalive_rZalive_wZ fds_to_passZexeargsr)r4rr TsL             zForkServer.ensure_runningN)__name__ __module__ __qualname__rr r r r rrrrrs rc4Cs|rhd|kr8|dk r8dtj_ztj|Wdtj`Xx.|D]&}y t|Wq>tk rbYq>Xq>Wtjt j t j t j t j i}dd|j D}tjtj|dR}tj<} |jt_| j|tj| j|tjx yxdd| jD} | rPqW|| kr$tj|d d ks tt|| ks2t|jd l} d } tjd krzFyt| |||Wn.tk rt j!t j"t j#j$YnXWdtj%| XWdQRXWqt&k r} z| j't'j(krւWYdd} ~ XqXqWWdQRXWdQRXdS) zRun forkserver.rNTcSsi|]\}}tj|||qSr)signal)rsigvalrrr szmain..)r:cSsg|]\}}|jqSr)Zfileobj)rkeyZeventsrrr szmain..rr))rZcurrent_processZ _inheritingrZimport_main_path __import__ ImportErrorrZ _close_stdinrDSIGCHLDSIG_IGNSIGINTr8r'r( selectorsZDefaultSelectorZ getsockname _forkserverrregisterZ EVENT_READZselectr)readAssertionError SystemExitZacceptfork _serve_one Exceptionsys excepthookexc_infostderrflush_exitOSErrorerrnoZ ECONNABORTED)Z listener_fdr?Zpreloadr/r0modnamehandlersZ old_handlersr>ZselectorZrfdsscodeerrrmainsV          rfc Cs|jtj|x |jD]\}}tj||qWtj|td}|jt|tks\t|^}}t _ } t _ | t j _t|tjdtjkrddl} | jtj|} t|| dS)Nrrandomr)r+r)r8rDrZrecvfdsr%r$rTrQrrrZ_semaphore_trackerZ_fdwrite_unsignedgetpidrYmodulesrgZseedr_main) rcr>r?rbrErFr,r.r-ZstfdrgrdrrrrWs   rWcCsRd}tj}x8t||krBtj||t|}|s8td||7}q Wtj|dS)NrJzunexpected EOFr)UNSIGNED_STRUCTsizer$r)rSEOFErrorunpack)fdr=Zlengthrcrrr read_unsigneds rqcCs@tj|}x0|r:tj||}|dkr,td||d}q WdS)Nrzshould not get here)rlpackr)write RuntimeError)rpnmsgnbytesrrrrhs   rh)NN)r`r)rPrDr'structrYrrrcontextrrrr__all__r%StructrlobjectrrfrWrqrhrQr r r r rrrrs6       s =!  __pycache__/popen_forkserver.cpython-36.opt-1.pyc000064400000004410147221272370015740 0ustar003 \@sddlZddlZddlmZmZejs.edddlmZddlm Z ddlm Z ddlm Z d gZ Gd d d e ZGd d d e jZdS) N) reductionset_spawning_popenz,No support for sending fds between processes) forkserver) popen_fork)spawn)utilPopenc@seZdZddZddZdS)_DupFdcCs ||_dS)N)ind)selfr r (/usr/lib64/python3.6/popen_forkserver.py__init__sz_DupFd.__init__cCstj|jS)N)rZget_inherited_fdsr )r r r rdetachsz _DupFd.detachN)__name__ __module__ __qualname__rrr r r rr sr csBeZdZdZeZfddZddZddZe j fdd Z Z S) r rcsg|_tj|dS)N)_fdssuperr)r process_obj) __class__r rr!szPopen.__init__cCs|jj|t|jdS)Nr)rappendlen)r fdr r rduplicate_for_child%s zPopen.duplicate_for_childcCstj|j}tj}t|ztj||tj||WdtdXtj |j \|_ }t j |tj|j ft|ddd}|j|jWdQRXtj|j |_dS)NwbT)closefd)rZget_preparation_data_nameioBytesIOrrdumprZconnect_to_new_processrsentinelrZFinalizeoscloseopenwrite getbuffer read_unsignedpid)r rZ prep_dataZbufwfr r r_launch)s   z Popen._launchc Csr|jdkrlddlm}|tjkr$dnd}||jg|s:dSytj|j|_Wntt fk rjd|_YnX|jS)Nr)wait) returncodeZmultiprocessing.connectionr-r#WNOHANGr"rr(OSErrorEOFError)r flagr-Ztimeoutr r rpoll9s   z Popen.poll) rrrmethodr ZDupFdrrr,r#r0r4 __classcell__r r )rrr s  )rr#contextrrZHAVE_SEND_HANDLE ImportErrorrrrr__all__objectr r r r r rs     __pycache__/popen_spawn_win32.cpython-36.opt-1.pyc000064400000005223147221272370015725 0ustar003 \ @sddlZddlZddlZddlZddlZddlmZmZmZddl m Z ddl m Z dgZ dZ ejdkoreed d Zejjjd ZGd ddeZdS) N) reductionget_spawning_popenset_spawning_popen)spawn)utilPopeniZwin32frozenFzpythonservice.exec@s>eZdZdZdZddZddZddd Zd d Zd d Z dS)rz@ Start a subprocess to run the code of a process object rc Cstj|j}tjdd\}}tj|d}tjtj |d}dj dd|D}t |ddd}y4tj tj |ddd dddd \}} } } tj| Wntj|YnX| |_d|_||_t||_tj|tj|jft|ztj||tj||WdtdXWdQRXdS) Nr)Z parent_pidZ pipe_handle css|]}d|VqdS)z"%s"N).0xr r )/usr/lib64/python3.6/popen_spawn_win32.py )sz!Popen.__init__..wbT)closefdF)rZget_preparation_data_name_winapiZ CreatePipemsvcrtZopen_osfhandleZget_command_lineosgetpidjoinopenZ CreateProcessZget_executableZ CloseHandlepid returncode_handleintsentinelrZFinalizerrdump) selfZ process_objZ prep_dataZrhandleZwhandleZwfdcmdZto_childZhpZhtrtidr r r__init__ s2      zPopen.__init__cCstj||jS)N)rZ duplicater)rZhandler r rduplicate_for_childEszPopen.duplicate_for_childNcCst|jdkrn|dkrtj}ntdt|dd}tjt|j|}|tjkrntj|j}|t krht j }||_|jS)Nrig?) rrZINFINITEmaxrZWaitForSingleObjectrZ WAIT_OBJECT_0ZGetExitCodeProcess TERMINATEsignalSIGTERM)rtimeoutZmsecsrescoder r rwaitIs   z Popen.waitcCs |jddS)Nr)r()r+)rr r rpollYsz Popen.pollc CsL|jdkrHytjt|jtWn&tk rF|jdddkrBYnXdS)Ng?)r()rrZTerminateProcessrrr%OSErrorr+)rr r r terminate\s  zPopen.terminate)N) __name__ __module__ __qualname____doc__methodr"r#r+r,r.r r r rrs% )rrr&sysrcontextrrrrr__all__r%platformgetattrZWINEXE executablelowerendswithZ WINSERVICEobjectrr r r rs  __pycache__/synchronize.cpython-36.opt-2.pyc000064400000026043147221272370014731 0ustar003 \/ @s,ddddddgZddlZddlZddlZddlZddlZdd lmZdd lmZdd lm Z ydd lm Z m Z Wne k re dYnXe ed\ZZej jZGdddeZ Gddde ZGdddeZGddde ZGddde ZGdddeZGdddeZGdddejZdS)LockRLock SemaphoreBoundedSemaphore ConditionEventN)context)process)util)SemLock sem_unlinkz*This platform lacks a functioning sem_openz( implementation, therefore, the requiredz+ synchronization primitives needed will notz function, see issue 3770.c@s\eZdZejZddZeddZddZ ddZ d d Z d d Z d dZ eddZdS)r c Cs|dkrtjj}|j}tjdkp*|dk}xPtdD]<}y tj||||j |}|_ Wnt k rnYq6XPq6Wt dt j d|j|jtjdkrdd} t j|| |j jdk rdd lm} | |j jt j|tj|j jfd d dS) Nwin32forkdzcannot find name for semaphorezcreated semlock with handle %scSs|jjdS)N)_semlock _after_fork)objr3/usr/lib64/python3.6/multiprocessing/synchronize.pyrGsz%SemLock.__init__.._after_forkr)registerr)Z exitpriority)r Z_default_contextZ get_contextZget_start_methodsysplatformrange_multiprocessingr _make_namerFileExistsErrorr debughandle _make_methodsZregister_after_forknamesemaphore_trackerrZFinalize_cleanup) selfkindvaluemaxvaluectxr!Z unlink_nowislrrrrr__init__2s.       zSemLock.__init__cCs ddlm}t|||dS)Nr) unregister)r"r,r )r!r,rrrr#Ts zSemLock._cleanupcCs|jj|_|jj|_dS)N)racquirerelease)r$rrrr Zs zSemLock._make_methodscCs |jjS)N)r __enter__)r$rrrr/^szSemLock.__enter__cGs |jj|S)N)r__exit__)r$argsrrrr0aszSemLock.__exit__cCsDtj||j}tjdkr,tjj|j}n|j}||j|j |j fS)Nr) r assert_spawningrrrZget_spawning_popenZduplicate_for_childrr%r'r!)r$r*hrrr __getstate__ds   zSemLock.__getstate__cCs,tjj||_tjd|d|jdS)Nz recreated blocker with handle %rr)rr Z_rebuildrr rr )r$staterrr __setstate__mszSemLock.__setstate__cCsdtjjdttjfS)Nz%s-%sZ semprefix)r current_processZ_confignextr _randrrrrrrszSemLock._make_nameN)__name__ __module__ __qualname__tempfileZ_RandomNameSequencer9r+ staticmethodr#r r/r0r4r6rrrrrr .s"  r c@s&eZdZd ddZddZddZdS) rrcCstj|t|t|ddS)N)r()r r+ SEMAPHORE SEM_VALUE_MAX)r$r&r(rrrr+}szSemaphore.__init__cCs |jjS)N)r _get_value)r$rrr get_valueszSemaphore.get_valuec Cs8y|jj}Wntk r&d}YnXd|jj|fS)Nunknownz<%s(value=%s)>)rrA Exception __class__r:)r$r&rrr__repr__s  zSemaphore.__repr__N)r)r:r;r<r+rBrFrrrrr{s c@seZdZdddZddZdS)rrcCstj|t|||ddS)N)r()r r+r?)r$r&r(rrrr+szBoundedSemaphore.__init__c Cs>y|jj}Wntk r&d}YnXd|jj||jjfS)NrCz<%s(value=%s, maxvalue=%s)>)rrArDrEr:r')r$r&rrrrFs  zBoundedSemaphore.__repr__N)r)r:r;r<r+rFrrrrrs c@seZdZddZddZdS)rcCstj|tdd|ddS)Nr)r()r r+r?)r$r(rrrr+sz Lock.__init__c Csyf|jjr8tjj}tjjdkrd|dtjj7}n,|jjdkrLd}n|jjdkr`d}nd}Wnt k r~d}YnXd |j j |fS) N MainThread|rNonerSomeOtherThreadSomeOtherProcessrCz<%s(owner=%s)>) r_is_miner r7r! threadingcurrent_threadrA_countrDrEr:)r$r!rrrrFs   z Lock.__repr__N)r:r;r<r+rFrrrrrsc@seZdZddZddZdS)rcCstj|tdd|ddS)Nr)r()r r+RECURSIVE_MUTEX)r$r(rrrr+szRLock.__init__c Csy||jjrBtjj}tjjdkr6|dtjj7}|jj}n8|jjdkrZd \}}n |jjdkrrd \}}nd \}}Wnt k rd\}}YnXd |j j ||fS)NrGrHrrIrrJnonzerorKrCz <%s(%s, %s)>)rIr)rJrQ)rKrQ)rCrC) rrLr r7r!rMrNrOrArDrEr:)r$r!countrrrrFs      zRLock.__repr__N)r:r;r<r+rFrrrrrsc@sjeZdZdddZddZddZdd Zd d Zd d ZddZ dddZ ddZ ddZ dddZ dS)rNcCs>|p |j|_|jd|_|jd|_|jd|_|jdS)Nr)r_lockr_sleeping_count _woken_count_wait_semaphorer )r$lockr(rrrr+s    zCondition.__init__cCstj||j|j|j|jfS)N)r r2rSrTrUrV)r$rrrr4s zCondition.__getstate__cCs |\|_|_|_|_|jdS)N)rSrTrUrVr )r$r5rrrr6szCondition.__setstate__cCs |jjS)N)rSr/)r$rrrr/szCondition.__enter__cGs |jj|S)N)rSr0)r$r1rrrr0szCondition.__exit__cCs|jj|_|jj|_dS)N)rSr-r.)r$rrrr s zCondition._make_methodsc CsJy|jjj|jjj}Wntk r4d}YnXd|jj|j|fS)NrCz <%s(%s, %s)>)rTrrArUrDrEr:rS)r$Z num_waitersrrrrFs   zCondition.__repr__c Csn|jj|jjj}xt|D]}|jjq Wz|jjd|S|jjxt|D]}|jjqVWXdS)NT) rTr.rSrrOrrVr-rU)r$timeoutrRr)rrrwaits   zCondition.waitcCsNx|jjdr|jjd}qW|jjdrJ|jj|jj|jjddS)NF)rUr-rTrVr.)r$resrrrnotifys    zCondition.notifycCs|x|jjdr|jjd}qWd}x"|jjdrD|jj|d7}q$W|rxxt|D]}|jjqTWx|jjdrvqhWdS)NFrr)rUr-rTrVr.r)r$rZZsleepersr)rrr notify_alls   zCondition.notify_allcCsh|}|r|S|dk r$tj|}nd}d}x6|sb|dk rP|tj}|dkrPP|j||}q.W|S)Nr)timeZ monotonicrY)r$Z predicaterXresultZendtimeZwaittimerrrwait_for6s   zCondition.wait_for)N)N)N)r:r;r<r+r4r6r/r0r rFrYr[r\r_rrrrrs  c@s6eZdZddZddZddZddZd d d Zd S) rcCs |j|j|_|jd|_dS)Nr)rr_condr_flag)r$r(rrrr+NszEvent.__init__c Cs0|j |jjdr"|jjdSdSQRXdS)NFT)r`rar-r.)r$rrris_setRs   z Event.is_setc Cs6|j&|jjd|jj|jjWdQRXdS)NF)r`rar-r.r\)r$rrrsetYs  z Event.setc Cs"|j|jjdWdQRXdS)NF)r`rar-)r$rrrclear_sz Event.clearNc CsT|jD|jjdr |jjn |jj||jjdrF|jjdSdSQRXdS)NFT)r`rar-r.rY)r$rXrrrrYcs     z Event.wait)N)r:r;r<r+rbrcrdrYrrrrrLs c@sZeZdZdddZddZddZedd Zejd d Zed d Z e jd d Z dS)BarrierNc CsRddl}ddlm}||jdd}|j}|j|||||fd|_d|_dS)Nrr) BufferWrapperr)r)structheaprfZcalcsizerr6_staterO) r$ZpartiesactionrXr(rgrfwrapperZcondrrrr+us zBarrier.__init__cCs.|\|_|_|_|_|_|jjjd|_dS)Nr))_parties_action_timeoutr`_wrapperZcreate_memoryviewcast_array)r$r5rrrr6~szBarrier.__setstate__cCs|j|j|j|j|jfS)N)rlrmrnr`ro)r$rrrr4s zBarrier.__getstate__cCs |jdS)Nr)rq)r$rrrriszBarrier._statecCs||jd<dS)Nr)rq)r$r&rrrriscCs |jdS)Nr)rq)r$rrrrOszBarrier._countcCs||jd<dS)Nr)rq)r$r&rrrrOs)NN) r:r;r<r+r6r4propertyrisetterrOrrrrress   rezRThis platform lacks a functioning sem_open implementation, therefore, the requiredz}This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will notzThis platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770.)__all__rMrr=rr]r r r r r ImportErrorlistrrPr?r@objectrrrrrrrerrrr s0    Mz'__pycache__/__init__.cpython-36.opt-1.pyc000064400000000753147221272370014114 0ustar003 \@s\ddlZddlmZejddejjDejjZdZdZdej krXej dej d <dS) N)contextccs|]}|ttj|fVqdS)N)getattrr_default_context).0namer /usr/lib64/python3.6/__init__.py sr __main__Z __mp_main__) sysrglobalsupdater__all__ZSUBDEBUGZ SUBWARNINGmodulesrrrr s   __pycache__/util.cpython-36.opt-2.pyc000064400000021432147221272370013330 0ustar003 \n.@sddlZddlZddlZddlZddlZddlZddlmZddlm Z ddddd d d d d ddddddgZ dZ dZ dZ dZdZdZdZdadaddZddZddZddZdd Zd6d d Zd!d ZejZejZd"d#Zd$d Z iZ!ejZ"Gd%dde#Z$d7d&d'Z%d(d Z&da'eee%e j(e j)fd)d*Z*ej+e*Gd+dde#Z,Gd,ddej-Z.yej/d-Z0Wne1k rd.Z0YnXd/dZ2d0d1Z3d2d3Z4d4d5Z5dS)8N)_args_from_interpreter_flags)process sub_debugdebuginfo sub_warning get_logger log_to_stderr get_temp_dirregister_after_fork is_exitingFinalizeForkAwareThreadLockForkAwareLocalclose_all_fds_exceptSUBDEBUG SUBWARNING Zmultiprocessingz+[%(levelname)s/%(processName)s] %(message)sFcGstrtjt|f|dS)N)_loggerlogr)msgargsr,/usr/lib64/python3.6/multiprocessing/util.pyr,scGstrtjt|f|dS)N)rrDEBUG)rrrrrr0scGstrtjt|f|dS)N)rrINFO)rrrrrr4scGstrtjt|f|dS)N)rrr)rrrrrr8sc Cs|ddl}|jz\tsj|jtadt_ttdrFtjt tj t n$tj j t fiftj j t fifWd|jXtS)Nr unregister)loggingZ _acquireLockrZ getLogger LOGGER_NAMEZ propagatehasattratexitr _exit_functionregisterZ _exithandlersremoveappendZ _releaseLock)r!rrrr <s     cCsJddl}t}|jt}|j}|j||j||rB|j|dat S)NrT) r!r Z FormatterDEFAULT_LOGGING_FORMATZ StreamHandlerZ setFormatterZ addHandlerZsetLevel_log_to_stderrr)levelr!ZloggerZ formatterZhandlerrrrr Ws    cCsdtjjjd}|dkr`ddl}ddl}|jdd}td|td|j |gdd|tjjd<|S) Ntempdirrzpymp-)prefixzcreated temp directory %sd)r exitpriorityi) rcurrent_processZ_configgetshutiltempfileZmkdtemprrZrmtree)r,r2r3rrrr ms  cCsjttj}|jxP|D]H\\}}}}y ||Wqtk r`}ztd|WYdd}~XqXqWdS)Nz after forker raised exception %s)list_afterfork_registryitemssort Exceptionr)r6indexZidentfuncobjerrr_run_after_forkerss  r=cCs|tttt||f<dS)N)r5next_afterfork_counterid)r;r:rrrr sc@sHeZdZfddfddZdeeejfddZddZ dd Z d d Z dS) rNcCsT|dk rtj|||_n||_||_|p*i|_|ttf|_t j |_ |t |j<dS)N) weakrefref_weakref _callback_args_kwargsr>_finalizer_counter_keyosgetpid_pid_finalizer_registry)selfr;callbackrkwargsr/rrr__init__s  zFinalize.__init__c Csy ||j=Wntk r(|dYnbX|j|krD|dd}n$|d|j|j|j|j|j|j}d|_|_|_|_|_|SdS)Nzfinalizer no longer registeredz+finalizer ignored because different processz/finalizer calling %s with args %s and kwargs %s)rHKeyErrorrKrDrErFrC)rMwrrLrrJresrrr__call__s  zFinalize.__call__c CsDy t|j=Wntk r Yn Xd|_|_|_|_|_dS)N)rLrHrQrCrDrErF)rMrrrcancels  zFinalize.cancelcCs |jtkS)N)rHrL)rMrrr still_activeszFinalize.still_activecCsy |j}Wnttfk r(d}YnX|dkr>d|jjSd|jjt|jd|jf}|jrr|dt|j7}|j r|dt|j 7}|j ddk r|dt|j d7}|dS) Nz<%s object, dead>z<%s object, callback=%s__name__z, args=z , kwargs=rz, exitprority=>) rCAttributeError TypeError __class__rWgetattrrDrEstrrFrH)rMr;xrrr__repr__s    zFinalize.__repr__) rW __module__ __qualname__rPrLrrIrJrTrUrVr_rrrrrs c stdkr dSdkrddn fddfddttD}|jddxX|D]P}tj|}|dk rRtd|y |WqRtk rd dl}|jYqRXqRWdkrtjdS) NcSs |ddk S)Nrr)prrrsz!_run_finalizers..cs|ddk o|dkS)Nrr)rb) minpriorityrrrcscsg|]}|r|qSrr).0key)frr sz#_run_finalizers..T)reversez calling %sr) rLr4r7r1rr8 traceback print_excclear)rdkeysrf finalizerrjr)rgrdr_run_finalizerss$       rocCs tp tdkS)N)_exitingrrrrr scCstsda|d|d|d|dk rzx*|D] }|jr2|d|j|jjq2Wx"|D]}|d|j|jq^W|d|dS)NTzprocess shutting downz2running all "atexit" finalizers with priority >= 0rz!calling terminate() for daemon %szcalling join() for process %sz)running the remaining "atexit" finalizers)rpZdaemonnameZ_popenZ terminatejoin)rrroactive_childrenr0rbrrrr%s       r%c@s,eZdZddZddZddZddZd S) rcCs|jt|tjdS)N)_resetr r)rMrrrrPKszForkAwareThreadLock.__init__cCs"tj|_|jj|_|jj|_dS)N) threadingZLock_lockacquirerelease)rMrrrrtOs  zForkAwareThreadLock._resetcCs |jjS)N)rv __enter__)rMrrrryTszForkAwareThreadLock.__enter__cGs |jj|S)N)rv__exit__)rMrrrrrzWszForkAwareThreadLock.__exit__N)rWr`rarPrtryrzrrrrrJsc@seZdZddZddZdS)rcCst|dddS)NcSs |jjS)N)__dict__rl)r;rrrrc]sz)ForkAwareLocal.__init__..)r )rMrrrrP\szForkAwareLocal.__init__cCs t|ffS)N)type)rMrrr __reduce__^szForkAwareLocal.__reduce__N)rWr`rarPr}rrrrr[s SC_OPEN_MAXcCsRt|dtg}|jx4tt|dD] }tj||d||dq*WdS)Nr)r4MAXFDr7rangelenrI closerange)ZfdsirrrrjscCstjdkrdSytjjWnttfk r4YnXy@tjtjtj}yt|ddt_Wntj|YnXWnttfk rYnXdS)NF)closefd) sysstdincloseOSError ValueErrorrIopendevnullO_RDONLY)fdrrr _close_stdints   rcCsTytjjWnttfk r&YnXytjjWnttfk rNYnXdS)N)rstdoutflushrYrstderrrrrr_flush_std_streamssrcCstddl}tttt|}tj\}}z2|j|tj|gd|ddddddd d ||dddStj |tj |XdS) NrTrFrrrrrr) _posixsubprocesstuplesortedmapintrIpipeZ fork_execfsencoder)pathrZpassfdsrZ errpipe_readZ errpipe_writerrrspawnv_passfdss   r)N)N)6rI itertoolsrrAr$ru subprocessrr__all__ZNOTSETrrrrr"r)rr*rrrrr r r WeakValueDictionaryr5countr?r=r rLrGobjectrror rprsr0r%r&rZlocalrsysconfrr8rrrrrrrr sf      S ,(    __pycache__/forkserver.cpython-36.opt-2.pyc000064400000013501147221272370014541 0ustar003 \!@sddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddlm Z ddl m Z ddlm Z ddlmZddlmZd d d d gZd ZejdZGdddeZdddZddZddZddZeZejZejZejZejZdS)N) connection)process) reduction)semaphore_tracker)spawn)utilensure_runningget_inherited_fdsconnect_to_new_processset_forkserver_preloadQc@s4eZdZddZddZddZddZd d Zd S) ForkServercCs.d|_d|_d|_d|_tj|_dg|_dS)N__main__)_forkserver_address_forkserver_alive_fd_forkserver_pid_inherited_fds threadingZLock_lock_preload_modules)selfr2/usr/lib64/python3.6/multiprocessing/forkserver.py__init__!s  zForkServer.__init__cCs&tdd|jDstd||_dS)Ncss|]}t|tkVqdS)N)typestr).0modrrr +sz4ForkServer.set_forkserver_preload..z&module_names must be a list of strings)allr TypeError)rZ modules_namesrrrr )sz!ForkServer.set_forkserver_preloadcCs|jS)N)r)rrrrr /szForkServer.get_inherited_fdscCs|jt|dtkr tdtjtj}|j|jtj \}}tj \}}|||j t j g}||7}z.r(iz-czCfrom multiprocessing.forkserver import main; main(%d, %d, %r, **%r))rrr rr)waitpidWNOHANGr+rrrrZget_preparation_datadictitemsr'r(rZarbitrary_addressZbindchmodZlistenr*filenoZget_executablerZ_args_from_interpreter_flagsZspawnv_passfds) rpidZstatuscmddatalistenerZaddressalive_rZalive_wZ fds_to_passZexeargsr)r4rr TsL             zForkServer.ensure_runningN)__name__ __module__ __qualname__rr r r r rrrrrs rc4Cs|rhd|kr8|dk r8dtj_ztj|Wdtj`Xx.|D]&}y t|Wq>tk rbYq>Xq>Wtjt j t j t j t j i}dd|j D}tjtj|d,}tj} |jt_| j|tj| j|tjxyxdd| jD} | rPqW|| kr t|jdl} d } tjdkrzFyt| |||Wn.tk rntjtj tj!j"YnXWdtj#| XWdQRXWqt$k r} z| j%t%j&krWYdd} ~ XqXqWWdQRXWdQRXdS) NrTcSsi|]\}}tj|||qSr)signal)rsigvalrrr szmain..)r:cSsg|]\}}|jqSr)Zfileobj)rkeyZeventsrrr szmain..rr)'rZcurrent_processZ _inheritingrZimport_main_path __import__ ImportErrorrZ _close_stdinrDSIGCHLDSIG_IGNSIGINTr8r'r( selectorsZDefaultSelectorZ getsockname _forkserverrregisterZ EVENT_READZselect SystemExitZacceptr)fork _serve_one Exceptionsys excepthookexc_infostderrflush_exitOSErrorerrnoZ ECONNABORTED)Z listener_fdr?Zpreloadr/r0modnamehandlersZ old_handlersr>ZselectorZrfdsscodeerrrmainsR          rcc Cs|jtj|x |jD]\}}tj||qWtj|td}|j|^}}t_} t_ | t j _ t |tjdtjkrddl} | jtj|} t || dS)Nrrandomr)r+r)r8rDrZrecvfdsr%rPrrrZ_semaphore_trackerZ_fdwrite_unsignedgetpidrVmodulesrdZseedr_main) r`r>r?r_rErFr,r.r-ZstfdrdrarrrrTs   rTcCsRd}tj}x8t||krBtj||t|}|s8td||7}q Wtj|dS)Nzunexpected EOFr)UNSIGNED_STRUCTsizer$r)readEOFErrorZunpack)fdr=Zlengthr`rrr read_unsigneds rocCs@tj|}x0|r:tj||}|dkr,td||d}q WdS)Nrzshould not get here)rjZpackr)write RuntimeError)rnnmsgnbytesrrrres   re)NN)r]r)rOrDr'ZstructrVrrrcontextrrrr__all__r%ZStructrjobjectrrcrTrorerPr r r r rrrrs6       s =!  __pycache__/managers.cpython-36.pyc000064400000101032147221272370013203 0ustar003 \@sddddgZddlZddlZddlZddlZddlZddlmZddlm Z dd l m Z m Z dd lm Z dd lmZdd lmZdd lmZddZe jejedddDZedek rddZxeD]Ze jeeqWGdddeZfifddZddZGdddeZddZd d!ZGd"d#d#eZGd$d%d%eZ e j!e j"fe j#e j$fd&Z%Gd'ddeZ&Gd(d)d)e'Z(Gd*ddeZ)d+d,Z*ifd-d.Z+dd0d1Z,Gd2d3d3eZ-Gd4d5d5eZ.dd6d7Z/Gd8d9d9e)Z0Gd:d;d;e)Z1Gdd?d?e)Z3Gd@dAdAe)Z4GdBdCdCe)Z5GdDdEdEe)Z6e+dFdZ7GdZd[d[e7Z8e+d\dZ9d]deie9_:e+dfdZ;e+dgdZe>jdwej?e>jdxej?e>jdyej@e3e>jdzejAe1e>jd{ejBe1e>jd|ejCe1e>jd}ejDe1e>jd~ejEe2e>jdejFe4e>jde jGe=e>jdee8e>jdeHe9e>jd5e.e6e>jd7e/e;e>jd3e-e5e>jdee0dde>jdsdddS) BaseManager SyncManager BaseProxyTokenN) format_exc) connection) reductionget_spawning_popen)pool)process)util) get_contextcCstj|j|jffS)N)arraytypecodetobytes)ar /usr/lib64/python3.6/managers.py reduce_array$srcCsg|]}tti|qSr)typegetattr).0namerrr (sritemskeysvaluescCstt|ffS)N)list)objrrrrebuild_as_list*sr c@s4eZdZdZdZddZddZd d Zd d Zd S)rz4 Type to uniquely indentify a shared object typeidaddressidcCs||||_|_|_dS)N)r!r"r#)selfr!r"r#rrr__init__9szToken.__init__cCs|j|j|jfS)N)r!r"r#)r$rrr __getstate__<szToken.__getstate__cCs|\|_|_|_dS)N)r!r"r#)r$staterrr __setstate__?szToken.__setstate__cCsd|jj|j|j|jfS)Nz %s(typeid=%r, address=%r, id=%r)) __class____name__r!r"r#)r$rrr__repr__BszToken.__repr__N)r!r"r#) r* __module__ __qualname____doc__ __slots__r%r&r(r+rrrrr3s cCs8|j||||f|j\}}|dkr*|St||dS)zL Send a message to manager using connection `c` and return response z#RETURNN)sendrecvconvert_to_error)cr# methodnameargskwdskindresultrrrdispatchJs  r9cCs\|dkr |S|dkr,t|tks$tt|S|dkrPt|tksDttd|StdSdS)Nz#ERRORz #TRACEBACKz#UNSERIALIZABLEzUnserializable message: %s zUnrecognized message type)rstrAssertionError RemoteError ValueError)r7r8rrrr2Ts r2c@seZdZddZdS)r<cCs&ddddt|jdddS)N -Kr)r:r5)r$rrr__str__aszRemoteError.__str__N)r*r,r-rArrrrr<`sr<cCs6g}x,t|D] }t||}t|r|j|qW|S)z4 Return a list of names of methods of `obj` )dirrcallableappend)rtemprfuncrrr all_methodshs  rGcCsddt|DS)zP Return a list of names of methods of `obj` which do not start with '_' cSsg|]}|ddkr|qS)r_r)rrrrrrwsz"public_methods..)rG)rrrrpublic_methodsssrIc @seZdZdZdddddddd d g Zd d Zd dZddZddZddZ ddZ ddZ ddZ e e e dZ ddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.S)/ServerzM Server class which runs in a process controlled by a manager object shutdowncreateaccept_connection get_methods debug_infonumber_of_objectsdummyincrefdecrefcCslt|tst||_tj||_t|\}}||dd|_|jj |_ ddffi|_ i|_ i|_ t j|_dS)N)r"Zbacklog0) isinstancebytesr;registryr AuthenticationStringauthkeylistener_clientlistenerr" id_to_objid_to_refcountid_to_local_proxy_obj threadingLockmutex)r$rXr"rZ serializerListenerClientrrrr%s   zServer.__init__cCstj|_|tj_zZtj|jd}d|_|j y x|jj sN|jj dq6WWnt t fk rjYnXWdtjtjkrtjdtjt_tjt_tjdXdS)z( Run the server forever )targetTrNzresetting stdout, stderrr)r`Event stop_eventr current_process_manager_serverThreadaccepterdaemonstartis_setwaitKeyboardInterrupt SystemExitsysstdout __stdout__r debug __stderr__stderrexit)r$rlrrr serve_forevers       zServer.serve_foreverc CsPxJy|jj}Wntk r&wYnXtj|j|fd}d|_|jqWdS)N)rfr5T)r\ZacceptOSErrorr`rkhandle_requestrmrn)r$r3trrrrlszServer.accepterc 'CsLd}}}yTtj||jtj||j|j}|\}}}}||jksTtd|t||}Wntk r~dt f} Yn>Xy||f||}Wntk rdt f} Yn Xd|f} y|j | Wnttk r>} zVy|j dt fWntk rYnXt j d| t j d|t j d| WYdd} ~ XnX|j dS)z) Handle a new connection Nz%r unrecognizedz #TRACEBACKz#RETURNzFailure to send message: %rz ... request was %rz ... exception was %r)rZdeliver_challengerZZanswer_challenger1publicr;r Exceptionrr0r infoclose) r$r3funcnamer8requestignorer5r6rFmsgerrrr|s4    zServer.handle_requestcDCstjdtjj|j}|j}|j}x|jj syBd}}|}|\}}} } y||\}} } Wn^t k r} zBy|j |\}} } Wn&t k r}z | WYdd}~XnXWYdd} ~ XnX|| krt d|t || ft||}y|| | }Wn,tk r&}zd|f}WYdd}~XnPX| o8| j|d}|rn|j|||\}}t||j|}d||ff}nd|f}Wnt k r|dkrdtf}nNy,|j|}|||||f| | }d|f}Wn tk rdtf}YnXYnPtk r"tjdtjjtjd Yn tk r@dtf}YnXyDy ||Wn2tk r}z|d tfWYdd}~XnXWq(tk r}zBtjd tjjtjd |tjd ||jtjdWYdd}~Xq(Xq(WdS)zQ Handle requests from the proxies in a particular process/thread z$starting server thread to service %rNz+method %r of %r object is not in exposed=%rz#ERRORz#PROXYz#RETURNz #TRACEBACKz$got EOF -- exiting thread serving %rrz#UNSERIALIZABLEzexception in thread serving %rz ... message was %rz ... exception was %rr)r rvr`current_threadrr1r0r]rhroKeyErrorr_AttributeErrorrrrgetrLrr"rfallback_mappingEOFErrorrsryrr)r$connr1r0r]r4rridentr5r6exposed gettypeidkeZ second_keZfunctionresrrr!ZridentZrexposedtokenZ fallback_funcr8rrr serve_clientsx  (        $   zServer.serve_clientcCs|S)Nr)r$rrrrrrfallback_getvalue&szServer.fallback_getvaluecCst|S)N)r:)r$rrrrrr fallback_str)szServer.fallback_strcCst|S)N)repr)r$rrrrrr fallback_repr,szServer.fallback_repr)rAr+z #GETVALUEcCsdS)Nr)r$r3rrrrQ5sz Server.dummycCs||jlg}t|jj}|jxD|D]<}|dkr(|jd||j|t|j|dddfq(Wdj|SQRXdS)zO Return some info --- useful to spot problems with refcounting rUz %s: refcount=%s %srNr@r>) rbrr^rsortrDr:r]join)r$r3r8rrrrrrO8s  $zServer.debug_infocCs t|jS)z* Number of shared objects )lenr^)r$r3rrrrPGszServer.number_of_objectscCsLz:ytjd|jdWnddl}|jYnXWd|jjXdS)z' Shutdown this process z!manager received shutdown message#RETURNNr)rN)r rvr0 traceback print_excrhset)r$r3rrrrrKNs zServer.shutdownc Os|j|j|\}}}}|dkrBt|dkr4| s8t|d} n |||} |dkr\t| }|dk rt|tksttt|t|}dt| } t j d|| | t ||f|j | <| |j krd|j | <WdQRX|j|| | t|fS)z> Create a new shared object and return its id Nrrz%xz&%r callable returned object with id %r)rbrXrr;rIrdictrr#r rvrr]r^rRtuple) r$r3r!r5r6rCrmethod_to_typeid proxytyperrrrrrL[s$     z Server.createcCst|j|jdS)zL Return the methods of the shared object indicated by token r)rr]r#)r$r3rrrrrNzszServer.get_methodscCs"|tj_|jd|j|dS)z= Spawn a new thread to serve this connection #RETURNN)rN)r`rrr0r)r$r3rrrrrMs  zServer.accept_connectioncCs|jy|j|d7<Wnhtk r}zL||jkrrd|j|<|j||j|<|j|\}}}tjd|n|WYdd}~XnXWdQRXdS)Nrz&Server re-enabled tracking & INCREF %r)rbr^rr_r]r rv)r$r3rrrrrrrrrRs  z Server.increfcCs||jkr$||jkr$tjd|dS|j@|j|dks>t|j|d8<|j|dkrf|j|=WdQRX||jkrdfdf|j|<tjd||j|j|=WdQRXdS)NzServer DECREF skipping %rrrzdisposing of obj with id %r)r^r_r rvrbr;r])r$r3rrrrrSs     z Server.decrefN)r*r,r-r.r~r%rzrlr|rrrrrrQrOrPrKrLrNrMrRrSrrrrrJ}s. "Q rJc@seZdZdgZdZdZdZdS)StatevaluerrN)r*r,r-r/INITIALSTARTEDSHUTDOWNrrrrrsr)pickleZ xmlrpclibc@seZdZdZiZeZd!ddZddZdd Z dffd d Z e dffd d Z ddZ d"ddZddZddZddZddZeddZeddZe d#dd ZdS)$rz! Base class for managers NrcCs\|dkrtjj}||_tj||_t|_tj|j_ ||_ t |\|_ |_ |pTt|_dS)N)r rirZ_addressrY_authkeyr_staterr _serializerr[Z _Listener_Clientr_ctx)r$r"rZrcZctxrrrr%s   zBaseManager.__init__cCs(|jjtjkstt|j|j|j|j S)zX Return server object with serve_forever() method and address attribute ) rrrrr;rJ _registryrrr)r$rrr get_servers zBaseManager.get_servercCs8t|j\}}||j|jd}t|ddtj|j_dS)z> Connect manager object to the server process )rZNrQ) r[rrrr9rrrr)r$rdrerrrrconnects zBaseManager.connectc Cs|jjtjkst|dk r,t| r,tdtjdd\}}|j j t |j |j |j|j|j|||fd|_djdd|jjD}t |jd ||j_|jj|j|j|_|jtj|j_tj|t |j|j|j|j|j|jfd d |_dS) z@ Spawn a server process for this manager object Nzinitializer must be a callableF)Zduplex)rfr5:css|]}t|VqdS)N)r:)rirrr sz$BaseManager.start..r?r)r5 exitpriority)rrrrr;rC TypeErrorrZPiperZProcessr _run_serverrrrr_processrZ _identityr*rrnrr1rr Finalize_finalize_managerrrK)r$ initializerinitargsreaderwriterrrrrrns(       zBaseManager.startc CsN|dk r|||j||||}|j|j|jtjd|j|jdS)z@ Create a server, report its address and run it Nzmanager serving at %r)_Serverr0r"rr rrz) clsrXr"rZrcrrrserverrrrrs zBaseManager._run_serverc Osd|jjtjkstd|j|j|jd}zt|dd|f||\}}Wd|j Xt ||j||fS)zP Create a new shared object; return the token and exposed tuple zserver not yet started)rZNrL) rrrrr;rrrr9rr)r$r!r5r6rr#rrrr_create%s  zBaseManager._createcCs*|jdk r&|jj||jjs&d|_dS)zC Join the manager process (if it has been spawned) N)rris_alive)r$timeoutrrrr1s   zBaseManager.joinc Cs.|j|j|jd}z t|ddS|jXdS)zS Return some info about the servers shared objects and connections )rZNrO)rrrr9r)r$rrrr _debug_info:s zBaseManager._debug_infoc Cs.|j|j|jd}z t|ddS|jXdS)z5 Return the number of shared objects )rZNrP)rrrr9r)r$rrrr_number_of_objectsDs zBaseManager._number_of_objectscCs,|jjtjkr|j|jjtjks(t|S)N)rrrrrnrr;)r$rrr __enter__NszBaseManager.__enter__cCs |jdS)N)rK)r$exc_typeexc_valexc_tbrrr__exit__TszBaseManager.__exit__cCs|jrtjdy,|||d}zt|ddWd|jXWntk rRYnX|jdd|jrtjdt|drtjd |j|jd d|jrtjd t j |_ y t j |=Wntk rYnXdS) zQ Shutdown the manager process; will be registered as a finalizer z#sending shutdown message to manager)rZNrKg?)rzmanager still alive terminatez'trying to `terminate()` manager processg?z#manager still alive after terminate)rr rr9rrrhasattrrrrrr_address_to_localr)r r"rZr'rrrrrrWs.         zBaseManager._finalize_managercCs|jS)N)r)r$rrrwszBaseManager.Tc sd|jkr|jj|_dkr"t|p0tdd}|p@tdd}|rxHt|jD]8\}}t|tkstt d|t|tksTt d|qTW|||f|j<|rƇfdd} | _ t || dS)z9 Register a typeid with the manager type rN _exposed__method_to_typeid_z%r is not a stringcs`tjd|jf||\}}||j||j|d}|j|j|jd}t|dd|jf|S)Nz)requesting creation of a shared %r object)managerrZr)rZrS) r rvrrrrr"r9r#)r$r5r6rZexpproxyr)rr!rrrEs  z"BaseManager.register..temp) __dict__rcopy AutoProxyrrrrr:r;r*setattr) rr!rCrrr create_methodkeyrrEr)rr!rregisterys     zBaseManager.register)NNrN)N)NNNNT)r*r,r-r.rrJrr%rrrn classmethodrrrrrrr staticmethodrpropertyr"rrrrrrs*  $    c@seZdZddZddZdS)ProcessLocalSetcCstj|dddS)NcSs|jS)N)clear)rrrrrsz*ProcessLocalSet.__init__..)r register_after_fork)r$rrrr%szProcessLocalSet.__init__cCs t|ffS)N)r)r$rrr __reduce__szProcessLocalSet.__reduce__N)r*r,r-r%rrrrrrsrc@seZdZdZiZejZdddZddZ fifd d Z d d Z d dZ e ddZddZddZddZddZddZdS)rz. A base for proxies of shared objects NTFc Cstj8tjj|jd}|dkr:tjtf}|tj|j<WdQRX|d|_|d|_ ||_ |j j |_ ||_ ||_t|d|_||_|dk rtj||_n"|j dk r|j j|_n tjj|_|r|jtj|tjdS)Nrr)r_mutexrrr"r ZForkAwareLocalr_tls_idset_tokenr#_id_managerrr[r_owned_by_managerr rYrrirZ_increfr _after_fork) r$rrcrrZrrR manager_ownedZ tls_idsetrrrr%s*      zBaseProxy.__init__cCsdtjdtjj}tjjdkr4|dtjj7}|j|jj |j d}t |dd|f||j _ dS)Nzmaking connection to managerZ MainThread|)rZrM)r rvr rirr`rrrr"rr9rr)r$rrrrr_connects  zBaseProxy._connectc Csy |jj}Wn6tk rBtjdtjj|j|jj}YnX|j |j |||f|j \}}|dkrp|S|dkr|\}}|j j |jd } |jj|_| ||j|j |j|d} |j|j|jd}t|dd|jf| St||dS) zW Try to call a method of the referrent and return a copy of the result z#thread %r does not own a connectionz#RETURNz#PROXYr)rrZr)rZNrS)rrrr rvr`rrrr0rr1rrr!rr"rrrr9r#r2) r$r4r5r6rr7r8rrrrrrr _callmethods,      zBaseProxy._callmethodcCs |jdS)z9 Get a copy of the value of the referent z #GETVALUE)r)r$rrr _getvalueszBaseProxy._getvaluec Cs|jrtjd|jjdS|j|jj|jd}t|dd|j ftjd|jj|j j |j |j oj|j j }tj|tj|j|j||j|j |jfdd|_dS)Nz%owned_by_manager skipped INCREF of %r)rZrRz INCREF %r )r5r)rr rvrr#rr"rr9rraddrrrr_decrefrZ_close)r$rr'rrrr s zBaseProxy._increfcCs|j|j|dks |jtjkry2tjd|j||j|d}t|dd|jfWqt k r}ztjd|WYdd}~XqXntjd|j| rt |drtjdt j j |jj|`dS)Nz DECREF %r)rZrSz... decref failed %sz%DECREF %r -- manager already shutdownrz-thread %r has no more proxies so closing conn)discardr#rrrr rvr"r9rrr`rrrr)rrZr'ZtlsZidsetrrrrrrr s    zBaseProxy._decrefcCsHd|_y |jWn0tk rB}ztjd|WYdd}~XnXdS)Nzincref failed: %s)rrrr r)r$rrrrr9s  zBaseProxy._after_forkcCs^i}tdk r|j|d<t|ddrB|j|d<tt|j|j|ffStt||j|j|ffSdS)NrZ_isautoFr) r rrr RebuildProxyrrrr)r$r6rrrrAs    zBaseProxy.__reduce__cCs|jS)N)r)r$memorrr __deepcopy__NszBaseProxy.__deepcopy__cCsdt|j|jjt|fS)Nz<%s object, typeid %r at %#x>)rr*rr!r#)r$rrrr+QszBaseProxy.__repr__c Cs4y |jdStk r.t|dddSXdS)zV Return representation of the referent (or a fall-back if that fails) r+Nrz; '__str__()' failed>r)rrr)r$rrrrAUs zBaseProxy.__str__)NNNTF)r*r,r-r.rr ZForkAwareThreadLockrr%rrrrrrrrrr+rArrrrrs (   cCsttjdd}|rT|j|jkrTtjd|d|d<|j|jkrT|j|j|j|j<|j ddopttjdd }|||fd|i|S) z5 Function used for unpickling proxy objects. rjNz*Rebuild a proxy owned by manager, token=%rTrrRZ _inheritingF) rr rir"r rvr#r_r]pop)rFrrcr6rrRrrrrbs   rc Csrt|}y |||fStk r(YnXi}x|D]}td||f|q4Wt|tf|}||_||||f<|S)zB Return a proxy type whose methods are given by `exposed` zLdef %s(self, *args, **kwds): return self._callmethod(%r, args, kwds))rrexecrrr)rr_cacheZdicmeth ProxyTyperrr MakeProxyTypews   rTc Cst|d}|dkrB||j|d}zt|dd|f}Wd|jX|dkrX|dk rX|j}|dkrjtjj}td|j |}||||||d} d| _ | S)z* Return an auto-proxy for `token` rN)rZrNz AutoProxy[%s])rrZrRT) r[r"r9rrr rirZrr!r) rrcrrZrrRrrrrrrrrs    rc@seZdZddZddZdS) NamespacecKs|jj|dS)N)rupdate)r$r6rrrr%szNamespace.__init__cCs^t|jj}g}x,|D]$\}}|jds|jd||fqW|jd|jjdj|fS)NrHz%s=%rz%s(%s)z, ) rrr startswithrDrr)r*r)r$rrErrrrrr+s zNamespace.__repr__N)r*r,r-r%r+rrrrrsrc@s8eZdZd ddZddZddZdd ZeeeZd S) ValueTcCs||_||_dS)N) _typecode_value)r$rrlockrrrr%szValue.__init__cCs|jS)N)r)r$rrrrsz Value.getcCs ||_dS)N)r)r$rrrrrsz Value.setcCsdt|j|j|jfS)Nz %s(%r, %r))rr*rr)r$rrrr+szValue.__repr__N)T) r*r,r-r%rrr+rrrrrrrs  rcCs tj||S)N)r)rZsequencerrrrArraysr c@s8eZdZdZddZddZd d Zd d Zd dZdS) IteratorProxy__next__r0throwrcCs|S)Nr)r$rrr__iter__szIteratorProxy.__iter__cGs |jd|S)Nr )r)r$r5rrrr szIteratorProxy.__next__cGs |jd|S)Nr0)r)r$r5rrrr0szIteratorProxy.sendcGs |jd|S)Nr )r)r$r5rrrr szIteratorProxy.throwcGs |jd|S)Nr)r)r$r5rrrrszIteratorProxy.closeN)r r0r r) r*r,r-rr r r0r rrrrrr s r c@s2eZdZd ZdddZddZd d Zd d ZdS) AcquirerProxyacquirereleaseTNcCs"|dkr|fn||f}|jd|S)Nr)r)r$Zblockingrr5rrrrszAcquirerProxy.acquirecCs |jdS)Nr)r)r$rrrrszAcquirerProxy.releasecCs |jdS)Nr)r)r$rrrrszAcquirerProxy.__enter__cCs |jdS)Nr)r)r$rrrrrrrszAcquirerProxy.__exit__)rr)TN)r*r,r-rrrrrrrrrrs  rc@s4eZdZdZdddZd d Zd d Zdd dZdS)ConditionProxyrrrpnotify notify_allNcCs|jd|fS)Nrp)r)r$rrrrrpszConditionProxy.waitcCs |jdS)Nr)r)r$rrrrszConditionProxy.notifycCs |jdS)Nr)r)r$rrrrszConditionProxy.notify_allcCsh|}|r|S|dk r$tj|}nd}d}x6|sb|dk rP|tj}|dkrPP|j||}q.W|S)Nr)timeZ monotonicrp)r$Z predicaterr8ZendtimeZwaittimerrrwait_fors   zConditionProxy.wait_for)rrrprr)N)N)r*r,r-rrprrrrrrrrs  rc@s2eZdZdZddZddZd d Zdd d Zd S) EventProxyrorrrpcCs |jdS)Nro)r)r$rrrroszEventProxy.is_setcCs |jdS)Nr)r)r$rrrrszEventProxy.setcCs |jdS)Nr)r)r$rrrrszEventProxy.clearNcCs|jd|fS)Nrp)r)r$rrrrrpszEventProxy.wait)rorrrp)N)r*r,r-rrorrrprrrrrs rc@sNeZdZdZdddZdd Zd d Zed d ZeddZ eddZ dS) BarrierProxy__getattribute__rpabortresetNcCs|jd|fS)Nrp)r)r$rrrrrp szBarrierProxy.waitcCs |jdS)Nr)r)r$rrrrszBarrierProxy.abortcCs |jdS)Nr)r)r$rrrrszBarrierProxy.resetcCs |jddS)Nrparties)r)r)r$rrrrszBarrierProxy.partiescCs |jddS)Nr n_waiting)r)r)r$rrrrszBarrierProxy.n_waitingcCs |jddS)Nrbroken)r)r)r$rrrrszBarrierProxy.broken)rrprr)N) r*r,r-rrprrrrrrrrrrr s   rc@s(eZdZd ZddZddZdd Zd S) NamespaceProxyr __setattr__ __delattr__cCs0|ddkrtj||Stj|d}|d|fS)NrrHrr)objectr)r$r callmethodrrr __getattr__ s   zNamespaceProxy.__getattr__cCs4|ddkrtj|||Stj|d}|d||fS)NrrHrr)r!rr)r$rrr"rrrr%s  zNamespaceProxy.__setattr__cCs0|ddkrtj||Stj|d}|d|fS)NrrHrr )r!r r)r$rr"rrrr *s   zNamespaceProxy.__delattr__N)rrr )r*r,r-rr#rr rrrrrsrc@s*eZdZdZddZddZeeeZdS) ValueProxyrrcCs |jdS)Nr)r)r$rrrr3szValueProxy.getcCs|jd|fS)Nr)r)r$rrrrr5szValueProxy.setN)rr)r*r,r-rrrrrrrrrr$1sr$ BaseListProxy__add__ __contains__ __delitem__ __getitem____len____mul__ __reversed____rmul__ __setitem__rDcountextendindexinsertrremovereverser__imul__c@seZdZddZddZdS) ListProxycCs|jd|f|S)Nr0)r)r$rrrr__iadd__AszListProxy.__iadd__cCs|jd|f|S)Nr5)r)r$rrrrr5DszListProxy.__imul__N)r*r,r-r7r5rrrrr6@sr6 DictProxyr rrrhas_keypopitem setdefaultrIterator ArrayProxy PoolProxyapply apply_asyncrimapimap_unorderedrmap map_asyncstarmap starmap_asyncrZ AsyncResult)r@rDrFrArBc@seZdZddZddZdS)r>cCs|S)Nr)r$rrrrdszPoolProxy.__enter__cCs |jdS)N)r)r$rrrrrrrfszPoolProxy.__exit__N)r*r,r-rrrrrrr>csc@seZdZdZdS)ra( Subclass of `BaseManager` which supports a number of shared object types. The types registered are those intended for the synchronization of threads, plus `dict`, `list` and `Namespace`. The `multiprocessing.Manager()` function creates started instances of this class. N)r*r,r-r.rrrrrms QueueZ JoinableQueuergraRLock SemaphoreBoundedSemaphore ConditionBarrierPoolrrF)rr)r)rrr)NNNT)T)r&r'r(r)r*r+r,r-r.rDr/r0r1r2rr3r4rr5)r'r(r)r r*r.rrrr9rrrr:r;rr)r*r)r.) r?r@rrArBrrCrDrErFr)I__all__rsr`rZqueuerrrrcontextr r r r r rrrZ view_typesrr Z view_typer!rr9r2rr<rGrIrJrrdreZ XmlListenerZ XmlClientr[rrrrrrrrrr r rrrrrr$r%r6r8rr=Z BasePoolProxyr>rrGrgrarHrIrJrKrLrMrrrrr s             ; ] 4             __pycache__/__init__.cpython-36.pyc000064400000000753147221272370013155 0ustar003 \@s\ddlZddlmZejddejjDejjZdZdZdej krXej dej d <dS) N)contextccs|]}|ttj|fVqdS)N)getattrr_default_context).0namer /usr/lib64/python3.6/__init__.py sr __main__Z __mp_main__) sysrglobalsupdater__all__ZSUBDEBUGZ SUBWARNINGmodulesrrrr s   __pycache__/heap.cpython-36.opt-1.pyc000064400000013365147221272370013275 0ustar003 \ @sddlZddlZddlZddlZddlZddlZddlmZmZddl m Z dgZ ej dkrvddl Z GdddeZn,Gd ddeZd d Zd d ZejeeGdddeZGdddeZdS)N) reductionassert_spawning)util BufferWrapperZwin32c@s,eZdZejZddZddZddZdS)ArenacCsz||_xTtdD]@}dtjt|jf}tjd||d}tjdkrHP|j qWt d||_ ||_ |j|j f|_ dS)Ndz pym-%d-%sr)tagnamerzCannot find name for new mmap)sizerangeosgetpidnext_randmmap_winapiZ GetLastErrorcloseFileExistsErrornamebuffer_state)selfr irZbufr/usr/lib64/python3.6/heap.py__init__"s  zArena.__init__cCst||jS)N)rr)rrrr __getstate__1szArena.__getstate__cCs,|\|_|_|_tjd|j|jd|_dS)Nr)r r )r rrrr)rstaterrr __setstate__5szArena.__setstate__N) __name__ __module__ __qualname__tempfileZ_RandomNameSequencerrrrrrrrrsrc@seZdZdddZdS)rrc Cs||_||_|d krtjdtjtjd\|_}tj|tj |tj |jft |jdddN}d }||krd|}xt ||D]}|j |qW~|j d||WdQRXtj|j|j|_dS) Nrzpym-%d-)prefixdirwbF)closefdir i)r fdr#Zmkstempr rrZ get_temp_dirunlinkFinalizeropenr writerr)rr r)rfZbsZzeros_rrrr@s"  zArena.__init__Nr )r )r r!r"rrrrrr>scCs(|jdkrtdt|jtj|jffS)NrzDArena is unpicklable because forking was enabled when it was createdr )r) ValueError rebuild_arenar rZDupFd)arrr reduce_arenaSs r3cCst||jS)N)rdetach)r Zdupfdrrrr1Ysr1c@sZeZdZdZejfddZeddZddZ dd Z d d Z d d Z ddZ ddZdS)HeapcCsJtj|_tj|_||_g|_i|_i|_ i|_ t |_ g|_ g|_dS)N)r r_lastpid threadingZLock_lock_size_lengths _len_to_seq_start_to_block_stop_to_blockset_allocated_blocks_arenas_pending_free_blocks)rr rrrrfs  z Heap.__init__cCs|d}|||@S)Nrr)nZ alignmentmaskrrr_roundupssz Heap._roundupc Cstj|j|}|t|jkrj|jt|j|tj}|jd9_t j d|t |}|j j ||d|fS|j|}|j|}|j}|s|j|=|j|=|\}}}|j||f=|j||f=|S)Nz"allocating a new mmap of length %dr)bisectZ bisect_leftr;lenrEmaxr:rPAGESIZErinforrAappendr<popr=r>) rr rlengtharenaseqblockstartstoprrr_mallocys"        z Heap._mallocc Cs|\}}}y|j||f}Wntk r0YnX|j|\}}y|j||f}Wntk rfYnX|j|\}}|||f}||}y|j|j|Wn.tk r|g|j|<tj|j|YnX||j||f<||j||f<dS)N) r>KeyError_absorbr=r<rLrGZinsortr;) rrQrOrRrSZ prev_blockr/Z next_blockrNrrr_frees(   z Heap._freecCs^|\}}}|j||f=|j||f=||}|j|}|j||sV|j|=|jj|||fS)N)r=r>r<remover;)rrQrOrRrSrNrPrrrrVs      z Heap._absorbc CsFx@y|jj}Wntk r&PYnX|jj||j|qWdS)N)rBrM IndexErrorr@rXrW)rrQrrr_free_pending_blockss zHeap._free_pending_blocksc CsN|jjds|jj|n0z"|j|jj||j|Wd|jjXdS)NF) r9acquirerBrLrZr@rXrWrelease)rrQrrrfrees  z Heap.freec Cstj|jkr|j|jh|j|jt|d|j}|j |\}}}||}||krj|j |||f|||f}|j j ||SQRXdS)Nr) r rr7rr9rZrErI _alignmentrTrWr@add)rr rOrRrSZnew_stoprQrrrmallocs  z Heap.mallocN)r r!r"r^rrJr staticmethodrErTrWrVrZr]r`rrrrr5bs  r5c@s"eZdZeZddZddZdS)rcCs0tjj|}||f|_tj|tjj|fddS)N)args)r_heapr`rrr+r])rr rQrrrrs  zBufferWrapper.__init__cCs&|j\\}}}}t|j|||S)N)r memoryviewr)rrOrRrSr rrrcreate_memoryviewszBufferWrapper.create_memoryviewN)r r!r"r5rcrrerrrrrs)rGrr sysr#r8contextrrr__all__platformrobjectrr3r1registerr5rrrrr s$    __pycache__/semaphore_tracker.cpython-36.opt-2.pyc000064400000006403147221272370016052 0ustar003 \@sddlZddlZddlZddlZddlZddlZddlmZddlmZdddgZ Gdd d e Z e Z e j Z e jZe jZe jZd d ZdS) N)spawn)utilensure_runningregister unregisterc@s<eZdZddZddZddZddZd d Zd d Zd S)SemaphoreTrackercCstj|_d|_d|_dS)N) threadingZLock_lock_fd_pid)selfr9/usr/lib64/python3.6/multiprocessing/semaphore_tracker.py__init__s zSemaphoreTracker.__init__cCs|j|jS)N)rr )r rrrgetfd"szSemaphoreTracker.getfdc Cs|j|jdk rRtj|jtj\}}|s0dStj|jd|_d|_tjdg}y|j t j j Wnt k r~YnXd}tj\}}zlyB|j |tj}|gtj}|d||g7}tj|||}Wntj|YnX||_||_Wdtj|XWdQRXdS)NzWsemaphore_tracker: process died unexpectedly, relaunching. Some semaphores might leak.z;from multiprocessing.semaphore_tracker import main;main(%d)z-c)r r oswaitpidWNOHANGcloser warningswarnappendsysstderrfileno ExceptionpiperZget_executablerZ_args_from_interpreter_flagsZspawnv_passfds) r pidZstatusZ fds_to_passcmdrwZexeargsrrrr&s8        zSemaphoreTracker.ensure_runningcCs|jd|dS)NZREGISTER)_send)r namerrrrQszSemaphoreTracker.registercCs|jd|dS)NZ UNREGISTER)r#)r r$rrrrUszSemaphoreTracker.unregistercCs@|jdj||jd}t|dkr.tdtj|j|}dS)Nz{0}:{1} asciiiz name too long)rformatencodelen ValueErrorrwriter )r rr$msgnbytesrrrr#Ys  zSemaphoreTracker._sendN) __name__ __module__ __qualname__rrrrrr#rrrrrs +rc-Cstjtjtjtjtjtjx6tjtjfD]&}y |jWq.tk rRYq.Xq.Wt }zt |d}x|D]}yJ|j j d\}}|dkr|j |n |dkr|j|n td|Wqrtk rytjtjWn YnXYqrXqrWWdQRXWd|rs   I__pycache__/popen_spawn_posix.cpython-36.opt-2.pyc000064400000004074147221272370016131 0ustar003 \p@spddlZddlZddlmZmZddlmZddlmZddlmZdgZ Gdd d e Z Gd ddej Z dS) N) reductionset_spawning_popen) popen_fork)spawn)utilPopenc@seZdZddZddZdS)_DupFdcCs ||_dS)N)fd)selfr r 9/usr/lib64/python3.6/multiprocessing/popen_spawn_posix.py__init__sz_DupFd.__init__cCs|jS)N)r )r r r r detachsz _DupFd.detachN)__name__ __module__ __qualname__rrr r r r r sr cs4eZdZdZeZfddZddZddZZ S)rrcsg|_tj|dS)N)_fdssuperr)r process_obj) __class__r r rszPopen.__init__cCs|jj||S)N)rappend)r r r r r duplicate_for_child"s zPopen.duplicate_for_childc Cs@ddlm}|j}|jj|tj|j}tj }t |zt j ||t j ||Wdt dXd}}}} z~t j\}}t j\}} tj||d} |jj||gtjtj| |j|_||_t| ddd} | j|jWdQRXWd|dk rtj|t j|fx(||| fD]} | dk rt j| qWXdS)Nr)semaphore_tracker) tracker_fdZ pipe_handlewbF)closefd)rZgetfdrrrZget_preparation_data_nameioBytesIOrrdumpospipeZget_command_lineextendrZspawnv_passfdsZget_executablepidsentinelopenwrite getbufferZFinalizeclose) r rrrZ prep_datafpZparent_rZchild_wZchild_rZparent_wcmdfr r r r _launch&s6           z Popen._launch) rrrmethodr ZDupFdrrr. __classcell__r r )rr rs  ) rr"contextrrrrrr__all__objectr rr r r r s    __pycache__/queues.cpython-36.opt-1.pyc000064400000021222147221272370013656 0ustar003 \ *@sdddgZddlZddlZddlZddlZddlZddlZddlZddlm Z m Z ddl Z ddl m Z ddl mZejjZdd lmZmZmZmZmZGd ddeZeZGd ddeZGd ddeZdS) Queue SimpleQueue JoinableQueueN)EmptyFull) connection)context)debuginfoFinalizeregister_after_fork is_exitingc@seZdZd(ddZddZddZdd Zd)d d Zd*ddZddZ ddZ ddZ ddZ ddZ ddZddZddZd d!Zed"d#Zed$d%Zed&d'Zd S)+rrcCs|dkrddlm}||_tjdd\|_|_|j|_t j |_ t j dkrTd|_n |j|_|j||_d|_|jt j dkrt|tjdS)Nrr) SEM_VALUE_MAXF)duplexwin32)Z synchronizer_maxsizerPipe_reader_writerLock_rlockosgetpid_opidsysplatform_wlockZBoundedSemaphore_sem _ignore_epipe _after_forkr r)selfmaxsizectxr$/usr/lib64/python3.6/queues.py__init__$s       zQueue.__init__cCs.tj||j|j|j|j|j|j|j|j fS)N) r assert_spawningrrrrrrrr)r!r$r$r% __getstate__9s zQueue.__getstate__c Cs0|\|_|_|_|_|_|_|_|_|jdS)N) rrrrrrrrr )r!stater$r$r% __setstate__>s$zQueue.__setstate__cCsbtdtjtj|_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 CsP|jj||st|j.|jdkr,|j|jj||jjWdQRXdS)N) racquirerr-r1 _start_threadr0appendnotify)r!objblocktimeoutr$r$r%putPs  z Queue.putc Cs|r2|dkr2|j|j}WdQRX|jjnr|rBtj|}|jj||sTtzB|rv|tj}|j|stn |jst|j}|jjWd|jjXt j |S)N) rr9rreleasetimeZ monotonicr<rr;_ForkingPicklerloads)r!rArBresZdeadliner$r$r%get[s&      z Queue.getcCs|j|jjjS)N)rr_semlockZ _get_value)r!r$r$r%qsizessz Queue.qsizecCs |j S)N)r;)r!r$r$r%emptywsz Queue.emptycCs |jjjS)N)rrJ_is_zero)r!r$r$r%fullzsz Queue.fullcCs |jdS)NF)rI)r!r$r$r% get_nowait}szQueue.get_nowaitcCs |j|dS)NF)rC)r!r@r$r$r% put_nowaitszQueue.put_nowaitc Cs2d|_z|jjWd|j}|r,d|_|XdS)NT)r4rcloser5)r!rQr$r$r%rQsz Queue.closecCstd|jr|jdS)NzQueue.join_thread())r r2)r!r$r$r% join_threadszQueue.join_threadc Cs6tdd|_y|jjWntk r0YnXdS)NzQueue.cancel_join_thread()T)r r3r2ZcancelAttributeError)r!r$r$r%cancel_join_threads zQueue.cancel_join_threadcCstd|jjtjtj|j|j|j|j |j j |j fdd|_ d|j _td|j jtd|jst|j tjtj|j gd d|_t|tj|j|jgd d|_dS) NzQueue._start_thread()ZQueueFeederThread)targetargsnameTzdoing self._thread.start()z... done self._thread.start())Z exitpriority )r r0clearr+ZThreadr_feedr-r7rrrQrr1Zdaemonstartr3r _finalize_joinweakrefrefr2_finalize_closer5)r!r$r$r%r=s(       zQueue._start_threadcCs4td|}|dk r(|jtdntddS)Nzjoining queue threadz... queue thread joinedz... queue thread already dead)r join)ZtwrZthreadr$r$r%r^s  zQueue._finalize_joinc Cs.td||jt|jWdQRXdS)Nztelling queue thread to quit)r r> _sentinelr?)buffernotemptyr$r$r%ras zQueue._finalize_closecCsPtd|j}|j}|j}|j} t} tjdkr<|j} |j} nd} xy|z|sX|Wd|Xybx\| } | | krtd|dStj | } | dkr|| qh| z || Wd| XqhWWnt k rYnXWqDt k rF}zJ|rt |ddt jkrdStr&td|dSddl}|jWYdd}~XqDXqDWdS)Nz$starting thread to feed data to piperz%feeder thread got sentinel -- exitingerrnorzerror in queue thread: %s)r r<rDwaitpopleftrcrrrFdumps IndexError ExceptiongetattrrfZEPIPErr traceback print_exc)rdrer6Z writelockrQZ ignore_epipeZnacquireZnreleaseZnwaitZbpopleftsentinelZwacquireZwreleaser@ermr$r$r%r\sR       z Queue._feed)r)TN)TN)__name__ __module__ __qualname__r&r(r*r rCrIrKrLrNrOrPrQrRrTr= staticmethodr^rar\r$r$r$r%r"s$    c@s@eZdZdddZddZddZdd d Zd d ZddZd S)rrcCs*tj|||d|jd|_|j|_dS)N)r#r)rr&Z Semaphore_unfinished_tasksr,_cond)r!r"r#r$r$r%r&s zJoinableQueue.__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__TNcCsl|jj||st|jJ|j8|jdkr4|j|jj||j j |jj WdQRXWdQRXdS)N) rr<rr-rvr1r=r0r>rurDr?)r!r@rArBr$r$r%rCs   zJoinableQueue.putc Cs@|j0|jjdstd|jjjr2|jjWdQRXdS)NFz!task_done() called too many times)rvrur< ValueErrorrJrMZ notify_all)r!r$r$r% task_done's   zJoinableQueue.task_donec Cs,|j|jjjs|jjWdQRXdS)N)rvrurJrMrg)r!r$r$r%rb.s zJoinableQueue.join)r)TN) rqrrrsr&r(r*rCrzrbr$r$r$r%r s   c@s<eZdZddZddZddZddZd d Zd d Zd S)rcCsHtjdd\|_|_|j|_|jj|_tj dkr:d|_ n |j|_ dS)NF)rr) rrrrrrr:r;rrr)r!r#r$r$r%r&9s    zSimpleQueue.__init__cCs |j S)N)r;)r!r$r$r%rLBszSimpleQueue.emptycCstj||j|j|j|jfS)N)r r'rrrr)r!r$r$r%r(Es zSimpleQueue.__getstate__cCs"|\|_|_|_|_|jj|_dS)N)rrrrr:r;)r!r)r$r$r%r*IszSimpleQueue.__setstate__c Cs&|j|jj}WdQRXtj|S)N)rrr8rFrG)r!rHr$r$r%rIMszSimpleQueue.getc CsDtj|}|jdkr"|jj|n|j|jj|WdQRXdS)N)rFrirrr6)r!r@r$r$r%rCSs   zSimpleQueue.putN) rqrrrsr&rLr(r*rIrCr$r$r$r%r7s  )__all__rrr+r.rEr_rfZqueuerrZ_multiprocessingrr Z reductionZForkingPicklerrFutilr r r r robjectrrcrrr$r$r$r% s$   b *__pycache__/popen_spawn_win32.cpython-36.pyc000064400000005270147221272370014770 0ustar003 \ @sddlZddlZddlZddlZddlZddlmZmZmZddl m Z ddl m Z dgZ dZ ejdkoreed d Zejjjd ZGd ddeZdS) N) reductionget_spawning_popenset_spawning_popen)spawn)utilPopeniZwin32frozenFzpythonservice.exec@s>eZdZdZdZddZddZddd Zd d Zd d Z dS)rz@ Start a subprocess to run the code of a process object rc Cstj|j}tjdd\}}tj|d}tjtj |d}dj dd|D}t |ddd}y4tj tj |ddd dddd \}} } } tj| Wntj|YnX| |_d|_||_t||_tj|tj|jft|ztj||tj||WdtdXWdQRXdS) Nr)Z parent_pidZ pipe_handle css|]}d|VqdS)z"%s"N).0xr r )/usr/lib64/python3.6/popen_spawn_win32.py )sz!Popen.__init__..wbT)closefdF)rZget_preparation_data_name_winapiZ CreatePipemsvcrtZopen_osfhandleZget_command_lineosgetpidjoinopenZ CreateProcessZget_executableZ CloseHandlepid returncode_handleintsentinelrZFinalizerrdump) selfZ process_objZ prep_dataZrhandleZwhandleZwfdcmdZto_childZhpZhtrtidr r r__init__ s2      zPopen.__init__cCs|tksttj||jS)N)rAssertionErrorrZ duplicater)rZhandler r rduplicate_for_childEszPopen.duplicate_for_childNcCst|jdkrn|dkrtj}ntdt|dd}tjt|j|}|tjkrntj|j}|t krht j }||_|jS)Nrig?) rrZINFINITEmaxrZWaitForSingleObjectrZ WAIT_OBJECT_0ZGetExitCodeProcess TERMINATEsignalSIGTERM)rtimeoutZmsecsrescoder r rwaitIs   z Popen.waitcCs |jddS)Nr)r))r,)rr r rpollYsz Popen.pollc CsL|jdkrHytjt|jtWn&tk rF|jdddkrBYnXdS)Ng?)r))rrZTerminateProcessrrr&OSErrorr,)rr r r terminate\s  zPopen.terminate)N) __name__ __module__ __qualname____doc__methodr"r$r,r-r/r r r rrs% )rrr'sysrcontextrrrrr__all__r&platformgetattrZWINEXE executablelowerendswithZ WINSERVICEobjectrr r r rs  __pycache__/util.cpython-36.pyc000064400000023070147221272370012370 0ustar003 \n.@sddlZddlZddlZddlZddlZddlZddlmZddlm Z ddddd d d d d ddddddgZ dZ dZ dZ dZdZdZdZdadaddZddZddZddZdd Zd6d d Zd!d ZejZejZd"d#Zd$d Z iZ!ejZ"Gd%dde#Z$d7d&d'Z%d(d Z&da'eee%e j(e j)fd)d*Z*ej+e*Gd+dde#Z,Gd,ddej-Z.yej/d-Z0Wne1k rd.Z0YnXd/dZ2d0d1Z3d2d3Z4d4d5Z5dS)8N)_args_from_interpreter_flags)process sub_debugdebuginfo sub_warning get_logger log_to_stderr get_temp_dirregister_after_fork is_exitingFinalizeForkAwareThreadLockForkAwareLocalclose_all_fds_exceptSUBDEBUG SUBWARNING Zmultiprocessingz+[%(levelname)s/%(processName)s] %(message)sFcGstrtjt|f|dS)N)_loggerlogr)msgargsr/usr/lib64/python3.6/util.pyr,scGstrtjt|f|dS)N)rrDEBUG)rrrrrr0scGstrtjt|f|dS)N)rrINFO)rrrrrr4scGstrtjt|f|dS)N)rrr)rrrrrr8sc Cs|ddl}|jz\tsj|jtadt_ttdrFtjt tj t n$tj j t fiftj j t fifWd|jXtS)z0 Returns logger used by multiprocessing rN unregister)loggingZ _acquireLockrZ getLogger LOGGER_NAMEZ propagatehasattratexitr _exit_functionregisterZ _exithandlersremoveappendZ _releaseLock)r!rrrr <s     cCsJddl}t}|jt}|j}|j||j||rB|j|dat S)zB Turn on logging and add a handler which prints to stderr rNT) r!r Z FormatterDEFAULT_LOGGING_FORMATZ StreamHandlerZ setFormatterZ addHandlerZsetLevel_log_to_stderrr)levelr!ZloggerZ formatterZhandlerrrrr Ws    cCsdtjjjd}|dkr`ddl}ddl}|jdd}td|td|j |gdd|tjjd<|S) Ntempdirrzpymp-)prefixzcreated temp directory %sd)r exitpriorityi) rcurrent_processZ_configgetshutiltempfileZmkdtemprrZrmtree)r,r2r3rrrr ms  cCsjttj}|jxP|D]H\\}}}}y ||Wqtk r`}ztd|WYdd}~XqXqWdS)Nz after forker raised exception %s)list_afterfork_registryitemssort Exceptionr)r6indexZidentfuncobjerrr_run_after_forkerss  r=cCs|tttt||f<dS)N)r5next_afterfork_counterid)r;r:rrrr sc@sLeZdZdZfddfddZdeeejfddZ ddZ d d Z d d Z dS) rzA Class which supports object finalization using weakrefs NcCsx|dkst|tkst|dk r0tj|||_n |dk s_finalizer_counter_keyosgetpid_pid_finalizer_registry)selfr;callbackrkwargsr/rrr__init__s   zFinalize.__init__c Csy ||j=Wntk r(|dYnbX|j|krD|dd}n$|d|j|j|j|j|j|j}d|_|_|_|_|_|SdS)zQ Run the callback unless it has already been called or cancelled zfinalizer no longer registeredz+finalizer ignored because different processNz/finalizer calling %s with args %s and kwargs %s)rKKeyErrorrNrGrHrIrF)rPwrrOrrMresrrr__call__s  zFinalize.__call__c CsDy t|j=Wntk r Yn Xd|_|_|_|_|_dS)z3 Cancel finalization of the object N)rOrKrTrFrGrHrI)rPrrrcancels  zFinalize.cancelcCs |jtkS)zS Return whether this finalizer is still waiting to invoke callback )rKrO)rPrrr still_activeszFinalize.still_activecCsy |j}Wnttfk r(d}YnX|dkr>d|jjSd|jjt|jd|jf}|jrr|dt|j7}|j r|dt|j 7}|j ddk r|dt|j d7}|dS) Nz<%s object, dead>z<%s object, callback=%s__name__z, args=z , kwargs=rz, exitprority=>) rFAttributeError TypeError __class__rZgetattrrGrHstrrIrK)rPr;xrrr__repr__s    zFinalize.__repr__) rZ __module__ __qualname____doc__rSrOrrLrMrWrXrYrbrrrrrs c stdkr dSdkrddn fddfddttD}|jddxX|D]P}tj|}|dk rRtd |y |WqRtk rd dl}|jYqRXqRWdkrtjdS) z Run all finalizers whose exit priority is not None and at least minpriority Finalizers with highest priority are called first; finalizers with the same priority will be called in reverse order of creation. NcSs |ddk S)Nrr)prrrsz!_run_finalizers..cs|ddk o|dkS)Nrr)rf) minpriorityrrrgscsg|]}|r|qSrr).0key)frr sz#_run_finalizers..T)reversez calling %sr) rOr4r7r1rr8 traceback print_excclear)rhkeysrj finalizerrnr)rkrhr_run_finalizerss$       rscCs tp tdkS)z6 Returns true if the process is shutting down N)_exitingrrrrr scCstsda|d|d|d|dk rzx*|D] }|jr2|d|j|jjq2Wx"|D]}|d|j|jq^W|d|dS)NTzprocess shutting downz2running all "atexit" finalizers with priority >= 0rz!calling terminate() for daemon %szcalling join() for process %sz)running the remaining "atexit" finalizers)rtZdaemonnameZ_popenZ terminatejoin)rrrsactive_childrenr0rfrrrr%s       r%c@s,eZdZddZddZddZddZd S) rcCs|jt|tjdS)N)_resetr r)rPrrrrSKszForkAwareThreadLock.__init__cCs"tj|_|jj|_|jj|_dS)N) threadingZLock_lockacquirerelease)rPrrrrxOs  zForkAwareThreadLock._resetcCs |jjS)N)rz __enter__)rPrrrr}TszForkAwareThreadLock.__enter__cGs |jj|S)N)rz__exit__)rPrrrrr~WszForkAwareThreadLock.__exit__N)rZrcrdrSrxr}r~rrrrrJsc@seZdZddZddZdS)rcCst|dddS)NcSs |jjS)N)__dict__rp)r;rrrrg]sz)ForkAwareLocal.__init__..)r )rPrrrrS\szForkAwareLocal.__init__cCs t|ffS)N)rA)rPrrr __reduce__^szForkAwareLocal.__reduce__N)rZrcrdrSrrrrrr[s SC_OPEN_MAXcCsft|dtg}|j|dtks,tdx4tt|dD] }tj||d||dq>WdS)Nrz fd too larger)r4MAXFDr7rCrangelenrL closerange)Zfdsirrrrjs cCstjdkrdSytjjWnttfk r4YnXy@tjtjtj}yt|ddt_Wntj|YnXWnttfk rYnXdS)NF)closefd) sysstdincloseOSError ValueErrorrLopendevnullO_RDONLY)fdrrr _close_stdints   rcCsTytjjWnttfk r&YnXytjjWnttfk rNYnXdS)N)rstdoutflushr\rstderrrrrr_flush_std_streamssrcCstddl}tttt|}tj\}}z2|j|tj|gd|ddddddd d ||dddStj |tj |XdS) NrTrFrrrrrr) _posixsubprocesstuplesortedmaprBrLpipeZ fork_execfsencoder)pathrZpassfdsrZ errpipe_readZ errpipe_writerrrspawnv_passfdss   r)N)N)6rL itertoolsrrDr$ry subprocessrr__all__ZNOTSETrrrrr"r)rr*rrrrr r r WeakValueDictionaryr5countr?r=r rOrJobjectrrsr rtrwr0r%r&rZlocalrsysconfrr8rrrrrrrr sf      S ,(    __pycache__/semaphore_tracker.cpython-36.opt-1.pyc000064400000007045147221272370016054 0ustar003 \@sddlZddlZddlZddlZddlZddlZddlmZddlmZdddgZ Gdd d e Z e Z e j Z e jZe jZe jZd d ZdS) N)spawn)utilensure_runningregister unregisterc@s<eZdZddZddZddZddZd d Zd d Zd S)SemaphoreTrackercCstj|_d|_d|_dS)N) threadingZLock_lock_fd_pid)selfr)/usr/lib64/python3.6/semaphore_tracker.py__init__s zSemaphoreTracker.__init__cCs|j|jS)N)rr )r rrrgetfd"szSemaphoreTracker.getfdc Cs|j|jdk rRtj|jtj\}}|s0dStj|jd|_d|_tjdg}y|j t j j Wnt k r~YnXd}tj\}}zlyB|j |tj}|gtj}|d||g7}tj|||}Wntj|YnX||_||_Wdtj|XWdQRXdS)zMake sure that semaphore tracker process is running. This can be run from any process. Usually a child process will use the semaphore created by its parent.NzWsemaphore_tracker: process died unexpectedly, relaunching. Some semaphores might leak.z;from multiprocessing.semaphore_tracker import main;main(%d)z-c)r r oswaitpidWNOHANGcloser warningswarnappendsysstderrfileno ExceptionpiperZget_executablerZ_args_from_interpreter_flagsZspawnv_passfds) r pidZstatusZ fds_to_passcmdrwZexeargsrrrr&s8        zSemaphoreTracker.ensure_runningcCs|jd|dS)z2Register name of semaphore with semaphore tracker.ZREGISTERN)_send)r namerrrrQszSemaphoreTracker.registercCs|jd|dS)z4Unregister name of semaphore with semaphore tracker.Z UNREGISTERN)r#)r r$rrrrUszSemaphoreTracker.unregistercCs@|jdj||jd}t|dkr.tdtj|j|}dS)Nz{0}:{1} asciiiz name too long)rformatencodelen ValueErrorrwriter )r rr$msgnbytesrrrr#Ys  zSemaphoreTracker._sendN) __name__ __module__ __qualname__rrrrrr#rrrrrs +rc-Cstjtjtjtjtjtjx6tjtjfD]&}y |jWq.tk rRYq.Xq.Wt }zt |d}x|D]}yJ|j j d\}}|dkr|j |n |dkr|j|n td|Wqrtk rytjtjWn YnXYqrXqrWWdQRXWd|rs   I__pycache__/reduction.cpython-36.opt-1.pyc000064400000017330147221272370014350 0ustar003 \ $@sddlmZmZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddddd gZ e j d kpeed oeed oeejd ZGdddejZejZd5dd Ze j d kre dddg7Z ddlZd6ddZddZddZddZGdddeZnHe dddg7Z ddlZe j dkZddZddZddZd dZd!dZd"d#Z Gd$d%d%Z!ee"e!j#e d&d'Z$ee"e%j&e$ee"e'j(e$d(d)Z)d*d+Z*eej+e)e j d krd,d-Z,d.d/Z-eeje,nd0d-Z,d1d/Z-eeje,Gd2d3d3ed4Z.dS)7)ABCMetaabstractmethodN)context send_handle recv_handleForkingPicklerregisterdumpwin32ZCMSG_LEN SCM_RIGHTSsendmsgcsJeZdZdZiZejZfddZe ddZ e d ddZ e j Z ZS) rz)Pickler subclass used by multiprocessing.cs*tj||jj|_|jj|jdS)N)super__init___copyreg_dispatch_tablecopydispatch_tableupdate_extra_reducers)selfargs) __class__!/usr/lib64/python3.6/reduction.pyr&s  zForkingPickler.__init__cCs||j|<dS)z&Register a reduce function for a type.N)r)clstypereducerrrr +szForkingPickler.registerNcCs tj}|||j||jS)N)ioBytesIOr getbuffer)robjprotocolZbufrrrdumps0szForkingPickler.dumps)N)__name__ __module__ __qualname____doc__rcopyregrrr classmethodr r"pickleloads __classcell__rr)rrr!s   cCst||j|dS)z3Replacement for pickle.dump() using ForkingPickler.N)rr )r filer!rrrr :s DupHandle duplicate steal_handleFcCs*|dkrtj}tjtj||d|tjS)zr?r@r0r5r6r2r1rAr7r8)rrErrrr=us  zDupHandle.detach)N)r#r$r%r&rr=rrrrr-ds DupFdsendfdsrecvfdsdarwincCsVtjd|}tt|dg}|j|gtjtj|fgtrR|jddkrRt ddS)z,Send an array of fds over an AF_UNIX socket.irAz%did not receive acknowledgement of fdN) arraybyteslenr socket SOL_SOCKETr ACKNOWLEDGEr< RuntimeError)sockZfdsmsgrrrrGs  c Cstjd}|j|}|jdtj|\}}}}| r>| r>tyxtrN|jdt|dkrjt dt||d\}} } |tj kr| tj krt| |jdkrt |j | t|SWnt tfk rYnXt ddS)z/Receive an array of fds over an AF_UNIX socket.rJrrLzreceived %d items of ancdatarzInvalid data receivedN)rMitemsizeZrecvmsgrPZ CMSG_SPACEEOFErrorrRr9rOrSrQr ValueErrorZ frombyteslist IndexError) rTsizeaZ bytes_sizerUZancdataflagsZaddrZ cmsg_levelZ cmsg_typeZ cmsg_datarrrrHs*          c Cs2tj|jtjtj}t||gWdQRXdS)z&Send a handle over a local connection.N)rPfromfdfilenoAF_UNIX SOCK_STREAMrG)r:r4r;srrrrsc Cs0tj|jtjtj}t|ddSQRXdS)z)Receive a handle over a local connection.rrN)rPr^r_r`rarH)r:rbrrrrscCsFtj}|dk r |j|j|Str:ddlm}|j|StddS)zReturn a wrapper for an fd.Nr)resource_sharerz&SCM_RIGHTS appears not to be available)rZget_spawning_popenrFZduplicate_for_childHAVE_SEND_HANDLErcrX)fdZ popen_objrcrrrrFs  cCs2|jdkrt|j|jjffSt|j|jjffSdS)N)__self__getattrr__func__r#)mrrr_reduce_methods rkc@seZdZddZdS)_CcCsdS)Nr)rrrrfsz_C.fN)r#r$r%rmrrrrrlsrlcCst|j|jffS)N)rh __objclass__r#)rjrrr_reduce_method_descriptorsrocCst|j|j|jpiffS)N)_rebuild_partialfuncrkeywords)prrr_reduce_partialsrtcCstj|f||S)N) functoolspartial)rqrrrrrrrpsrpcCsddlm}t||ffS)Nr) DupSocket)rcrw_rebuild_socket)rbrwrrr_reduce_sockets rycCs|jS)N)r=)ZdsrrrrxsrxcCs"t|j}t||j|j|jffS)N)rFr_rxfamilyrproto)rbdfrrrrys cCs|j}tj||||dS)N)r_)r=rP)r|rzrr{rfrrrrxsc@sdeZdZdZeZeZeZeZeZe j dkr8e Z e Z e Z n eZeZeZeZeZeZeZeZddZdS)AbstractReducerzAbstract base class for use in implementing a Reduction class suitable for use in replacing the standard reduction mechanism used in multiprocessing.r cGsNtttjttttjttttj ttt j t tt j tdS)N)r rrlrmrkrYappendroint__add__rurvrtrPry)rrrrrr s  zAbstractReducer.__init__N)r#r$r%r&rr r rrsysplatformr/r.r-rGrHrFrkrorpryrxrrrrrr}s& r}) metaclass)N)NF)/abcrrr'rurr>r)rPrrer__all__rhasattrrdZPicklerrr r r0r.r/rrobjectr-rMrRrGrHrFrkrlrrmrorYr~rrrtrprvryrxr}rrrr sb         #    __pycache__/resource_sharer.cpython-36.opt-1.pyc000064400000011764147221272370015554 0ustar003 \@sddlZddlZddlZddlZddlZddlmZddlmZddlm Z dgZ ej dkrxe dg7Z Gd dde Z ne d g7Z Gd d d e ZGd d d e ZeZejZdS)N)process) reduction)utilstopZwin32 DupSocketc@s eZdZdZddZddZdS)rzPicklable wrapper for a socket.cs(|jfdd}tj|j|_dS)Ncsj|}|j|dS)N)shareZ send_bytes)connpidr)new_sock'/usr/lib64/python3.6/resource_sharer.pysends z DupSocket.__init__..send)dup_resource_sharerregisterclose_id)selfZsockrr )r r __init__s zDupSocket.__init__c Cs*tj|j}|j}tj|SQRXdS)z1Get the socket. This should only be called once.N)rget_connectionrZ recv_bytessocketZ fromshare)rr rr r r detach$szDupSocket.detachN)__name__ __module__ __qualname____doc__rrr r r r rsDupFdc@s eZdZdZddZddZdS)rz-Wrapper for fd which can be used at any time.cs4tj|fdd}fdd}tj|||_dS)Ncstj||dS)N)rZ send_handle)r r )new_fdr r r1szDupFd.__init__..sendcstjdS)N)osrr )rr r r3szDupFd.__init__..close)rrrrr)rfdrrr )rr r/s   zDupFd.__init__c Cs"tj|j }tj|SQRXdS)z-Get the fd. This should only be called once.N)rrrrZ recv_handle)rr r r r r7sz DupFd.detachN)rrrrrrr r r r r-sc@sNeZdZdZddZddZeddZdd d Zd d Z d dZ ddZ dS)_ResourceSharerz-Manager for resouces using background thread.cCs@d|_i|_g|_tj|_d|_d|_d|_t j |t j dS)Nr) _key_cache _old_locks threadingLock_lock _listener_address_threadrZregister_after_forkr! _afterfork)rr r r r?s z_ResourceSharer.__init__c CsN|j>|jdkr|j|jd7_||f|j|j<|j|jfSQRXdS)z+Register resource, returning an identifier.Nr)r'r)_startr"r#)rrrr r r rIs  z_ResourceSharer.registercCs<ddlm}|\}}||tjjd}|j|tjf|S)z s       `__pycache__/context.cpython-36.pyc000064400000031432147221272370013100 0ustar003 \*@sddlZddlZddlZddlmZddlmZgZGdddeZGdddeZ Gd d d eZ Gd d d eZ Gd dde Z GdddejZGddde ZeddeeDe_ejdkrPGdddejZGdddejZGdddejZGddde ZGddde ZGd d!d!e Zeeed"Zeed#Zn8Gd$ddejZGd%dde Zd&eiZeed&Zd'd(ZejZd)d*Zd+d,Z d-d.Z!dS)/N)process) reductionc@s eZdZdS) ProcessErrorN)__name__ __module__ __qualname__r r /usr/lib64/python3.6/context.pyrsrc@s eZdZdS)BufferTooShortN)rrrr r r r r sr c@s eZdZdS) TimeoutErrorN)rrrr r r r r sr c@s eZdZdS)AuthenticationErrorN)rrrr r r r r sr c@sVeZdZeZeZeZeZeej Z eej Z ddZ ddZ dBddZ dd Zd d ZdCd dZdDddZdEddZddZdFddZdGddZdHddZddZd d fd fdd Zd!d"Zd#d$Zdd%d&d'Zdd%d(d)Zd*d+Zd,d-ZdId.d/Zd0d1Z d2d3Z!d4d5Z"dJd6d7Z#dKd9d:Z$dLd;d<Z%e&d=d>Z'e'j(d?d>Z'd@dAZ)d S)M BaseContextcCs"tj}|dkrtdn|SdS)z(Returns the number of CPUs in the systemNzcannot determine number of cpus)os cpu_countNotImplementedError)selfZnumr r r r(s zBaseContext.cpu_countcCs&ddlm}||jd}|j|S)zReturns a manager associated with a running server process The managers methods such as `Lock()`, `Condition()` and `Queue()` can be used to create shared objects. r) SyncManager)ctx)Zmanagersr get_contextstart)rrmr r r Manager0s zBaseContext.ManagerTcCsddlm}||S)z1Returns two connection object connected by a piper)Pipe) connectionr)rZduplexrr r r r;s zBaseContext.PipecCsddlm}||jdS)z#Returns a non-recursive lock objectr)Lock)r) synchronizerr)rrr r r r@s zBaseContext.LockcCsddlm}||jdS)zReturns a recursive lock objectr)RLock)r)rrr)rrr r r rEs zBaseContext.RLockNcCsddlm}|||jdS)zReturns a condition objectr) Condition)r)rrr)rlockrr r r rJs zBaseContext.ConditionrcCsddlm}|||jdS)zReturns a semaphore objectr) Semaphore)r)rr r)rvaluer r r r r Os zBaseContext.SemaphorecCsddlm}|||jdS)z"Returns a bounded semaphore objectr)BoundedSemaphore)r)rr"r)rr!r"r r r r"Ts zBaseContext.BoundedSemaphorecCsddlm}||jdS)zReturns an event objectr)Event)r)rr#r)rr#r r r r#Ys zBaseContext.EventcCs ddlm}|||||jdS)zReturns a barrier objectr)Barrier)r)rr$r)rZpartiesactionZtimeoutr$r r r r$^s zBaseContext.BarrierrcCsddlm}|||jdS)zReturns a queue objectr)Queue)r)queuesr&r)rmaxsizer&r r r r&cs zBaseContext.QueuecCsddlm}|||jdS)zReturns a queue objectr) JoinableQueue)r)r'r)r)rr(r)r r r r)hs zBaseContext.JoinableQueuecCsddlm}||jdS)zReturns a queue objectr) SimpleQueue)r)r'r*r)rr*r r r r*ms zBaseContext.SimpleQueuecCs"ddlm}||||||jdS)zReturns a process pool objectr)Pool)context)Zpoolr+r)rZ processesZ initializerZinitargsZmaxtasksperchildr+r r r r+rs  zBaseContext.PoolcGsddlm}||f|S)zReturns a shared objectr)RawValue) sharedctypesr-)rtypecode_or_typeargsr-r r r r-ys zBaseContext.RawValuecCsddlm}|||S)zReturns a shared arrayr)RawArray)r.r1)rr/size_or_initializerr1r r r r1~s zBaseContext.RawArray)rcGs&ddlm}||f|||jdS)z$Returns a synchronized shared objectr)Value)rr)r.r3r)rr/rr0r3r r r r3s  zBaseContext.ValuecCs ddlm}|||||jdS)z#Returns a synchronized shared arrayr)Array)rr)r.r4r)rr/r2rr4r r r r4s zBaseContext.ArraycCs,tjdkr(ttddr(ddlm}|dS)zCheck whether this is a fake forked process in a frozen executable. If so then run code specified by commandline and exit. win32frozenFr)freeze_supportN)sysplatformgetattrspawnr7)rr7r r r r7s zBaseContext.freeze_supportcCsddlm}|S)zZReturn package logger -- if it does not already exist then it is created. r) get_logger)utilr<)rr<r r r r<s zBaseContext.get_loggercCsddlm}||S)z8Turn on logging and add a handler which prints to stderrr) log_to_stderr)r=r>)rlevelr>r r r r>s zBaseContext.log_to_stderrcCsddlm}dS)zVInstall support for sending connections and sockets between processes r)rN)r)rrr r r allow_connection_picklingsz%BaseContext.allow_connection_picklingcCsddlm}||dS)zSets the path to a python.exe or pythonw.exe binary used to run child processes instead of sys.executable when using the 'spawn' start method. Useful for people embedding Python. r)set_executableN)r;rB)r executablerBr r r rBs zBaseContext.set_executablecCsddlm}||dS)zkSet list of module names to try to load in forkserver process. This is really just a hint. r)set_forkserver_preloadN) forkserverrD)rZ module_namesrDr r r rDs z"BaseContext.set_forkserver_preloadc CsF|dkr |Sy t|}Wn tk r8td|YnX|j|S)Nzcannot find context for %r)_concrete_contextsKeyError ValueError_check_available)rmethodrr r r rs zBaseContext.get_contextFcCs|jS)N)_name)r allow_noner r r get_start_methodszBaseContext.get_start_methodcCs tddS)Nz+cannot set start method of concrete context)rH)rrJforcer r r set_start_methodszBaseContext.set_start_methodcCs tjdS)z_Controls how objects will be reduced to a form that can be shared with other processes.r)globalsget)rr r r reducerszBaseContext.reducercCs|td<dS)Nr)rP)rrr r r rRscCsdS)Nr )rr r r rIszBaseContext._check_available)T)N)r)r)NN)r)r)N)N)F)F)*rrrrr r r staticmethodrZcurrent_processZactive_childrenrrrrrrr r"r#r$r&r)r*r+r-r1r3r4r7r<r>rArBrDrrMrOpropertyrRsetterrIr r r r rsJ              rc@seZdZdZeddZdS)ProcessNcCstjjj|S)N)_default_contextrrV_Popen) process_objr r r rXszProcess._Popen)rrr _start_methodrSrXr r r r rVsrVcsFeZdZeZddZd fdd ZdddZdd d Zd d ZZ S)DefaultContextcCs||_d|_dS)N)rW_actual_context)rr,r r r __init__szDefaultContext.__init__Ncs0|dkr |jdkr|j|_|jStj|SdS)N)r\rWsuperr)rrJ) __class__r r rs  zDefaultContext.get_contextFcCs>|jdk r| rtd|dkr.|r.d|_dS|j||_dS)Nzcontext has already been set)r\ RuntimeErrorr)rrJrNr r r rOs  zDefaultContext.set_start_methodcCs"|jdkr|rdS|j|_|jjS)N)r\rWrK)rrLr r r rMs  zDefaultContext.get_start_methodcCs,tjdkrdgStjr dddgSddgSdS)Nr5r;forkrE)r8r9rHAVE_SEND_HANDLE)rr r r get_all_start_methodss   z$DefaultContext.get_all_start_methods)N)F)F) rrrrVr]rrOrMrc __classcell__r r )r_r r[s   r[ccs|]}|ddkr|VqdS)r_Nr ).0xr r r srhr5c@seZdZdZeddZdS) ForkProcessracCsddlm}||S)Nr)Popen)Z popen_forkrj)rYrjr r r rXs zForkProcess._PopenN)rrrrZrSrXr r r r risric@seZdZdZeddZdS) SpawnProcessr;cCsddlm}||S)Nr)rj)Zpopen_spawn_posixrj)rYrjr r r rXs zSpawnProcess._PopenN)rrrrZrSrXr r r r rksrkc@seZdZdZeddZdS)ForkServerProcessrEcCsddlm}||S)Nr)rj)Zpopen_forkserverrj)rYrjr r r rX s zForkServerProcess._PopenN)rrrrZrSrXr r r r rlsrlc@seZdZdZeZdS) ForkContextraN)rrrrKrirVr r r r rm%srmc@seZdZdZeZdS) SpawnContextr;N)rrrrKrkrVr r r r rn)srnc@seZdZdZeZddZdS)ForkServerContextrEcCstjstddS)Nz%forkserver start method not available)rrbrH)rr r r rI0sz"ForkServerContext._check_availableN)rrrrKrlrVrIr r r r ro-sro)rar;rErac@seZdZdZeddZdS)rkr;cCsddlm}||S)Nr)rj)Zpopen_spawn_win32rj)rYrjr r r rX?s zSpawnProcess._PopenN)rrrrZrSrXr r r r rk=sc@seZdZdZeZdS)rnr;N)rrrrKrkrVr r r r rnDsr;cCst|t_dS)N)rFrWr\)rJr r r _force_start_methodQsrpcCs ttddS)Nspawning_popen)r:_tlsr r r r get_spawning_popenZsrscCs |t_dS)N)rrrq)popenr r r set_spawning_popen]srucCs tdkrtdt|jdS)NzF%s objects should only be shared between processes through inheritance)rsr`typer)objr r r assert_spawning`s rx)"rr8Z threadingr@rr__all__ Exceptionrr r r objectrZ BaseProcessrVr[listdirr9rirkrlrmrnrorFrWrpZlocalrrrsrurxr r r r sD  >'    __pycache__/__init__.cpython-36.opt-2.pyc000064400000000773147221272370014117 0ustar003 \@s\ddlZddlmZejddejjDejjZdZdZdej krXej dej d <dS) N)contextccs|]}|ttj|fVqdS)N)getattrr_default_context).0namer0/usr/lib64/python3.6/multiprocessing/__init__.py sr __main__Z __mp_main__) sysrglobalsupdater__all__ZSUBDEBUGZ SUBWARNINGmodulesrrrr s   __pycache__/process.cpython-36.pyc000064400000017675147221272370013107 0ustar003 \# @sdddgZddlZddlZddlZddlZddlmZyejjej Z Wne k rbdZ YnXddZ ddZ dd ZGd ddeZGd d d eZGd ddeZeaejdaea[iZxSsz'BaseProcess.__init__..)AssertionErrornext_process_counterr _identity_configcopyosgetpid _parent_pidr _targettuple_argsdict_kwargstype__name__join_namer _danglingadd)rgrouptargetnameargskwargsrcountrrr__init__Gs    zBaseProcess.__init__cCs|jr|j|j|jdS)zQ Method to be run in sub-process; can be overridden in sub-class N)r#r%r')rrrrrunXszBaseProcess.runcCst|jdkstd|jtjks(tdtjjd s>tdt|j ||_|jj |_ |` |` |`tj|dS)z% Start child process Nzcannot start a process twicez:can only start a process object created by current processrz3daemonic processes are not allowed to have children)r rr"r r!rrgetr rsentinel _sentinelr#r%r'r r-)rrrrstart_s   zBaseProcess.startcCs|jjdS)zT Terminate process; sends SIGTERM signal or uses TerminateProcess() N)r terminate)rrrrr:pszBaseProcess.terminatecCsJ|jtjkstd|jdk s(td|jj|}|dk rFtj|dS)z5 Wait until child process terminates zcan only join a child processNzcan only join a started process)r"r r!rr waitr r)rZtimeoutresrrrr*vs  zBaseProcess.joincCsX|tkr dS|jtjks"td|jdkr0dS|jj}|dkrFdStj|dSdS)z1 Return whether process is alive Tzcan only test a child processNF) rr"r r!rr r r r)r returncoderrris_alives   zBaseProcess.is_alivecCs|jS)N)r+)rrrrr0szBaseProcess.namecCst|tstd||_dS)Nzname must be a string) isinstancerrr+)rr0rrrr0scCs|jjddS)z4 Return whether process is a daemon rF)rr6)rrrrrszBaseProcess.daemoncCs |jdkstd||jd<dS)z1 Set whether process is a daemon Nzprocess has already startedr)r rr)rZdaemonicrrrrscCs |jdS)Nauthkey)r)rrrrr@szBaseProcess.authkeycCst||jd<dS)z2 Set authorization key of process r@N)AuthenticationStringr)rr@rrrr@scCs|jdkr|jS|jjS)zM Return exit code of process or `None` if it has yet to stop N)r r )rrrrexitcodes zBaseProcess.exitcodecCs"|tkrtjS|jo|jjSdS)zU Return identifier (PID) of process or `None` if it has yet to start N)rr r!r pid)rrrridentszBaseProcess.identc Cs(y|jStk r"tdYnXdS)z{ Return a file descriptor (Unix) or handle (Windows) suitable for waiting for process termination. zprocess not startedN)r8AttributeError ValueError)rrrrr7szBaseProcess.sentinelcCs|tkrd}n>|jtjkr"d}n*|jdkr2d}n|jjdk rH|j}nd}t|tkrv|dkrfd}ndt j ||}dt|j |j ||j rdpd fS) NZstartedunknowninitialrZstoppedz stopped[%s]z<%s(%s, %s%s)>z daemon)rr"r r!r r rBr(int_exitcode_to_namer6r)r+r)rZstatusrrr__repr__s  zBaseProcess.__repr__c CsJddlm}m}zy||jdk r,|j|jtjdata |j t }|a z|j j |jWd~X|jdz|jd}Wd|jXWntk r}zL|jsd}n:t|jdtr|jd}ntjjt|jddd}WYdd}~Xn2d}ddl}tjjd|j|jYnXWd|jd||jX|S)N)utilcontextz child process calling self.run()r z Process %s: z process exiting with exitcode %d)rIrNrOZ _start_methodZ_force_start_method itertoolsr3rsetr Z _close_stdinrZ_finalizer_registryclearZ_run_after_forkersinfor5Z_exit_function SystemExitr1r?rJsysstderrwriter tracebackr0 print_excZ_flush_std_streams)rrNrOZ old_processrBerYrrr _bootstrapsB        zBaseProcess._bootstrap)N)r) __module__ __qualname____doc__rr4r5r9r:r*r>propertyr0setterrr@rBrDrCr7rLr\rrrrr>s*       c@seZdZddZdS)rAcCs,ddlm}|dkrtdtt|ffS)NrM)get_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)rOrb TypeErrorrAbytes)rrbrrr __reduce__s   zAuthenticationString.__reduce__N)r)r]r^rerrrrrAsrAc@seZdZddZdS) _MainProcesscCs2f|_d|_d|_d|_ttjddd|_dS)NZ MainProcess z/mp)r@Z semprefix)rr+r"r rAr urandomr)rrrrr4-s  z_MainProcess.__init__N)r)r]r^r4rrrrrf+srfrMZSIG_) __all__r rVsignalrQ _weakrefsetrpathabspathgetcwdZ ORIGINAL_DIROSErrorrrr objectrrdrArfrr3rrRr rKr __dict__itemsr0Zsignumr,rrrr s2     ` __pycache__/process.cpython-36.opt-1.pyc000064400000016467147221272370014044 0ustar003 \# @sdddgZddlZddlZddlZddlZddlmZyejjej Z Wne k rbdZ YnXddZ ddZ dd ZGd ddeZGd d d eZGd ddeZeaejdaea[iZxSsz'BaseProcess.__init__..)next_process_counterr _identity_configcopyosgetpid _parent_pidr _targettuple_argsdict_kwargstype__name__join_namer _danglingadd)rgrouptargetnameargskwargsrcountrrr__init__Gs    zBaseProcess.__init__cCs|jr|j|j|jdS)zQ Method to be run in sub-process; can be overridden in sub-class N)r"r$r&)rrrrrunXszBaseProcess.runcCs6t|j||_|jj|_|`|`|`tj |dS)z% Start child process N) r rr sentinel _sentinelr"r$r&r r,)rrrrstart_s    zBaseProcess.startcCs|jjdS)zT Terminate process; sends SIGTERM signal or uses TerminateProcess() N)r terminate)rrrrr8pszBaseProcess.terminatecCs"|jj|}|dk rtj|dS)z5 Wait until child process terminates N)r waitr r)rZtimeoutresrrrr)vs zBaseProcess.joincCsB|tkr dS|jdkrdS|jj}|dkr0dStj|dSdS)z1 Return whether process is alive TNF)rr r r r)r returncoderrris_alives   zBaseProcess.is_alivecCs|jS)N)r*)rrrrr/szBaseProcess.namecCs ||_dS)N)r*)rr/rrrr/scCs|jjddS)z4 Return whether process is a daemon rF)rget)rrrrrszBaseProcess.daemoncCs||jd<dS)z1 Set whether process is a daemon rN)r)rZdaemonicrrrrscCs |jdS)Nauthkey)r)rrrrr>szBaseProcess.authkeycCst||jd<dS)z2 Set authorization key of process r>N)AuthenticationStringr)rr>rrrr>scCs|jdkr|jS|jjS)zM Return exit code of process or `None` if it has yet to stop N)r r )rrrrexitcodes zBaseProcess.exitcodecCs"|tkrtjS|jo|jjSdS)zU Return identifier (PID) of process or `None` if it has yet to start N)rrr r pid)rrrridentszBaseProcess.identc Cs(y|jStk r"tdYnXdS)z{ Return a file descriptor (Unix) or handle (Windows) suitable for waiting for process termination. zprocess not startedN)r6AttributeError ValueError)rrrrr5szBaseProcess.sentinelcCs|tkrd}n>|jtjkr"d}n*|jdkr2d}n|jjdk rH|j}nd}t|tkrv|dkrfd}ndt j ||}dt|j |j ||j rdpd fS) NZstartedunknowninitialrZstoppedz stopped[%s]z<%s(%s, %s%s)>z daemon)rr!rr r r r@r'int_exitcode_to_namer=r(r*r)rZstatusrrr__repr__s  zBaseProcess.__repr__c CsJddlm}m}zy||jdk r,|j|jtjdata |j t }|a z|j j |jWd~X|jdz|jd}Wd|jXWntk r}zL|jsd}n:t|jdtr|jd}ntjjt|jddd}WYdd}~Xn2d}ddl}tjjd|j|jYnXWd|jd||jX|S)N)utilcontextz child process calling self.run()r z Process %s: z process exiting with exitcode %d)rGrLrMZ _start_methodZ_force_start_method itertoolsr2rsetr Z _close_stdinrZ_finalizer_registryclearZ_run_after_forkersinfor4Z_exit_function SystemExitr0 isinstancerHsysstderrwriter tracebackr/ print_excZ_flush_std_streams)rrLrMZ old_processr@erXrrr _bootstrapsB        zBaseProcess._bootstrap)N)r( __module__ __qualname____doc__rr3r4r7r8r)r<propertyr/setterrr>r@rBrAr5rJr[rrrrr>s*       c@seZdZddZdS)r?cCs,ddlm}|dkrtdtt|ffS)NrK)get_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)rMra TypeErrorr?bytes)rrarrr __reduce__s   zAuthenticationString.__reduce__N)r(r\r]rdrrrrr?sr?c@seZdZddZdS) _MainProcesscCs2f|_d|_d|_d|_ttjddd|_dS)NZ MainProcess z/mp)r>Z semprefix)rr*r!r r?rurandomr)rrrrr3-s  z_MainProcess.__init__N)r(r\r]r3rrrrre+srerKZSIG_) __all__rrUsignalrO _weakrefsetrpathabspathgetcwdZ ORIGINAL_DIROSErrorrrr objectrrcr?rerr2rrPr rIr __dict__itemsr/Zsignumr+rrrr s2     ` __pycache__/queues.cpython-36.opt-2.pyc000064400000021242147221272370013661 0ustar003 \ *@sdddgZddlZddlZddlZddlZddlZddlZddlZddlm Z m Z ddl Z ddl m Z ddl mZejjZdd lmZmZmZmZmZGd ddeZeZGd ddeZGd ddeZdS) Queue SimpleQueue JoinableQueueN)EmptyFull) connection)context)debuginfoFinalizeregister_after_fork is_exitingc@seZdZd(ddZddZddZdd Zd)d d Zd*ddZddZ ddZ ddZ ddZ ddZ ddZddZddZd d!Zed"d#Zed$d%Zed&d'Zd S)+rrcCs|dkrddlm}||_tjdd\|_|_|j|_t j |_ t j dkrTd|_n |j|_|j||_d|_|jt j dkrt|tjdS)Nrr) SEM_VALUE_MAXF)duplexwin32)Z synchronizer_maxsizerPipe_reader_writerLock_rlockosgetpid_opidsysplatform_wlockZBoundedSemaphore_sem _ignore_epipe _after_forkr r)selfmaxsizectxr$./usr/lib64/python3.6/multiprocessing/queues.py__init__$s       zQueue.__init__cCs.tj||j|j|j|j|j|j|j|j fS)N) r assert_spawningrrrrrrrr)r!r$r$r% __getstate__9s zQueue.__getstate__c Cs0|\|_|_|_|_|_|_|_|_|jdS)N) rrrrrrrrr )r!stater$r$r% __setstate__>s$zQueue.__setstate__cCsbtdtjtj|_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 CsP|jj||st|j.|jdkr,|j|jj||jjWdQRXdS)N) racquirerr-r1 _start_threadr0appendnotify)r!objblocktimeoutr$r$r%putPs  z Queue.putc Cs|r2|dkr2|j|j}WdQRX|jjnr|rBtj|}|jj||sTtzB|rv|tj}|j|stn |jst|j}|jjWd|jjXt j |S)N) rr9rreleasetimeZ monotonicr<rr;_ForkingPicklerloads)r!rArBresZdeadliner$r$r%get[s&      z Queue.getcCs|j|jjjS)N)rr_semlockZ _get_value)r!r$r$r%qsizessz Queue.qsizecCs |j S)N)r;)r!r$r$r%emptywsz Queue.emptycCs |jjjS)N)rrJ_is_zero)r!r$r$r%fullzsz Queue.fullcCs |jdS)NF)rI)r!r$r$r% get_nowait}szQueue.get_nowaitcCs |j|dS)NF)rC)r!r@r$r$r% put_nowaitszQueue.put_nowaitc Cs2d|_z|jjWd|j}|r,d|_|XdS)NT)r4rcloser5)r!rQr$r$r%rQsz Queue.closecCstd|jr|jdS)NzQueue.join_thread())r r2)r!r$r$r% join_threadszQueue.join_threadc Cs6tdd|_y|jjWntk r0YnXdS)NzQueue.cancel_join_thread()T)r r3r2ZcancelAttributeError)r!r$r$r%cancel_join_threads zQueue.cancel_join_threadcCstd|jjtjtj|j|j|j|j |j j |j fdd|_ d|j _td|j jtd|jst|j tjtj|j gd d|_t|tj|j|jgd d|_dS) NzQueue._start_thread()ZQueueFeederThread)targetargsnameTzdoing self._thread.start()z... done self._thread.start())Z exitpriority )r r0clearr+ZThreadr_feedr-r7rrrQrr1Zdaemonstartr3r _finalize_joinweakrefrefr2_finalize_closer5)r!r$r$r%r=s(       zQueue._start_threadcCs4td|}|dk r(|jtdntddS)Nzjoining queue threadz... queue thread joinedz... queue thread already dead)r join)ZtwrZthreadr$r$r%r^s  zQueue._finalize_joinc Cs.td||jt|jWdQRXdS)Nztelling queue thread to quit)r r> _sentinelr?)buffernotemptyr$r$r%ras zQueue._finalize_closecCsPtd|j}|j}|j}|j} t} tjdkr<|j} |j} nd} xy|z|sX|Wd|Xybx\| } | | krtd|dStj | } | dkr|| qh| z || Wd| XqhWWnt k rYnXWqDt k rF}zJ|rt |ddt jkrdStr&td|dSddl}|jWYdd}~XqDXqDWdS)Nz$starting thread to feed data to piperz%feeder thread got sentinel -- exitingerrnorzerror in queue thread: %s)r r<rDwaitpopleftrcrrrFdumps IndexError ExceptiongetattrrfZEPIPErr traceback print_exc)rdrer6Z writelockrQZ ignore_epipeZnacquireZnreleaseZnwaitZbpopleftsentinelZwacquireZwreleaser@ermr$r$r%r\sR       z Queue._feed)r)TN)TN)__name__ __module__ __qualname__r&r(r*r rCrIrKrLrNrOrPrQrRrTr= staticmethodr^rar\r$r$r$r%r"s$    c@s@eZdZdddZddZddZdd d Zd d ZddZd S)rrcCs*tj|||d|jd|_|j|_dS)N)r#r)rr&Z Semaphore_unfinished_tasksr,_cond)r!r"r#r$r$r%r&s zJoinableQueue.__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__TNcCsl|jj||st|jJ|j8|jdkr4|j|jj||j j |jj WdQRXWdQRXdS)N) rr<rr-rvr1r=r0r>rurDr?)r!r@rArBr$r$r%rCs   zJoinableQueue.putc Cs@|j0|jjdstd|jjjr2|jjWdQRXdS)NFz!task_done() called too many times)rvrur< ValueErrorrJrMZ notify_all)r!r$r$r% task_done's   zJoinableQueue.task_donec Cs,|j|jjjs|jjWdQRXdS)N)rvrurJrMrg)r!r$r$r%rb.s zJoinableQueue.join)r)TN) rqrrrsr&r(r*rCrzrbr$r$r$r%r s   c@s<eZdZddZddZddZddZd d Zd d Zd S)rcCsHtjdd\|_|_|j|_|jj|_tj dkr:d|_ n |j|_ dS)NF)rr) rrrrrrr:r;rrr)r!r#r$r$r%r&9s    zSimpleQueue.__init__cCs |j S)N)r;)r!r$r$r%rLBszSimpleQueue.emptycCstj||j|j|j|jfS)N)r r'rrrr)r!r$r$r%r(Es zSimpleQueue.__getstate__cCs"|\|_|_|_|_|jj|_dS)N)rrrrr:r;)r!r)r$r$r%r*IszSimpleQueue.__setstate__c Cs&|j|jj}WdQRXtj|S)N)rrr8rFrG)r!rHr$r$r%rIMszSimpleQueue.getc CsDtj|}|jdkr"|jj|n|j|jj|WdQRXdS)N)rFrirrr6)r!r@r$r$r%rCSs   zSimpleQueue.putN) rqrrrsr&rLr(r*rIrCr$r$r$r%r7s  )__all__rrr+r.rEr_rfZqueuerrZ_multiprocessingrr Z reductionZForkingPicklerrFutilr r r r robjectrrcrrr$r$r$r% s$   b *__pycache__/context.cpython-36.opt-2.pyc000064400000026523147221272370014045 0ustar003 \*@sddlZddlZddlZddlmZddlmZgZGdddeZGdddeZ Gd d d eZ Gd d d eZ Gd dde Z GdddejZGddde ZeddeeDe_ejdkrPGdddejZGdddejZGdddejZGddde ZGddde ZGd d!d!e Zeeed"Zeed#Zn8Gd$ddejZGd%dde Zd&eiZeed&Zd'd(ZejZd)d*Zd+d,Z d-d.Z!dS)/N)process) reductionc@s eZdZdS) ProcessErrorN)__name__ __module__ __qualname__r r //usr/lib64/python3.6/multiprocessing/context.pyrsrc@s eZdZdS)BufferTooShortN)rrrr r r r r sr c@s eZdZdS) TimeoutErrorN)rrrr r r r r sr c@s eZdZdS)AuthenticationErrorN)rrrr r r r r sr c@sVeZdZeZeZeZeZeej Z eej Z ddZ ddZ dBddZ dd Zd d ZdCd dZdDddZdEddZddZdFddZdGddZdHddZddZd d fd fdd Zd!d"Zd#d$Zdd%d&d'Zdd%d(d)Zd*d+Zd,d-ZdId.d/Zd0d1Z d2d3Z!d4d5Z"dJd6d7Z#dKd9d:Z$dLd;d<Z%e&d=d>Z'e'j(d?d>Z'd@dAZ)d S)M BaseContextcCs"tj}|dkrtdn|SdS)Nzcannot determine number of cpus)os cpu_countNotImplementedError)selfZnumr r r r(s zBaseContext.cpu_countcCs&ddlm}||jd}|j|S)Nr) SyncManager)ctx)Zmanagersr get_contextstart)rrmr r r Manager0s zBaseContext.ManagerTcCsddlm}||S)Nr)Pipe) connectionr)rZduplexrr r r r;s zBaseContext.PipecCsddlm}||jdS)Nr)Lock)r) synchronizerr)rrr r r r@s zBaseContext.LockcCsddlm}||jdS)Nr)RLock)r)rrr)rrr r r rEs zBaseContext.RLockNcCsddlm}|||jdS)Nr) Condition)r)rrr)rlockrr r r rJs zBaseContext.ConditionrcCsddlm}|||jdS)Nr) Semaphore)r)rr r)rvaluer r r r r Os zBaseContext.SemaphorecCsddlm}|||jdS)Nr)BoundedSemaphore)r)rr"r)rr!r"r r r r"Ts zBaseContext.BoundedSemaphorecCsddlm}||jdS)Nr)Event)r)rr#r)rr#r r r r#Ys zBaseContext.EventcCs ddlm}|||||jdS)Nr)Barrier)r)rr$r)rZpartiesactionZtimeoutr$r r r r$^s zBaseContext.BarrierrcCsddlm}|||jdS)Nr)Queue)r)queuesr&r)rmaxsizer&r r r r&cs zBaseContext.QueuecCsddlm}|||jdS)Nr) JoinableQueue)r)r'r)r)rr(r)r r r r)hs zBaseContext.JoinableQueuecCsddlm}||jdS)Nr) SimpleQueue)r)r'r*r)rr*r r r r*ms zBaseContext.SimpleQueuecCs"ddlm}||||||jdS)Nr)Pool)context)Zpoolr+r)rZ processesZ initializerZinitargsZmaxtasksperchildr+r r r r+rs  zBaseContext.PoolcGsddlm}||f|S)Nr)RawValue) sharedctypesr-)rtypecode_or_typeargsr-r r r r-ys zBaseContext.RawValuecCsddlm}|||S)Nr)RawArray)r.r1)rr/size_or_initializerr1r r r r1~s zBaseContext.RawArray)rcGs&ddlm}||f|||jdS)Nr)Value)rr)r.r3r)rr/rr0r3r r r r3s  zBaseContext.ValuecCs ddlm}|||||jdS)Nr)Array)rr)r.r4r)rr/r2rr4r r r r4s zBaseContext.ArraycCs,tjdkr(ttddr(ddlm}|dS)Nwin32frozenFr)freeze_support)sysplatformgetattrspawnr7)rr7r r r r7s zBaseContext.freeze_supportcCsddlm}|S)Nr) get_logger)utilr<)rr<r r r r<s zBaseContext.get_loggercCsddlm}||S)Nr) log_to_stderr)r=r>)rlevelr>r r r r>s zBaseContext.log_to_stderrcCsddlm}dS)Nr)r)r)rrr r r allow_connection_picklingsz%BaseContext.allow_connection_picklingcCsddlm}||dS)Nr)set_executable)r;rB)r executablerBr r r rBs zBaseContext.set_executablecCsddlm}||dS)Nr)set_forkserver_preload) forkserverrD)rZ module_namesrDr r r rDs z"BaseContext.set_forkserver_preloadc CsF|dkr |Sy t|}Wn tk r8td|YnX|j|S)Nzcannot find context for %r)_concrete_contextsKeyError ValueError_check_available)rmethodrr r r rs zBaseContext.get_contextFcCs|jS)N)_name)r allow_noner r r get_start_methodszBaseContext.get_start_methodcCs tddS)Nz+cannot set start method of concrete context)rH)rrJforcer r r set_start_methodszBaseContext.set_start_methodcCs tjdS)Nr)globalsget)rr r r reducerszBaseContext.reducercCs|td<dS)Nr)rP)rrr r r rRscCsdS)Nr )rr r r rIszBaseContext._check_available)T)N)r)r)NN)r)r)N)N)F)F)*rrrrr r r staticmethodrZcurrent_processZactive_childrenrrrrrrr r"r#r$r&r)r*r+r-r1r3r4r7r<r>rArBrDrrMrOpropertyrRsetterrIr r r r rsJ              rc@seZdZdZeddZdS)ProcessNcCstjjj|S)N)_default_contextrrV_Popen) process_objr r r rXszProcess._Popen)rrr _start_methodrSrXr r r r rVsrVcsFeZdZeZddZd fdd ZdddZdd d Zd d ZZ S)DefaultContextcCs||_d|_dS)N)rW_actual_context)rr,r r r __init__szDefaultContext.__init__Ncs0|dkr |jdkr|j|_|jStj|SdS)N)r\rWsuperr)rrJ) __class__r r rs  zDefaultContext.get_contextFcCs>|jdk r| rtd|dkr.|r.d|_dS|j||_dS)Nzcontext has already been set)r\ RuntimeErrorr)rrJrNr r r rOs  zDefaultContext.set_start_methodcCs"|jdkr|rdS|j|_|jjS)N)r\rWrK)rrLr r r rMs  zDefaultContext.get_start_methodcCs,tjdkrdgStjr dddgSddgSdS)Nr5r;forkrE)r8r9rHAVE_SEND_HANDLE)rr r r get_all_start_methodss   z$DefaultContext.get_all_start_methods)N)F)F) rrrrVr]rrOrMrc __classcell__r r )r_r r[s   r[ccs|]}|ddkr|VqdS)r_Nr ).0xr r r srhr5c@seZdZdZeddZdS) ForkProcessracCsddlm}||S)Nr)Popen)Z popen_forkrj)rYrjr r r rXs zForkProcess._PopenN)rrrrZrSrXr r r r risric@seZdZdZeddZdS) SpawnProcessr;cCsddlm}||S)Nr)rj)Zpopen_spawn_posixrj)rYrjr r r rXs zSpawnProcess._PopenN)rrrrZrSrXr r r r rksrkc@seZdZdZeddZdS)ForkServerProcessrEcCsddlm}||S)Nr)rj)Zpopen_forkserverrj)rYrjr r r rX s zForkServerProcess._PopenN)rrrrZrSrXr r r r rlsrlc@seZdZdZeZdS) ForkContextraN)rrrrKrirVr r r r rm%srmc@seZdZdZeZdS) SpawnContextr;N)rrrrKrkrVr r r r rn)srnc@seZdZdZeZddZdS)ForkServerContextrEcCstjstddS)Nz%forkserver start method not available)rrbrH)rr r r rI0sz"ForkServerContext._check_availableN)rrrrKrlrVrIr r r r ro-sro)rar;rErac@seZdZdZeddZdS)rkr;cCsddlm}||S)Nr)rj)Zpopen_spawn_win32rj)rYrjr r r rX?s zSpawnProcess._PopenN)rrrrZrSrXr r r r rk=sc@seZdZdZeZdS)rnr;N)rrrrKrkrVr r r r rnDsr;cCst|t_dS)N)rFrWr\)rJr r r _force_start_methodQsrpcCs ttddS)Nspawning_popen)r:_tlsr r r r get_spawning_popenZsrscCs |t_dS)N)rrrq)popenr r r set_spawning_popen]srucCs tdkrtdt|jdS)NzF%s objects should only be shared between processes through inheritance)rsr`typer)objr r r assert_spawning`s rx)"rr8Z threadingr@rr__all__ Exceptionrr r r objectrZ BaseProcessrVr[listdirr9rirkrlrmrnrorFrWrpZlocalrrrsrurxr r r r sD  >'    __pycache__/popen_fork.cpython-36.opt-2.pyc000064400000004051147221272370014513 0ustar003 \ @s>ddlZddlZddlZddlmZdgZGdddeZdS)N)utilPopenc@sHeZdZdZddZddZejfddZdd d Z d d Z d dZ dS)rforkcCstjd|_|j|dS)N)rZ_flush_std_streams returncode_launch)self process_objr 2/usr/lib64/python3.6/multiprocessing/popen_fork.py__init__szPopen.__init__cCs|S)Nr )rfdr r r duplicate_for_childszPopen.duplicate_for_childcCs|jdkrzx>ytj|j|\}}Wn tk rB}zdSd}~Xq XPq W||jkrztj|rntj| |_n tj||_|jS)N)roswaitpidpidOSError WIFSIGNALEDWTERMSIG WEXITSTATUS)rflagrstser r r polls    z Popen.pollNcCsN|jdkrH|dk r0ddlm}||jg|s0dS|j|dkrBtjndS|jS)Nr)waitg)rZmultiprocessing.connectionrsentinelrrWNOHANG)rtimeoutrr r r r+s  z Popen.waitc Cs\|jdkrXytj|jtjWn8tk r2Yn&tk rV|jdddkrRYnXdS)Ng?)r) rrkillrsignalSIGTERMProcessLookupErrorrr)rr r r terminate5s zPopen.terminatec Csd}tj\}}tj|_|jdkrdz0tj|dtjkrJddl}|j|j }Wdtj |Xn"tj|t j |tj|f||_ dS)Nrrrandom)rpiperrclosesysmodulesr#Zseed _bootstrap_exitrZFinalizer)rr codeZparent_rZchild_wr#r r r r?s       z Popen._launch)N) __name__ __module__ __qualname__methodr rrrrrr"rr r r r r s  )rr&rr__all__objectrr r r r s  __pycache__/pool.cpython-36.pyc000064400000050507147221272370012371 0ustar003 \e@s8ddgZddlZddlZddlZddlZddlZddlZddlZddlm Z ddlm Z m Z dZ dZ dZejZdd Zd d ZGd d d eZGdddZddZGdddeZdfddfddZddZGdddeZGdddeZeZGdddeZGdddeZGd d!d!eZ Gd"ddeZ!dS)#Pool ThreadPoolN)util) get_context TimeoutErrorcCs tt|S)N)listmap)argsr /usr/lib64/python3.6/pool.pymapstar+srcCsttj|d|dS)Nrr)r itertoolsstarmap)r r r r starmapstar.src@seZdZddZddZdS)RemoteTracebackcCs ||_dS)N)tb)selfrr r r __init__6szRemoteTraceback.__init__cCs|jS)N)r)rr r r __str__8szRemoteTraceback.__str__N)__name__ __module__ __qualname__rrr r r r r5src@seZdZddZddZdS)ExceptionWithTracebackcCs0tjt|||}dj|}||_d||_dS)Nz """ %s""") tracebackformat_exceptiontypejoinexcr)rr rr r r r<s zExceptionWithTraceback.__init__cCst|j|jffS)N) rebuild_excr r)rr r r __reduce__Asz!ExceptionWithTraceback.__reduce__N)rrrrr"r r r r r;srcCst||_|S)N)r __cause__)r rr r r r!Ds r!cs0eZdZdZfddZddZddZZS)MaybeEncodingErrorzVWraps possible unpickleable errors, so they can be safely sent through the socket.cs.t||_t||_tt|j|j|jdS)N)reprr valuesuperr$r)rr r&) __class__r r rPs  zMaybeEncodingError.__init__cCsd|j|jfS)Nz(Error sending result: '%s'. Reason: '%s')r&r )rr r r rUszMaybeEncodingError.__str__cCsd|jj|fS)Nz<%s: %s>)r(r)rr r r __repr__YszMaybeEncodingError.__repr__)rrr__doc__rrr) __classcell__r r )r(r r$Ls r$Fc'Cs|dks t|tkr|dks t|j}|j}t|drJ|jj|jj|dk rZ||d}xL|dksx|ot||kry |} Wn$t t fk rt j dPYnX| dkrt j dP| \} } } } }yd| | |f}WnFt k r"}z(|o| tk r t||j}d|f}WYdd}~XnXy|| | |fWnRt k r}z4t||d}t j d||| | d|ffWYdd}~XnXd} } }} } }|d7}qbWt j d |dS) Nr_writerz)worker got EOFError or OSError -- exitingzworker got sentinel -- exitingTFrz0Possible encoding error while sending result: %szworker exiting after %d tasks)rintAssertionErrorputgethasattrr,close_readerEOFErrorOSErrorrdebug Exception_helper_reraises_exceptionr __traceback__r$)inqueueoutqueue initializerinitargsZmaxtasksZwrap_exceptionr/r0Z completedtaskjobifuncr kwdsresultewrappedr r r worker]sF        $ rFcCs|dS)z@Pickle-able helper function for use by _guarded_task_generation.Nr )Zexr r r r8sr8c@s6eZdZdZdZddZddfddfddZdd Zd d Zd d Z ddZ fifddZ d=ddZ d>ddZ d?ddZddZd@ddZdAddZfiddfdd ZdBd!d"ZdCd#d$Zed%d&Zed'd(Zed)d*Zed+d,Zd-d.Zd/d0Zd1d2Zd3d4Zed5d6Zed7d8Z d9d:Z!d;d<Z"dS)DrzS Class which supports an async version of applying functions to arguments. TcOs|jj||S)N)_ctxProcess)rr rBr r r rHsz Pool.ProcessNc Csn|pt|_|jtj|_i|_t|_||_ ||_ ||_ |dkrPt j pNd}|dkr`td|dk rzt| rztd||_g|_|jtjtj|fd|_d|j_t|j_|jjtjtj|j|j|j|j|jfd|_d|j_t|j_|jjtjtj|j|j |jfd|_!d|j!_t|j!_|j!jt"j#||j$|j|j%|j|j|j|j|j!|jfdd|_&dS)Nrz&Number of processes must be at least 1zinitializer must be a callable)targetr T)r Z exitpriority)'rrG _setup_queuesqueueQueue _taskqueue_cacheRUN_state_maxtasksperchild _initializer _initargsos cpu_count ValueErrorcallable TypeError _processes_pool_repopulate_pool threadingZThreadr_handle_workers_worker_handlerdaemonstart _handle_tasks _quick_put _outqueue _task_handler_handle_results _quick_get_result_handlerrZFinalize_terminate_pool_inqueue _terminate)r processesr<r=Zmaxtasksperchildcontextr r r rsT         z Pool.__init__cCsZd}xPttt|jD]:}|j|}|jdk rtjd||jd}|j|=qW|S)zCleanup after any worker processes which have exited due to reaching their specified lifetime. Returns True if any workers were cleaned up. FNzcleaning up worker %dT)reversedrangelenr[exitcoderr6r)rZcleanedr@rFr r r _join_exited_workerss   zPool._join_exited_workersc Cs|xvt|jt|jD]^}|jt|j|j|j|j |j |j fd}|jj ||j jdd|_ d|_|jtjdqWdS)zBring the number of pool processes up to the specified number, for use after reaping workers which have exited. )rIr rHZ PoolWorkerTz added workerN)rorZrpr[rHrFrjrdrSrTrR_wrap_exceptionappendnamereplacer`rarr6)rr@wr r r r\s  zPool._repopulate_poolcCs|jr|jdS)zEClean up any exited workers and start replacements for them. N)rrr\)rr r r _maintain_poolszPool._maintain_poolcCs4|jj|_|jj|_|jjj|_|jjj|_ dS)N) rGZ SimpleQueuerjrdr,sendrcr3recvrg)rr r r rKs   zPool._setup_queuescCs |jtkst|j|||jS)z6 Equivalent of `func(*args, **kwds)`. )rQrPr. apply_asyncr0)rrAr rBr r r applysz Pool.applycCs|j||t|jS)zx Apply `func` to each element in `iterable`, collecting the results in a list that is returned. ) _map_asyncrr0)rrAiterable chunksizer r r r szPool.mapcCs|j||t|jS)z Like `map()` method but the elements of the `iterable` are expected to be iterables as well and will be unpacked as arguments. Hence `func` and (a, b) becomes func(a, b). )r}rr0)rrAr~rr r r r sz Pool.starmapcCs|j||t|||S)z= Asynchronous version of `starmap()` method. )r}r)rrAr~rcallbackerror_callbackr r r starmap_asyncs zPool.starmap_asyncccsny0d}x&t|D]\}}||||fifVqWWn8tk rh}z||dt|fifVWYdd}~XnXdS)zProvides a generator of tasks for imap and imap_unordered with appropriate handling for iterables which throw exceptions during iteration.rN) enumerater7r8)rZ result_jobrAr~r@xrDr r r _guarded_task_generations zPool._guarded_task_generationrcCs|jtkrtd|dkrFt|j}|jj|j|j|||j f|S|dksRt t j |||}t|j}|jj|j|jt ||j fdd|DSdS)zP Equivalent of `map()` -- can be MUCH slower than `Pool.map()`. zPool not runningrcss|]}|D] }|Vq qdS)Nr ).0chunkitemr r r @szPool.imap..N)rQrPrW IMapIteratorrOrNr/r_job _set_lengthr.r _get_tasksr)rrAr~rrC task_batchesr r r imap's"      z Pool.imapcCs|jtkrtd|dkrFt|j}|jj|j|j|||j f|S|dksRt t j |||}t|j}|jj|j|jt ||j fdd|DSdS)zL Like `imap()` method but ordering of results is arbitrary. zPool not runningrcss|]}|D] }|Vq qdS)Nr )rrrr r r r[sz&Pool.imap_unordered..N)rQrPrWIMapUnorderedIteratorrOrNr/rrrr.rrr)rrAr~rrCrr r r imap_unorderedBs"      zPool.imap_unorderedcCsB|jtkrtdt|j||}|jj|jd|||fgdf|S)z; Asynchronous version of `apply()` method. zPool not runningrN)rQrPrW ApplyResultrOrNr/r)rrAr rBrrrCr r r r{]s  zPool.apply_asynccCs|j||t|||S)z9 Asynchronous version of `map()` method. )r}r)rrAr~rrrr r r map_asynchszPool.map_asyncc Cs|jtkrtdt|ds$t|}|dkrTtt|t|jd\}}|rT|d7}t|dkrdd}tj |||}t |j |t|||d} |j j |j| j||df| S)zY Helper function to implement map, starmap and their async counterparts. zPool not running__len__Nrr)r)rQrPrWr1r divmodrpr[rr MapResultrOrNr/rr) rrAr~ZmapperrrrZextrarrCr r r r}ps&   zPool._map_asynccCsTtj}x0|jtks$|jr8|jtkr8|jtjdq W|j j dt j ddS)Ng?zworker handler exiting) r]current_threadrQrPrO TERMINATErxtimesleeprNr/rr6)poolthreadr r r r^s  zPool._handle_workersc Csjtj}xt|jdD]\}}d}zx|D]}|jr@tjdPy ||Wq*tk r} zD|dd\} } y|| j| d| fWnt k rYnXWYdd} ~ Xq*Xq*W|rtjd|r|dnd } || dwPWdd}}} XqWtjdy:tjd|j dtjdx|D]} |dq&WWn t k rZtjd YnXtjd dS) Nz'task handler found thread._state != RUNrFzdoing set_length()rztask handler got sentinelz/task handler sending sentinel to result handlerz(task handler sending sentinel to workersz/task handler got OSError when sending sentinelsztask handler exitingr) r]riterr0rQrr6r7_setKeyErrorr/r5) taskqueuer/r;rcacherZtaskseqZ set_lengthr>rDr?idxpr r r rbsB          zPool._handle_taskscCstj}xy |}Wn"ttfk r6tjddSX|jrX|jtksLttjdP|dkrltjdP|\}}}y||j ||Wnt k rYnXd}}}q Wx|o|jtkrJy |}Wn"ttfk rtjddSX|dkrtjdq|\}}}y||j ||Wnt k r:YnXd}}}qWt |drtjdy,x&t dD]}|j jsP|qnWWnttfk rYnXtjdt||jdS) Nz.result handler got EOFError/OSError -- exitingz,result handler found thread._state=TERMINATEzresult handler got sentinelz&result handler ignoring extra sentinelr3z"ensuring that outqueue is not full z7result handler exiting: len(cache)=%s, thread._state=%s)r]rr5r4rr6rQrr.rrr1ror3pollrp)r;r0rrr>r?r@objr r r rfs\             zPool._handle_resultsccs4t|}x&ttj||}|s"dS||fVq WdS)N)rtuplerislice)rAitsizerr r r rs zPool._get_taskscCs tddS)Nz:pool objects cannot be passed between processes or pickled)NotImplementedError)rr r r r"szPool.__reduce__cCs&tjd|jtkr"t|_t|j_dS)Nz closing pool)rr6rQrPCLOSEr_)rr r r r2s  z Pool.closecCs$tjdt|_t|j_|jdS)Nzterminating pool)rr6rrQr_rk)rr r r terminates zPool.terminatecCsVtjd|jttfkst|jj|jj|j jx|j D] }|jqBWdS)Nz joining pool) rr6rQrrr.r_rrerhr[)rrr r r rs     z Pool.joincCsDtjd|jjx*|jr>|jjr>|jjtj dqWdS)Nz7removing tasks from inqueue until task handler finishedr) rr6Z_rlockacquireis_aliver3rrzrr)r: task_handlerrr r r _help_stuff_finish(s    zPool._help_stuff_finishc CsFtjdt|_t|_tjd|j||t||jsJt|dksJtt|_|jdtjdt j |k rx|j |rt |ddrtjdx|D]} | j dkr| jqWtjdt j |k r|j tjdt j |k r|j |rBt |ddrBtjd x0|D](} | jrtjd | j| j qWdS) Nzfinalizing poolz&helping task handler/workers to finishrzjoining worker handlerrzterminating workerszjoining task handlerzjoining result handlerzjoining pool workerszcleaning up worker %d)rr6rrQrrprr.r/r]rrr1rqrpid) clsrr:r;rZworker_handlerrZresult_handlerrrr r r ri1s8                zPool._terminate_poolcCs|S)Nr )rr r r __enter___szPool.__enter__cCs |jdS)N)r)rexc_typeZexc_valZexc_tbr r r __exit__bsz Pool.__exit__)N)N)NNN)r)r)NNN)NNN)#rrrr*rsrHrrrr\rxrKr|r rrrrrr{rr} staticmethodr^rbrfrr"r2rrr classmethodrirrr r r r rsF8         . <  .c@s@eZdZddZddZddZddd Zdd d Zd d ZdS)rcCs4tj|_tt|_||_||_||_|||j<dS)N) r]ZEvent_eventnext job_counterrrO _callback_error_callback)rrrrr r r rks   zApplyResult.__init__cCs |jjS)N)rZis_set)rr r r readysszApplyResult.readycCs|js t|jS)N)rr._success)rr r r successfulvs zApplyResult.successfulNcCs|jj|dS)N)rwait)rtimeoutr r r rzszApplyResult.waitcCs,|j||jst|jr"|jS|jdS)N)rrrr_value)rrr r r r0}s  zApplyResult.getcCsV|\|_|_|jr$|jr$|j|j|jr>|j r>|j|j|jj|j|j=dS)N)rrrrrsetrOr)rr@rr r r rs     zApplyResult._set)N)N) rrrrrrrr0rr r r r ris   rc@seZdZddZddZdS)rcCsftj||||dd|_dg||_||_|dkrLd|_|jj||j=n||t |||_dS)N)rTr) rrrr _chunksize _number_leftrrrbool)rrrlengthrrr r r rs    zMapResult.__init__cCs|jd8_|\}}|rp|jrp||j||j|d|j<|jdkr|jrZ|j|j|j|j=|jjnH| r|jrd|_||_|jdkr|j r|j |j|j|j=|jjdS)NrrF) rrrrrrOrrrr)rr@Zsuccess_resultsuccessrCr r r rs"         zMapResult._setN)rrrrrr r r r rs rc@s:eZdZddZddZd ddZeZdd Zd d ZdS) rcCsJtjtj|_tt|_||_tj |_ d|_ d|_ i|_ |||j<dS)Nr)r]Z ConditionZLock_condrrrrO collectionsdeque_items_index_length _unsorted)rrr r r rs  zIMapIterator.__init__cCs|S)Nr )rr r r __iter__szIMapIterator.__iter__NcCs|j~y|jj}Wnhtk r~|j|jkr6t|jj|y|jj}Wn(tk rx|j|jkrpttYnXYnXWdQRX|\}}|r|S|dS)N) rrpopleft IndexErrorrr StopIterationrr)rrrrr&r r r rs"   zIMapIterator.nextc Cs|j|j|krr|jj||jd7_x8|j|jkrd|jj|j}|jj||jd7_q.W|jjn ||j|<|j|jkr|j|j =WdQRXdS)Nr) rrrrtrpopnotifyrrOr)rr@rr r r rs      zIMapIterator._setc Cs<|j,||_|j|jkr.|jj|j|j=WdQRXdS)N)rrrrrOr)rrr r r rs   zIMapIterator._set_length)N) rrrrrr__next__rrr r r r rs   rc@seZdZddZdS)rc CsP|j@|jj||jd7_|jj|j|jkrB|j|j=WdQRXdS)Nr)rrrtrrrrOr)rr@rr r r rs    zIMapUnorderedIterator._setN)rrrrr r r r rsrc@s@eZdZdZeddZddffddZddZed d ZdS) rFcOsddlm}|||S)Nr)rH)ZdummyrH)r rBrHr r r rHs zThreadPool.ProcessNcCstj||||dS)N)rr)rrlr<r=r r r rszThreadPool.__init__cCs,tj|_tj|_|jj|_|jj|_dS)N)rLrMrjrdr/rcr0rg)rr r r rKs   zThreadPool._setup_queuesc Cs<|j,|jj|jjdg||jjWdQRXdS)N)Z not_emptyrLclearextendZ notify_all)r:rrr r r rs zThreadPool._help_stuff_finish) rrrrsrrHrrKrr r r r r s  )"__all__r]rLrrrUrrrrrrrPrrcountrrrr7rrr!r$rFr8objectrrZ AsyncResultrrrrr r r r  s@   *\&)@__pycache__/resource_sharer.cpython-36.opt-2.pyc000064400000011130147221272370015540 0ustar003 \@sddlZddlZddlZddlZddlZddlmZddlmZddlm Z dgZ ej dkrxe dg7Z Gd dde Z ne d g7Z Gd d d e ZGd d d e ZeZejZdS)N)process) reduction)utilstopZwin32 DupSocketc@seZdZddZddZdS)rcs(|jfdd}tj|j|_dS)Ncsj|}|j|dS)N)shareZ send_bytes)connpidr)new_sock7/usr/lib64/python3.6/multiprocessing/resource_sharer.pysends z DupSocket.__init__..send)dup_resource_sharerregisterclose_id)selfZsockrr )r r __init__s zDupSocket.__init__c Cs*tj|j}|j}tj|SQRXdS)N)rget_connectionrZ recv_bytessocketZ fromshare)rr rr r r detach$szDupSocket.detachN)__name__ __module__ __qualname__rrr r r r rsDupFdc@seZdZddZddZdS)rcs4tj|fdd}fdd}tj|||_dS)Ncstj||dS)N)rZ send_handle)r r )new_fdr r r1szDupFd.__init__..sendcstjdS)N)osrr )rr r r3szDupFd.__init__..close)rrrrr)rfdrrr )rr r/s   zDupFd.__init__c Cs"tj|j }tj|SQRXdS)N)rrrrZ recv_handle)rr r r r r7sz DupFd.detachN)rrrrrr r r r r-sc@sJeZdZddZddZeddZddd Zd d Zd d Z ddZ dS)_ResourceSharercCs@d|_i|_g|_tj|_d|_d|_d|_t j |t j dS)Nr) _key_cache _old_locks threadingLock_lock _listener_address_threadrZregister_after_forkr _afterfork)rr r r r?s z_ResourceSharer.__init__c CsN|j>|jdkr|j|jd7_||f|j|j<|j|jfSQRXdS)Nr)r&r(_startr!r")rrrr r r rIs  z_ResourceSharer.registercCs<ddlm}|\}}||tjjd}|j|tjf|S)Nr)Client)authkey) connectionr,rcurrent_processr-rrgetpid)Zidentr,addresskeycr r r rRs  z_ResourceSharer.get_connectionNc Csddlm}|j|jdk r||jtjjd}|jd|j|j j ||j j rdt j d|jjd|_ d|_d|_x |jjD]\}\}}|qW|jjWdQRXdS)Nr)r,)r-z._ResourceSharer thread did not stop when asked)r.r,r&r(rr/r-rrr)joinZis_aliverZ sub_warningr'r"itemsclear)rZtimeoutr,r3r2rrr r r r[s"        z_ResourceSharer.stopcCsnx |jjD]\}\}}|q W|jj|jj|jtj|_|jdk rX|jj d|_d|_ d|_ dS)N) r"r5r6r#appendr&r$r%r'rr(r))rr2rrr r r r*ps     z_ResourceSharer._afterforkcCsXddlm}tjd|tjjd|_|jj|_ t j |j d}d|_ |j||_dS)Nr)Listenerz0starting listener and thread for sending handles)r-)targetT)r.r8rdebugrr/r-r'r1r(r$ZThread_serveZdaemonstartr))rr8tr r r r+~s   z_ResourceSharer._startcCsttdr tjtjtdtjxy\|jjH}|j}|dkrBP|\}}|j j |\}}z|||Wd|XWdQRXWq"t j st jt jYq"Xq"WdS)Npthread_sigmaskr)hasattrsignalr> SIG_BLOCKrangeNSIGr'ZacceptZrecvr"poprZ is_exitingsys excepthookexc_info)rr msgr2Zdestination_pidrrr r r r;s   z_ResourceSharer._serve)N) rrrrr staticmethodrrr*r+r;r r r r r =s   r )rr@rrEr$rcontextrr__all__platformobjectrrr rrr r r r  s       `__pycache__/heap.cpython-36.pyc000064400000013657147221272370012342 0ustar003 \ @sddlZddlZddlZddlZddlZddlZddlmZmZddl m Z dgZ ej dkrvddl Z GdddeZn,Gd ddeZd d Zd d ZejeeGdddeZGdddeZdS)N) reductionassert_spawning)util BufferWrapperZwin32c@s,eZdZejZddZddZddZdS)ArenacCsz||_xTtdD]@}dtjt|jf}tjd||d}tjdkrHP|j qWt d||_ ||_ |j|j f|_ dS)Ndz pym-%d-%sr)tagnamerzCannot find name for new mmap)sizerangeosgetpidnext_randmmap_winapiZ GetLastErrorcloseFileExistsErrornamebuffer_state)selfr irZbufr/usr/lib64/python3.6/heap.py__init__"s  zArena.__init__cCst||jS)N)rr)rrrr __getstate__1szArena.__getstate__cCs,|\|_|_|_tjd|j|jd|_dS)Nr)r r )r rrrr)rstaterrr __setstate__5szArena.__setstate__N) __name__ __module__ __qualname__tempfileZ_RandomNameSequencerrrrrrrrrsrc@seZdZdddZdS)rrc Cs||_||_|d krtjdtjtjd\|_}tj|tj |tj |jft |jddd^}d }||krd|}xt ||D]}|j |qW~|j d|||j|kstWdQRXtj|j|j|_dS) Nrzpym-%d-)prefixdirwbF)closefdir i)r fdr#Zmkstempr rrZ get_temp_dirunlinkFinalizeropenr writetellAssertionErrorrr)rr r)rfZbsZzeros_rrrr@s" zArena.__init__Nr )r )r r!r"rrrrrr>scCs(|jdkrtdt|jtj|jffS)NrzDArena is unpicklable because forking was enabled when it was createdr )r) ValueError rebuild_arenar rZDupFd)arrr reduce_arenaSs r5cCst||jS)N)rdetach)r Zdupfdrrrr3Ysr3c@sZeZdZdZejfddZeddZddZ dd Z d d Z d d Z ddZ ddZdS)HeapcCsJtj|_tj|_||_g|_i|_i|_ i|_ t |_ g|_ g|_dS)N)r r_lastpid threadingZLock_lock_size_lengths _len_to_seq_start_to_block_stop_to_blockset_allocated_blocks_arenas_pending_free_blocks)rr rrrrfs  z Heap.__init__cCs|d}|||@S)Nrr)nZ alignmentmaskrrr_roundupssz Heap._roundupc Cstj|j|}|t|jkrj|jt|j|tj}|jd9_t j d|t |}|j j ||d|fS|j|}|j|}|j}|s|j|=|j|=|\}}}|j||f=|j||f=|S)Nz"allocating a new mmap of length %dr)bisectZ bisect_leftr=lenrGmaxr<rPAGESIZErinforrCappendr>popr?r@) rr rlengtharenaseqblockstartstoprrr_mallocys"        z Heap._mallocc Cs|\}}}y|j||f}Wntk r0YnX|j|\}}y|j||f}Wntk rfYnX|j|\}}|||f}||}y|j|j|Wn.tk r|g|j|<tj|j|YnX||j||f<||j||f<dS)N) r@KeyError_absorbr?r>rNrIZinsortr=) rrSrQrTrUZ prev_blockr1Z next_blockrPrrr_frees(   z Heap._freecCs^|\}}}|j||f=|j||f=||}|j|}|j||sV|j|=|jj|||fS)N)r?r@r>remover=)rrSrQrTrUrPrRrrrrXs      z Heap._absorbc CsFx@y|jj}Wntk r&PYnX|jj||j|qWdS)N)rDrO IndexErrorrBrZrY)rrSrrr_free_pending_blockss zHeap._free_pending_blocksc Cs`tj|jkst|jjds,|jj|n0z"|j|j j ||j |Wd|jj XdS)NF) r rr9r/r;acquirerDrNr\rBrZrYrelease)rrSrrrfrees   z Heap.freec Csd|kotjknsttj|jkr4|j|jh|j|j t |d|j }|j |\}}}||}||kr|j |||f|||f}|jj||SQRXdS)Nrr)sysmaxsizer/r rr9rr;r\rGrK _alignmentrVrYrBadd)rr rQrTrUZnew_stoprSrrrmallocs  z Heap.mallocN)r r!r"rbrrLr staticmethodrGrVrYrXr\r_rdrrrrr7bs  r7c@s"eZdZeZddZddZdS)rcCsNd|kotjknsttjj|}||f|_tj|tjj |fddS)Nr)args) r`rar/r_heaprdrrr+r_)rr rSrrrrs  zBufferWrapper.__init__cCs&|j\\}}}}t|j|||S)N)r memoryviewr)rrQrTrUr rrrcreate_memoryviewszBufferWrapper.create_memoryviewN)r r!r"r7rgrrirrrrrs)rIrr r`r#r:contextrrr__all__platformrobjectrr5r3registerr7rrrrr s$    __pycache__/semaphore_tracker.cpython-36.pyc000064400000007105147221272370015112 0ustar003 \@sddlZddlZddlZddlZddlZddlZddlmZddlmZdddgZ Gdd d e Z e Z e j Z e jZe jZe jZd d ZdS) N)spawn)utilensure_runningregister unregisterc@s<eZdZddZddZddZddZd d Zd d Zd S)SemaphoreTrackercCstj|_d|_d|_dS)N) threadingZLock_lock_fd_pid)selfr)/usr/lib64/python3.6/semaphore_tracker.py__init__s zSemaphoreTracker.__init__cCs|j|jS)N)rr )r rrrgetfd"szSemaphoreTracker.getfdc Cs|j|jdk rRtj|jtj\}}|s0dStj|jd|_d|_tjdg}y|j t j j Wnt k r~YnXd}tj\}}zlyB|j |tj}|gtj}|d||g7}tj|||}Wntj|YnX||_||_Wdtj|XWdQRXdS)zMake sure that semaphore tracker process is running. This can be run from any process. Usually a child process will use the semaphore created by its parent.NzWsemaphore_tracker: process died unexpectedly, relaunching. Some semaphores might leak.z;from multiprocessing.semaphore_tracker import main;main(%d)z-c)r r oswaitpidWNOHANGcloser warningswarnappendsysstderrfileno ExceptionpiperZget_executablerZ_args_from_interpreter_flagsZspawnv_passfds) r pidZstatusZ fds_to_passcmdrwZexeargsrrrr&s8        zSemaphoreTracker.ensure_runningcCs|jd|dS)z2Register name of semaphore with semaphore tracker.ZREGISTERN)_send)r namerrrrQszSemaphoreTracker.registercCs|jd|dS)z4Unregister name of semaphore with semaphore tracker.Z UNREGISTERN)r#)r r$rrrrUszSemaphoreTracker.unregistercCsP|jdj||jd}t|dkr.tdtj|j|}|t|ksLtdS)Nz{0}:{1} asciiiz name too long) rformatencodelen ValueErrorrwriter AssertionError)r rr$msgnbytesrrrr#Ys  zSemaphoreTracker._sendN) __name__ __module__ __qualname__rrrrrr#rrrrrs +rc-Cstjtjtjtjtjtjx6tjtjfD]&}y |jWq.tk rRYq.Xq.Wt }zt |d}x|D]}yJ|j j d\}}|dkr|j |n |dkr|j|n td|Wqrtk rytjtjWn YnXYqrXqrWWdQRXWd|rs   I__pycache__/managers.cpython-36.opt-2.pyc000064400000073242147221272370014156 0ustar003 \@sddddgZddlZddlZddlZddlZddlZddlmZddlm Z dd l m Z m Z dd lm Z dd lmZdd lmZdd lmZddZe jejedddDZedek rddZxeD]Ze jeeqWGdddeZfifddZddZGdddeZddZd d!ZGd"d#d#eZGd$d%d%eZ e j!e j"fe j#e j$fd&Z%Gd'ddeZ&Gd(d)d)e'Z(Gd*ddeZ)d+d,Z*ifd-d.Z+dd0d1Z,Gd2d3d3eZ-Gd4d5d5eZ.dd6d7Z/Gd8d9d9e)Z0Gd:d;d;e)Z1Gdd?d?e)Z3Gd@dAdAe)Z4GdBdCdCe)Z5GdDdEdEe)Z6e+dFdZ7GdZd[d[e7Z8e+d\dZ9d]deie9_:e+dfdZ;e+dgdZe>jdwej?e>jdxej?e>jdyej@e3e>jdzejAe1e>jd{ejBe1e>jd|ejCe1e>jd}ejDe1e>jd~ejEe2e>jdejFe4e>jde jGe=e>jdee8e>jdeHe9e>jd5e.e6e>jd7e/e;e>jd3e-e5e>jdee0dde>jdsdddS) BaseManager SyncManager BaseProxyTokenN) format_exc) connection) reductionget_spawning_popen)pool)process)util) get_contextcCstj|j|jffS)N)arraytypecodetobytes)ar0/usr/lib64/python3.6/multiprocessing/managers.py reduce_array$srcCsg|]}tti|qSr)typegetattr).0namerrr (sritemskeysvaluescCstt|ffS)N)list)objrrrrebuild_as_list*sr c@s0eZdZd ZddZddZdd Zd d Zd S)rtypeidaddressidcCs||||_|_|_dS)N)r!r"r#)selfr!r"r#rrr__init__9szToken.__init__cCs|j|j|jfS)N)r!r"r#)r$rrr __getstate__<szToken.__getstate__cCs|\|_|_|_dS)N)r!r"r#)r$staterrr __setstate__?szToken.__setstate__cCsd|jj|j|j|jfS)Nz %s(typeid=%r, address=%r, id=%r)) __class____name__r!r"r#)r$rrr__repr__BszToken.__repr__N)r!r"r#)r* __module__ __qualname__ __slots__r%r&r(r+rrrrr3s cCs8|j||||f|j\}}|dkr*|St||dS)Nz#RETURN)sendrecvconvert_to_error)cr# methodnameargskwdskindresultrrrdispatchJs  r8cCs<|dkr |S|dkrt|S|dkr0td|StdSdS)Nz#ERRORz #TRACEBACKz#UNSERIALIZABLEzUnserializable message: %s zUnrecognized message type) RemoteError ValueError)r6r7rrrr1Ts r1c@seZdZddZdS)r9cCs&ddddt|jdddS)N -Kr)strr4)r$rrr__str__aszRemoteError.__str__N)r*r,r-r?rrrrr9`sr9cCs6g}x,t|D] }t||}t|r|j|qW|S)N)dirrcallableappend)rtemprfuncrrr all_methodshs  rEcCsddt|DS)NcSsg|]}|ddkr|qS)r_r)rrrrrrwsz"public_methods..)rE)rrrrpublic_methodsssrGc @seZdZddddddddd g Zd d Zd d ZddZddZddZddZ ddZ ddZ e e e dZ ddZ ddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-S).Servershutdowncreateaccept_connection get_methods debug_infonumber_of_objectsdummyincrefdecrefcCs^||_tj||_t|\}}||dd|_|jj|_ddffi|_i|_i|_ t j |_ dS)N)r"Zbacklog0) registryr AuthenticationStringauthkeylistener_clientlistenerr" id_to_objid_to_refcountid_to_local_proxy_obj threadingLockmutex)r$rTr"rV serializerListenerClientrrrr%s   zServer.__init__cCstj|_|tj_zZtj|jd}d|_|j y x|jj sN|jj dq6WWnt t fk rjYnXWdtjtjkrtjdtjt_tjt_tjdXdS)N)targetTrzresetting stdout, stderrr)r\Event stop_eventr current_process_manager_serverThreadaccepterdaemonstartis_setwaitKeyboardInterrupt SystemExitsysstdout __stdout__r debug __stderr__stderrexit)r$rhrrr serve_forevers       zServer.serve_foreverc CsPxJy|jj}Wntk r&wYnXtj|j|fd}d|_|jqWdS)N)rbr4T)rXZacceptOSErrorr\rghandle_requestrirj)r$r2trrrrhszServer.accepterc 'Cs4d}}}y>tj||jtj||j|j}|\}}}}t||}Wntk rhdtf} Yn>Xy||f||}Wntk rdtf} Yn Xd|f} y|j| Wnrtk r&} zTy|jdtfWntk rYnXt j d| t j d|t j d| WYdd} ~ XnX|j dS)Nz #TRACEBACKz#RETURNzFailure to send message: %rz ... request was %rz ... exception was %r) rZdeliver_challengerVZanswer_challenger0r Exceptionrr/r infoclose) r$r2funcnamer7requestignorer4r5rDmsgerrrrxs2    zServer.handle_requestcDCstjdtjj|j}|j}|j}x|jj syBd}}|}|\}}} } y||\}} } Wn^t k r} zBy|j |\}} } Wn&t k r}z | WYdd}~XnXWYdd} ~ XnX|| krt d|t || ft||}y|| | }Wn,tk r&}zd|f}WYdd}~XnPX| o8| j|d}|rn|j|||\}}t||j|}d||ff}nd|f}Wnt k r|dkrdtf}nNy,|j|}|||||f| | }d|f}Wn tk rdtf}YnXYnPtk r"tjdtjjtjdYn tk r@dtf}YnXyDy ||Wn2tk r}z|d tfWYdd}~XnXWq(tk r}zBtjd tjjtjd |tjd ||jtjd WYdd}~Xq(Xq(WdS)Nz$starting server thread to service %rz+method %r of %r object is not in exposed=%rz#ERRORz#PROXYz#RETURNz #TRACEBACKz$got EOF -- exiting thread serving %rrz#UNSERIALIZABLEzexception in thread serving %rz ... message was %rz ... exception was %rr)r rrr\current_threadrr0r/rYrdrkKeyErrorr[AttributeErrorrrrzgetrJrr"rfallback_mappingEOFErrorrorur{r|)r$connr0r/rYr3rr~identr4r5exposed gettypeidkeZ second_keZfunctionresrrr!ZridentZrexposedtokenZ fallback_funcr7rrr serve_clientsx  (        $   zServer.serve_clientcCs|S)Nr)r$rrrrrrfallback_getvalue&szServer.fallback_getvaluecCst|S)N)r>)r$rrrrrr fallback_str)szServer.fallback_strcCst|S)N)repr)r$rrrrrr fallback_repr,szServer.fallback_repr)r?r+z #GETVALUEcCsdS)Nr)r$r2rrrrO5sz Server.dummycCs||jlg}t|jj}|jxD|D]<}|dkr(|jd||j|t|j|dddfq(Wdj|SQRXdS)NrSz %s: refcount=%s %srr=r;) r^rrZrsortrBr>rYjoin)r$r2r7rrrrrrM8s  $zServer.debug_infocCs t|jS)N)lenrZ)r$r2rrrrNGszServer.number_of_objectscCsLz:ytjd|jdWnddl}|jYnXWd|jjXdS)Nz!manager received shutdown message#RETURNr)rN)r rrr/ traceback print_excrdset)r$r2rrrrrINs zServer.shutdownc Os|j|j|\}}}}|dkr,|d} n |||} |dkrFt| }|dk r^t|t|}dt| } tjd|| | t||f|j| <| |j krd|j | <WdQRX|j || | t |fS)Nrz%xz&%r callable returned object with id %r) r^rTrGrr#r rrrrYrZrPtuple) r$r2r!r4r5rArmethod_to_typeid proxytyperrrrrrJ[s      z Server.createcCst|j|jdS)Nr)rrYr#)r$r2rrrrrLzszServer.get_methodscCs"|tj_|jd|j|dS)N#RETURN)rN)r\rrr/r)r$r2rrrrrKs  zServer.accept_connectioncCs|jy|j|d7<Wnhtk r}zL||jkrrd|j|<|j||j|<|j|\}}}tjd|n|WYdd}~XnXWdQRXdS)Nrz&Server re-enabled tracking & INCREF %r)r^rZrr[rYr rr)r$r2rrrrrrrrrPs  z Server.increfcCs||jkr$||jkr$tjd|dS|j.|j|d8<|j|dkrT|j|=WdQRX||jkrdfdf|j|<tjd||j|j|=WdQRXdS)NzServer DECREF skipping %rrrzdisposing of obj with id %r)rZr[r rrr^rY)r$r2rrrrrQs     z Server.decrefN)r*r,r-Zpublicr%rvrhrxrrrrrrOrMrNrIrJrLrKrPrQrrrrrH}s, "Q rHc@seZdZdgZdZdZdZdS)StatevaluerrN)r*r,r-r.INITIALSTARTEDSHUTDOWNrrrrrsr)pickleZ xmlrpclibc@seZdZiZeZd ddZddZddZdffd d Z e dffd d Z d dZ d!ddZ ddZddZddZddZeddZeddZe d"ddZdS)#rNrcCs\|dkrtjj}||_tj||_t|_tj|j_ ||_ t |\|_ |_ |pTt|_dS)N)r rerV_addressrU_authkeyr_staterr _serializerrWZ _Listener_Clientr_ctx)r$r"rVr_Zctxrrrr%s   zBaseManager.__init__cCst|j|j|j|jS)N)rH _registryrrr)r$rrr get_servers zBaseManager.get_servercCs8t|j\}}||j|jd}t|ddtj|j_dS)N)rVrO) rWrrrr8rrrr)r$r`rarrrrconnects zBaseManager.connectc Cs|dk rt| rtdtjdd\}}|jjt|j|j|j |j |j |||fd|_ dj dd|j jD}t|jd||j _|j j|j|j|_ |jtj|j_tj|t|j|j |j |j |j|jfd d |_dS) Nzinitializer must be a callableF)Zduplex)rbr4:css|]}t|VqdS)N)r>)rirrr sz$BaseManager.start..r<r)r4 exitpriority)rA TypeErrorrZPiperZProcessr _run_serverrrrr_processrZ _identityr*rrjr|r0rrrrr Finalize_finalize_managerrrI)r$ initializerinitargsreaderwriterrrrrrjs&       zBaseManager.startc CsN|dk r|||j||||}|j|j|jtjd|j|jdS)Nzmanager serving at %r)_Serverr/r"r|r r{rv) clsrTr"rVr_rrrserverrrrrs zBaseManager._run_serverc OsN|j|j|jd}zt|dd|f||\}}Wd|jXt||j||fS)N)rVrJ)rrrr8r|r)r$r!r4r5rr#rrrr_create%s  zBaseManager._createcCs*|jdk r&|jj||jjs&d|_dS)N)rris_alive)r$timeoutrrrr1s   zBaseManager.joinc Cs.|j|j|jd}z t|ddS|jXdS)N)rVrM)rrrr8r|)r$rrrr _debug_info:s zBaseManager._debug_infoc Cs.|j|j|jd}z t|ddS|jXdS)N)rVrN)rrrr8r|)r$rrrr_number_of_objectsDs zBaseManager._number_of_objectscCs|jjtjkr|j|S)N)rrrrrj)r$rrr __enter__NszBaseManager.__enter__cCs |jdS)N)rI)r$exc_typeexc_valexc_tbrrr__exit__TszBaseManager.__exit__cCs|jrtjdy,|||d}zt|ddWd|jXWntk rRYnX|jdd|jrtjdt|drtjd|j|jd d|jrtjd t j |_ y t j |=Wntk rYnXdS) Nz#sending shutdown message to manager)rVrIg?)rzmanager still alive terminatez'trying to `terminate()` manager processg?z#manager still alive after terminate)rr r{r8r|rzrhasattrrrrrr_address_to_localr)r r"rVr'rrrrrrWs.         zBaseManager._finalize_managercCs|jS)N)r)r$rrrwszBaseManager.Tc sd|jkr|jj|_dkr"t|p0tdd}|p@tdd}|r`xt|jD]\}}qTW|||f|j<|rfdd} | _t|| dS)Nr _exposed__method_to_typeid_cs`tjd|jf||\}}||j||j|d}|j|j|jd}t|dd|jf|S)Nz)requesting creation of a shared %r object)managerrVr)rVrQ) r rrrrrrr"r8r#)r$r4r5rZexpproxyr)rr!rrrCs  z"BaseManager.register..temp) __dict__rcopy AutoProxyrrrr*setattr) rr!rArrr create_methodkeyrrCr)rr!rregisterys    zBaseManager.register)NNrN)N)NNNNT)r*r,r-rrHrr%rrrj classmethodrrrrrrr staticmethodrpropertyr"rrrrrrs(  $    c@seZdZddZddZdS)ProcessLocalSetcCstj|dddS)NcSs|jS)N)clear)rrrrrsz*ProcessLocalSet.__init__..)r register_after_fork)r$rrrr%szProcessLocalSet.__init__cCs t|ffS)N)r)r$rrr __reduce__szProcessLocalSet.__reduce__N)r*r,r-r%rrrrrrsrc@s|eZdZiZejZdddZddZfifdd Z d d Z d d Z e ddZ ddZddZddZddZddZdS)rNTFc Cstj8tjj|jd}|dkr:tjtf}|tj|j<WdQRX|d|_|d|_ ||_ |j j |_ ||_ ||_t|d|_||_|dk rtj||_n"|j dk r|j j|_n tjj|_|r|jtj|tjdS)Nrr)r_mutexrrr"r ZForkAwareLocalr_tls_idset_tokenr#_id_managerrrWr_owned_by_managerr rUrrerV_increfr _after_fork) r$rr_rrVrrP manager_ownedZ tls_idsetrrrr%s*      zBaseProxy.__init__cCsdtjdtjj}tjjdkr4|dtjj7}|j|jj |j d}t |dd|f||j _ dS)Nzmaking connection to managerZ MainThread|)rVrK)r rrr rerr\rrrr"rr8rr)r$rrrrr_connects  zBaseProxy._connectc Csy |jj}Wn6tk rBtjdtjj|j|jj}YnX|j |j |||f|j \}}|dkrp|S|dkr|\}}|j j |jd} |jj|_| ||j|j |j|d} |j|j|jd}t|dd|jf| St||dS) Nz#thread %r does not own a connectionz#RETURNz#PROXYr)rrVr)rVrQ)rrrr rrr\rrrr/rr0rrr!rr"rrrr8r#r1) r$r3r4r5rr6r7rrrrrrr _callmethods,      zBaseProxy._callmethodcCs |jdS)Nz #GETVALUE)r)r$rrr _getvalueszBaseProxy._getvaluec Cs|jrtjd|jjdS|j|jj|jd}t|dd|j ftjd|jj|j j |j |j oj|j j }tj|tj|j|j||j|j |jfdd|_dS)Nz%owned_by_manager skipped INCREF of %r)rVrPz INCREF %r )r4r)rr rrrr#rr"rr8rraddrrrr_decrefrZ_close)r$rr'rrrr s zBaseProxy._increfcCs|j|j|dks |jtjkry2tjd|j||j|d}t|dd|jfWqt k r}ztjd|WYdd}~XqXntjd|j| rt |drtjdt j j |jj|`dS)Nz DECREF %r)rVrQz... decref failed %sz%DECREF %r -- manager already shutdownrz-thread %r has no more proxies so closing conn)discardr#rrrr rrr"r8rzrr\rrrr|)rrVr'ZtlsZidsetrrrrrrr s    zBaseProxy._decrefcCsHd|_y |jWn0tk rB}ztjd|WYdd}~XnXdS)Nzincref failed: %s)rrrzr r{)r$rrrrr9s  zBaseProxy._after_forkcCs^i}tdk r|j|d<t|ddrB|j|d<tt|j|j|ffStt||j|j|ffSdS)NrV_isautoFr) r rrr RebuildProxyrrrr)r$r5rrrrAs    zBaseProxy.__reduce__cCs|jS)N)r)r$memorrr __deepcopy__NszBaseProxy.__deepcopy__cCsdt|j|jjt|fS)Nz<%s object, typeid %r at %#x>)rr*rr!r#)r$rrrr+QszBaseProxy.__repr__c Cs4y |jdStk r.t|dddSXdS)Nr+rz; '__str__()' failed>r)rrzr)r$rrrr?Us zBaseProxy.__str__)NNNTF)r*r,r-rr ZForkAwareThreadLockrr%rrrrrrrrrr+r?rrrrrs (   cCsttjdd}|rT|j|jkrTtjd|d|d<|j|jkrT|j|j|j|j<|j ddopttjdd }|||fd|i|S)Nrfz*Rebuild a proxy owned by manager, token=%rTrrPZ _inheritingF) rr rer"r rrr#r[rYpop)rDrr_r5rrPrrrrbs   rc Csrt|}y |||fStk r(YnXi}x|D]}td||f|q4Wt|tf|}||_||||f<|S)NzLdef %s(self, *args, **kwds): return self._callmethod(%r, args, kwds))rrexecrrr)rr_cacheZdicmeth ProxyTyperrr MakeProxyTypews   rTc Cst|d}|dkrB||j|d}zt|dd|f}Wd|jX|dkrX|dk rX|j}|dkrjtjj}td|j |}||||||d} d| _ | S)Nr)rVrLz AutoProxy[%s])rrVrPT) rWr"r8r|rr rerVrr!r) rr_rrVrrPrrrrrrrrs    rc@seZdZddZddZdS) NamespacecKs|jj|dS)N)rupdate)r$r5rrrr%szNamespace.__init__cCs^t|jj}g}x,|D]$\}}|jds|jd||fqW|jd|jjdj|fS)NrFz%s=%rz%s(%s)z, ) rrr startswithrBrr)r*r)r$rrCrrrrrr+s zNamespace.__repr__N)r*r,r-r%r+rrrrrsrc@s8eZdZd ddZddZddZdd ZeeeZd S) ValueTcCs||_||_dS)N) _typecode_value)r$rrlockrrrr%szValue.__init__cCs|jS)N)r)r$rrrrsz Value.getcCs ||_dS)N)r)r$rrrrrsz Value.setcCsdt|j|j|jfS)Nz %s(%r, %r))rr*rr)r$rrrr+szValue.__repr__N)T) r*r,r-r%rrr+rrrrrrrs  rcCs tj||S)N)r)rZsequencerrrrArraysrc@s8eZdZdZddZddZd d Zd d Zd dZdS) IteratorProxy__next__r/throwr|cCs|S)Nr)r$rrr__iter__szIteratorProxy.__iter__cGs |jd|S)Nr)r)r$r4rrrrszIteratorProxy.__next__cGs |jd|S)Nr/)r)r$r4rrrr/szIteratorProxy.sendcGs |jd|S)Nr)r)r$r4rrrrszIteratorProxy.throwcGs |jd|S)Nr|)r)r$r4rrrr|szIteratorProxy.closeN)rr/rr|) r*r,r-rrrr/rr|rrrrrs rc@s2eZdZd ZdddZddZd d Zd d ZdS) AcquirerProxyacquirereleaseTNcCs"|dkr|fn||f}|jd|S)Nr )r)r$Zblockingrr4rrrr szAcquirerProxy.acquirecCs |jdS)Nr )r)r$rrrr szAcquirerProxy.releasecCs |jdS)Nr )r)r$rrrrszAcquirerProxy.__enter__cCs |jdS)Nr )r)r$rrrrrrrszAcquirerProxy.__exit__)r r )TN)r*r,r-rr r rrrrrrrs  rc@s4eZdZdZdddZd d Zd d Zdd dZdS)ConditionProxyr r rlnotify notify_allNcCs|jd|fS)Nrl)r)r$rrrrrlszConditionProxy.waitcCs |jdS)Nr )r)r$rrrr szConditionProxy.notifycCs |jdS)Nr )r)r$rrrr szConditionProxy.notify_allcCsh|}|r|S|dk r$tj|}nd}d}x6|sb|dk rP|tj}|dkrPP|j||}q.W|S)Nr)timeZ monotonicrl)r$Z predicaterr7ZendtimeZwaittimerrrwait_fors   zConditionProxy.wait_for)r r rlr r )N)N)r*r,r-rrlr r rrrrrr s  r c@s2eZdZdZddZddZd d Zdd d Zd S) EventProxyrkrrrlcCs |jdS)Nrk)r)r$rrrrkszEventProxy.is_setcCs |jdS)Nr)r)r$rrrrszEventProxy.setcCs |jdS)Nr)r)r$rrrrszEventProxy.clearNcCs|jd|fS)Nrl)r)r$rrrrrlszEventProxy.wait)rkrrrl)N)r*r,r-rrkrrrlrrrrrs rc@sNeZdZdZdddZdd Zd d Zed d ZeddZ eddZ dS) BarrierProxy__getattribute__rlabortresetNcCs|jd|fS)Nrl)r)r$rrrrrl szBarrierProxy.waitcCs |jdS)Nr)r)r$rrrrszBarrierProxy.abortcCs |jdS)Nr)r)r$rrrrszBarrierProxy.resetcCs |jddS)Nrparties)r)r)r$rrrrszBarrierProxy.partiescCs |jddS)Nr n_waiting)r)r)r$rrrrszBarrierProxy.n_waitingcCs |jddS)Nrbroken)r)r)r$rrrrszBarrierProxy.broken)rrlrr)N) r*r,r-rrlrrrrrrrrrrr s   rc@s(eZdZd ZddZddZdd Zd S) NamespaceProxyr __setattr__ __delattr__cCs0|ddkrtj||Stj|d}|d|fS)NrrFrr)objectr)r$r callmethodrrr __getattr__ s   zNamespaceProxy.__getattr__cCs4|ddkrtj|||Stj|d}|d||fS)NrrFrr)rrr)r$rrrrrrr%s  zNamespaceProxy.__setattr__cCs0|ddkrtj||Stj|d}|d|fS)NrrFrr)rrr)r$rrrrrr*s   zNamespaceProxy.__delattr__N)rrr)r*r,r-rrrrrrrrrsrc@s*eZdZdZddZddZeeeZdS) ValueProxyrrcCs |jdS)Nr)r)r$rrrr3szValueProxy.getcCs|jd|fS)Nr)r)r$rrrrr5szValueProxy.setN)rr)r*r,r-rrrrrrrrrr1sr BaseListProxy__add__ __contains__ __delitem__ __getitem____len____mul__ __reversed____rmul__ __setitem__rBcountextendindexinsertrremovereverser__imul__c@seZdZddZddZdS) ListProxycCs|jd|f|S)Nr*)r)r$rrrr__iadd__AszListProxy.__iadd__cCs|jd|f|S)Nr/)r)r$rrrrr/DszListProxy.__imul__N)r*r,r-r1r/rrrrr0@sr0 DictProxyrrrrhas_keypopitem setdefaultrIterator ArrayProxy PoolProxyapply apply_asyncr|imapimap_unorderedrmap map_asyncstarmap starmap_asyncrZ AsyncResult)r:r>r@r;r<c@seZdZddZddZdS)r8cCs|S)Nr)r$rrrrdszPoolProxy.__enter__cCs |jdS)N)r)r$rrrrrrrfszPoolProxy.__exit__N)r*r,r-rrrrrrr8csc@s eZdZdS)rN)r*r,r-rrrrrms QueueZ JoinableQueuercr]RLock SemaphoreBoundedSemaphore ConditionBarrierPoolrdictF)rr)r)rrr)NNNT)T)r r!r"r#r$r%r&r'r(rBr)r*r+r,rr-r.rr/)r!r"r#rr$r(rrrr3rrrr4r5rr)r$r#r() r9r:r|r;r<rr=r>r?r@r)I__all__ror\rZqueuerrrrcontextr r r r r rrrZ view_typesrr Z view_typerrr8r1rzr9rErGrHrr`raZ XmlListenerZ XmlClientrWrrrrrrrrrrrrr rrrrrr0r2rr7Z BasePoolProxyr8rrArcr]rBrCrDrErFrGrHrrrr s             ; ] 4             __pycache__/queues.cpython-36.pyc000064400000021343147221272370012723 0ustar003 \ *@sdddgZddlZddlZddlZddlZddlZddlZddlZddlm Z m Z ddl Z ddl m Z ddl mZejjZdd lmZmZmZmZmZGd ddeZeZGd ddeZGd ddeZdS) Queue SimpleQueue JoinableQueueN)EmptyFull) connection)context)debuginfoFinalizeregister_after_fork is_exitingc@seZdZd(ddZddZddZdd Zd)d d Zd*ddZddZ ddZ ddZ ddZ ddZ ddZddZddZd d!Zed"d#Zed$d%Zed&d'Zd S)+rrcCs|dkrddlm}||_tjdd\|_|_|j|_t j |_ t j dkrTd|_n |j|_|j||_d|_|jt j dkrt|tjdS)Nrr) SEM_VALUE_MAXF)duplexwin32)Z synchronizer_maxsizerPipe_reader_writerLock_rlockosgetpid_opidsysplatform_wlockZBoundedSemaphore_sem _ignore_epipe _after_forkr r)selfmaxsizectxr$/usr/lib64/python3.6/queues.py__init__$s       zQueue.__init__cCs.tj||j|j|j|j|j|j|j|j fS)N) r assert_spawningrrrrrrrr)r!r$r$r% __getstate__9s zQueue.__getstate__c Cs0|\|_|_|_|_|_|_|_|_|jdS)N) rrrrrrrrr )r!stater$r$r% __setstate__>s$zQueue.__setstate__cCsbtdtjtj|_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\|j s t|jj||st|j.|jdkr8|j|jj ||jj WdQRXdS)N) r4AssertionErrorracquirerr-r1 _start_threadr0appendnotify)r!objblocktimeoutr$r$r%putPs   z Queue.putc Cs|r2|dkr2|j|j}WdQRX|jjnr|rBtj|}|jj||sTtzB|rv|tj}|j|stn |jst|j}|jjWd|jjXt j |S)N) rr9rreleasetimeZ monotonicr=rr;_ForkingPicklerloads)r!rBrCresZdeadliner$r$r%get[s&      z Queue.getcCs|j|jjjS)N)rr_semlockZ _get_value)r!r$r$r%qsizessz Queue.qsizecCs |j S)N)r;)r!r$r$r%emptywsz Queue.emptycCs |jjjS)N)rrK_is_zero)r!r$r$r%fullzsz Queue.fullcCs |jdS)NF)rJ)r!r$r$r% get_nowait}szQueue.get_nowaitcCs |j|dS)NF)rD)r!rAr$r$r% put_nowaitszQueue.put_nowaitc Cs2d|_z|jjWd|j}|r,d|_|XdS)NT)r4rcloser5)r!rRr$r$r%rRsz Queue.closecCs$td|jst|jr |jdS)NzQueue.join_thread())r r4r<r2)r!r$r$r% join_threads zQueue.join_threadc Cs6tdd|_y|jjWntk r0YnXdS)NzQueue.cancel_join_thread()T)r r3r2ZcancelAttributeError)r!r$r$r%cancel_join_threads zQueue.cancel_join_threadcCstd|jjtjtj|j|j|j|j |j j |j fdd|_ d|j _td|j jtd|jst|j tjtj|j gd d|_t|tj|j|jgd d|_dS) NzQueue._start_thread()ZQueueFeederThread)targetargsnameTzdoing self._thread.start()z... done self._thread.start())Z exitpriority )r r0clearr+ZThreadr_feedr-r7rrrRrr1Zdaemonstartr3r _finalize_joinweakrefrefr2_finalize_closer5)r!r$r$r%r>s(       zQueue._start_threadcCs4td|}|dk r(|jtdntddS)Nzjoining queue threadz... queue thread joinedz... queue thread already dead)r join)ZtwrZthreadr$r$r%r_s  zQueue._finalize_joinc Cs.td||jt|jWdQRXdS)Nztelling queue thread to quit)r r? _sentinelr@)buffernotemptyr$r$r%rbs zQueue._finalize_closecCsPtd|j}|j}|j}|j} t} tjdkr<|j} |j} nd} xy|z|sX|Wd|Xybx\| } | | krtd|dStj | } | dkr|| qh| z || Wd| XqhWWnt k rYnXWqDt k rF}zJ|rt |ddt jkrdStr&td|dSddl}|jWYdd}~XqDXqDWdS)Nz$starting thread to feed data to piperz%feeder thread got sentinel -- exitingerrnorzerror in queue thread: %s)r r=rEwaitpopleftrdrrrGdumps IndexError ExceptiongetattrrgZEPIPErr traceback print_exc)rerfr6Z writelockrRZ ignore_epipeZnacquireZnreleaseZnwaitZbpopleftsentinelZwacquireZwreleaserAernr$r$r%r]sR       z Queue._feed)r)TN)TN)__name__ __module__ __qualname__r&r(r*r rDrJrLrMrOrPrQrRrSrUr> staticmethodr_rbr]r$r$r$r%r"s$    c@s@eZdZdddZddZddZdd d Zd d ZddZd S)rrcCs*tj|||d|jd|_|j|_dS)N)r#r)rr&Z Semaphore_unfinished_tasksr,_cond)r!r"r#r$r$r%r&s zJoinableQueue.__init__cCstj||j|jfS)N)rr(rwrv)r!r$r$r%r(szJoinableQueue.__getstate__cCs,tj||dd|dd\|_|_dS)Nry)rr*rwrv)r!r)r$r$r%r*szJoinableQueue.__setstate__TNcCsx|j s t|jj||st|jJ|j8|jdkr@|j|j j ||j j |jj WdQRXWdQRXdS)N)r4r<rr=rr-rwr1r>r0r?rvrEr@)r!rArBrCr$r$r%rDs    zJoinableQueue.putc Cs@|j0|jjdstd|jjjr2|jjWdQRXdS)NFz!task_done() called too many times)rwrvr= ValueErrorrKrNZ notify_all)r!r$r$r% task_done's   zJoinableQueue.task_donec Cs,|j|jjjs|jjWdQRXdS)N)rwrvrKrNrh)r!r$r$r%rc.s zJoinableQueue.join)r)TN) rrrsrtr&r(r*rDr{rcr$r$r$r%r s   c@s<eZdZddZddZddZddZd d Zd d Zd S)rcCsHtjdd\|_|_|j|_|jj|_tj dkr:d|_ n |j|_ dS)NF)rr) rrrrrrr:r;rrr)r!r#r$r$r%r&9s    zSimpleQueue.__init__cCs |j S)N)r;)r!r$r$r%rMBszSimpleQueue.emptycCstj||j|j|j|jfS)N)r r'rrrr)r!r$r$r%r(Es zSimpleQueue.__getstate__cCs"|\|_|_|_|_|jj|_dS)N)rrrrr:r;)r!r)r$r$r%r*IszSimpleQueue.__setstate__c Cs&|j|jj}WdQRXtj|S)N)rrr8rGrH)r!rIr$r$r%rJMszSimpleQueue.getc CsDtj|}|jdkr"|jj|n|j|jj|WdQRXdS)N)rGrjrrr6)r!rAr$r$r%rDSs   zSimpleQueue.putN) rrrsrtr&rMr(r*rJrDr$r$r$r%r7s  )__all__rrr+r.rFr`rgZqueuerrZ_multiprocessingrr Z reductionZForkingPicklerrGutilr r r r robjectrrdrrr$r$r$r% s$   b *__pycache__/heap.cpython-36.opt-2.pyc000064400000013405147221272370013271 0ustar003 \ @sddlZddlZddlZddlZddlZddlZddlmZmZddl m Z dgZ ej dkrvddl Z GdddeZn,Gd ddeZd d Zd d ZejeeGdddeZGdddeZdS)N) reductionassert_spawning)util BufferWrapperZwin32c@s,eZdZejZddZddZddZdS)ArenacCsz||_xTtdD]@}dtjt|jf}tjd||d}tjdkrHP|j qWt d||_ ||_ |j|j f|_ dS)Ndz pym-%d-%sr)tagnamerzCannot find name for new mmap)sizerangeosgetpidnext_randmmap_winapiZ GetLastErrorcloseFileExistsErrornamebuffer_state)selfr irZbufr,/usr/lib64/python3.6/multiprocessing/heap.py__init__"s  zArena.__init__cCst||jS)N)rr)rrrr __getstate__1szArena.__getstate__cCs,|\|_|_|_tjd|j|jd|_dS)Nr)r r )r rrrr)rstaterrr __setstate__5szArena.__setstate__N) __name__ __module__ __qualname__tempfileZ_RandomNameSequencerrrrrrrrrsrc@seZdZdddZdS)rrc Cs||_||_|d krtjdtjtjd\|_}tj|tj |tj |jft |jdddN}d }||krd|}xt ||D]}|j |qW~|j d||WdQRXtj|j|j|_dS) Nrzpym-%d-)prefixdirwbF)closefdir i)r fdr#Zmkstempr rrZ get_temp_dirunlinkFinalizeropenr writerr)rr r)rfZbsZzeros_rrrr@s"  zArena.__init__Nr )r )r r!r"rrrrrr>scCs(|jdkrtdt|jtj|jffS)NrzDArena is unpicklable because forking was enabled when it was createdr )r) ValueError rebuild_arenar rZDupFd)arrr reduce_arenaSs r3cCst||jS)N)rdetach)r Zdupfdrrrr1Ysr1c@sZeZdZdZejfddZeddZddZ dd Z d d Z d d Z ddZ ddZdS)HeapcCsJtj|_tj|_||_g|_i|_i|_ i|_ t |_ g|_ g|_dS)N)r r_lastpid threadingZLock_lock_size_lengths _len_to_seq_start_to_block_stop_to_blockset_allocated_blocks_arenas_pending_free_blocks)rr rrrrfs  z Heap.__init__cCs|d}|||@S)Nrr)nZ alignmentmaskrrr_roundupssz Heap._roundupc Cstj|j|}|t|jkrj|jt|j|tj}|jd9_t j d|t |}|j j ||d|fS|j|}|j|}|j}|s|j|=|j|=|\}}}|j||f=|j||f=|S)Nz"allocating a new mmap of length %dr)bisectZ bisect_leftr;lenrEmaxr:rPAGESIZErinforrAappendr<popr=r>) rr rlengtharenaseqblockstartstoprrr_mallocys"        z Heap._mallocc Cs|\}}}y|j||f}Wntk r0YnX|j|\}}y|j||f}Wntk rfYnX|j|\}}|||f}||}y|j|j|Wn.tk r|g|j|<tj|j|YnX||j||f<||j||f<dS)N) r>KeyError_absorbr=r<rLrGZinsortr;) rrQrOrRrSZ prev_blockr/Z next_blockrNrrr_frees(   z Heap._freecCs^|\}}}|j||f=|j||f=||}|j|}|j||sV|j|=|jj|||fS)N)r=r>r<remover;)rrQrOrRrSrNrPrrrrVs      z Heap._absorbc CsFx@y|jj}Wntk r&PYnX|jj||j|qWdS)N)rBrM IndexErrorr@rXrW)rrQrrr_free_pending_blockss zHeap._free_pending_blocksc CsN|jjds|jj|n0z"|j|jj||j|Wd|jjXdS)NF) r9acquirerBrLrZr@rXrWrelease)rrQrrrfrees  z Heap.freec Cstj|jkr|j|jh|j|jt|d|j}|j |\}}}||}||krj|j |||f|||f}|j j ||SQRXdS)Nr) r rr7rr9rZrErI _alignmentrTrWr@add)rr rOrRrSZnew_stoprQrrrmallocs  z Heap.mallocN)r r!r"r^rrJr staticmethodrErTrWrVrZr]r`rrrrr5bs  r5c@s"eZdZeZddZddZdS)rcCs0tjj|}||f|_tj|tjj|fddS)N)args)r_heapr`rrr+r])rr rQrrrrs  zBufferWrapper.__init__cCs&|j\\}}}}t|j|||S)N)r memoryviewr)rrOrRrSr rrrcreate_memoryviewszBufferWrapper.create_memoryviewN)r r!r"r5rcrrerrrrrs)rGrr sysr#r8contextrrr__all__platformrobjectrr3r1registerr5rrrrr s$    __pycache__/connection.cpython-36.pyc000064400000060366147221272370013563 0ustar003 /fVy @s ddddgZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z m Z dd lmZejZy$ddlZdd lmZmZmZmZWn$ek rejd kr‚dZYnXd Zd ZdZejZdZdgZe edrdZedg7Zejd krdZedg7ZefddZ!ddZ"ddZ#ddZ$ddZ%GdddZ&ernGddde&Z'Gd d!d!e&Z(Gd"dde)Z*dPd#dZ+ejd krdQd%dZ,n dRd&dZ,Gd'd(d(e)Z-d)d*Z.ejd krGd+d,d,e)Z/d-d.Z0d/Z1d0Z2d1Z3d2Z4d3d4Z5d5d6Z6Gd7d8d8e)Z7d9d:Z8d;d<Z9Gd=d>d>e*Z:d?d@Z;ejd krzdAdBZhZ?dSdCdZ@n,ddlAZAe eAdDreAjBZCneAjDZCdTdEdZ@ejd krdFdGZEdHdIZFejGe(eEdJdKZHdLdMZIejGe'eHndNdGZEdOdIZFejGe(eEdS)UClientListenerPipewaitN)util)AuthenticationErrorBufferTooShort) reduction) WAIT_OBJECT_0WAIT_ABANDONED_0 WAIT_TIMEOUTINFINITEwin32i g4@Zsha256AF_INETAF_UNIXAF_PIPEcCs tj|S)N)time monotonic)timeoutr"/usr/lib64/python3.6/connection.py _init_timeout?srcCs tj|kS)N)rr)trrr_check_timeoutBsrcCsX|dkr d S|dkr&tjdtjdS|dkrLtjdtjttfd dStd d S) z? Return an arbitrary free address for the given family r localhostrrz listener-)prefixdirrz\\.\pipe\pyc-%d-%d-zunrecognized familyN)rr) tempfileZmktemprZ get_temp_dirosgetpidnext _mmap_counter ValueError)familyrrrarbitrary_addressIsr&cCsJtjdkr|dkrtd|tjdkrF|dkrFtt|sFtd|dS)zD Checks if the family is valid for the current environment. rrzFamily %s is not recognized.rN)sysplatformr$hasattrsocket)r%rrr_validate_familyWs   r+cCsJt|tkrdSt|tkr*|jdr*dSt|tkr:dStd|dS)z] Return the types of the address This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE' rz\\rrzaddress type of %r unrecognizedN)typetuplestr startswithr$)addressrrr address_typecs  r1c@seZdZdZd+ddZddZddZd d Zd d Zd dZ e ddZ e ddZ e ddZ ddZddZd,ddZddZd-ddZd.d d!Zd"d#Zd/d%d&Zd'd(Zd)d*ZdS)0_ConnectionBaseNTcCsB|j}|dkrtd| r,| r,td||_||_||_dS)Nrzinvalid handlez6at least one of `readable` and `writable` must be True) __index__r$_handle _readable _writable)selfhandlereadablewritablerrr__init__ys z_ConnectionBase.__init__cCs|jdk r|jdS)N)r4_close)r7rrr__del__s z_ConnectionBase.__del__cCs|jdkrtddS)Nzhandle is closed)r4OSError)r7rrr _check_closeds z_ConnectionBase._check_closedcCs|jstddS)Nzconnection is write-only)r5r>)r7rrr_check_readablesz_ConnectionBase._check_readablecCs|jstddS)Nzconnection is read-only)r6r>)r7rrr_check_writablesz_ConnectionBase._check_writablecCs"|jrd|_n|jtddS)NFzbad message length)r6r5closer>)r7rrr_bad_message_lengthsz#_ConnectionBase._bad_message_lengthcCs |jdkS)z True if the connection is closedN)r4)r7rrrclosedsz_ConnectionBase.closedcCs|jS)z"True if the connection is readable)r5)r7rrrr9sz_ConnectionBase.readablecCs|jS)z"True if the connection is writable)r6)r7rrrr:sz_ConnectionBase.writablecCs|j|jS)z+File descriptor or handle of the connection)r?r4)r7rrrfilenosz_ConnectionBase.filenoc Cs$|jdk r z |jWdd|_XdS)zClose the connectionN)r4r<)r7rrrrBs  z_ConnectionBase.closercCs|j|jt|}|jdkr.tt|}t|}|dkrFtd||krVtd|dkrh||}n&|dkrztdn|||krtd|j||||dS)z,Send the bytes data from a bytes-like objectrrzoffset is negativezbuffer length < offsetNzsize is negativezbuffer length < offset + size)r?rA memoryviewitemsizebyteslenr$ _send_bytes)r7bufoffsetsizemnrrr send_bytess"     z_ConnectionBase.send_bytescCs$|j|j|jtj|dS)zSend a (picklable) objectN)r?rArJ_ForkingPicklerdumps)r7objrrrsendsz_ConnectionBase.sendcCsJ|j|j|dk r(|dkr(td|j|}|dkrB|j|jS)z7 Receive bytes data as a bytes object. Nrznegative maxlength)r?r@r$ _recv_bytesrCgetvalue)r7Z maxlengthrKrrr recv_bytess z_ConnectionBase.recv_bytesc Cs|j|jt|}|j}|t|}|dkr>tdn||krNtd|j}|j}|||krvt|j |j d|j |||||||SQRXdS)zq Receive bytes data into a writeable bytes-like object. Return the number of bytes read. rznegative offsetzoffset too largeN) r?r@rFrGrIr$rUtellr rVseekreadinto)r7rKrLrNrGZbytesizeresultrMrrrrecv_bytes_intos"       z_ConnectionBase.recv_bytes_intocCs&|j|j|j}tj|jS)zReceive a (picklable) object)r?r@rUrQloads getbuffer)r7rKrrrrecvsz_ConnectionBase.recvcCs|j|j|j|S)z/Whether there is any input available to be read)r?r@_poll)r7rrrrpollsz_ConnectionBase.pollcCs|S)Nr)r7rrr __enter__sz_ConnectionBase.__enter__cCs |jdS)N)rB)r7exc_type exc_valueexc_tbrrr__exit__ sz_ConnectionBase.__exit__)TT)rN)N)r)r`)__name__ __module__ __qualname__r4r;r=r?r@rArCpropertyrDr9r:rErBrPrTrWr\r_rbrcrgrrrrr2vs(       r2c@sDeZdZdZdZejfddZddZddd Z d d Z d d Z dS)PipeConnectionz Connection class based on a Windows named pipe. Overlapped I/O is used, so the handles must have been created with FILE_FLAG_OVERLAPPED. FcCs||jdS)N)r4)r7Z _CloseHandlerrrr<szPipeConnection._closecCstj|j|dd\}}zHy,|tjkrBtj|jgdt}|tksBtWn|j YnXWd|j d\}}X|dks|t|t |kstdS)NT) overlappedFr) _winapiZ WriteFiler4ERROR_IO_PENDINGWaitForMultipleObjectseventrr AssertionErrorcancelGetOverlappedResultrI)r7rKoverrwaitresZnwrittenrrrrJs   zPipeConnection._send_bytesNc Cs|jrd|_tjS|dkr dnt|d}ytj|j|dd\}}zHy,|tjkrntj|j gdt }|t ksnt Wn|j YnXWd|jd\}}|dkrtj}|j|j|S|tjkr|j||SXWn:tk r}z|jtjkrtnWYdd}~XnXtddS)NFT)rmrz.shouldn't get here; expected KeyboardInterrupt)_got_empty_messageioBytesIOminrnReadFiler4rorprqrr rrrsrtwriter^ZERROR_MORE_DATA_get_more_datar>winerrorERROR_BROKEN_PIPEEOFError RuntimeError) r7maxsizeZbsizerurvrwZnreadferrrrU*s6     zPipeConnection._recv_bytescCs.|jstj|jddkrdStt|g|S)NrT)ryrn PeekNamedPiper4boolr)r7rrrrraJszPipeConnection._pollcCs|j}tj}|j|tj|jd}|dks6t|dk rVt|||krV|j tj |j|dd\}}|j d\}}|dkst||kst|j|j|S)NrrT)rm) r^rzr{r~rnrr4rrrIrCr}rt)r7rurrKrleftrvZrbytesrrrrPs    zPipeConnection._get_more_data)N) rhrirj__doc__ryrn CloseHandler<rJrUrarrrrrrls rlc@s|eZdZdZer,ejfddZejZ ej Z ne j fddZe jZ e jZ e fddZe fddZd d Zdd d ZddZd S) Connectionzo Connection class based on an arbitrary file descriptor (Unix only), or a socket handle (Windows). cCs||jdS)N)r4)r7r<rrrr<gszConnection._closecCs||jdS)N)r4)r7r<rrrr<lscCs<t|}x.||j|}||8}|dkr(P||d}q WdS)Nr)rIr4)r7rKr~ remainingrOrrr_sendqs zConnection._sendcCsftj}|j}|}xN|dkr`|||}t|}|dkrL||krDtntd|j|||8}qW|S)Nrzgot end of file during message)rzr{r4rIrr>r~)r7rMreadrKr8rchunkrOrrr_recvzs    zConnection._recvcCsDt|}tjd|}|dkr2|j||j|n|j||dS)Nz!ii@)rIstructpackr)r7rKrOheaderrrrrJs    zConnection._send_bytesNcCs:|jd}tjd|j\}|dk r0||kr0dS|j|S)Nz!i)rrunpackrV)r7rrKrMrrrrUs  zConnection._recv_bytescCst|g|}t|S)N)rr)r7rrrrrras zConnection._poll)N)rhrirjrrn_multiprocessingZ closesocketr<rTZ_writer_Z_readr rBr~rrrrJrUrarrrrr`s  rc@sReZdZdZdddZddZdd Zed d Zed d Z d dZ ddZ dS)rz Returns a listener object. This is a wrapper for a bound socket which is 'listening' for connections, or for a Windows named pipe. NrcCsr|p|rt|pt}|pt|}t||dkr>t|||_nt||||_|dk rht|t rht d||_ dS)Nrzauthkey should be a byte string) r1default_familyr&r+ PipeListener _listenerSocketListener isinstancerH TypeError_authkey)r7r0r%backlogauthkeyrrrr;s zListener.__init__cCs>|jdkrtd|jj}|jr:t||jt||j|S)zz Accept a connection on the bound socket or named pipe of `self`. Returns a `Connection` object. Nzlistener is closed)rr>acceptrdeliver_challengeanswer_challenge)r7crrrrs    zListener.acceptcCs |j}|dk rd|_|jdS)zA Close the bound socket or named pipe of `self`. N)rrB)r7ZlistenerrrrrBszListener.closecCs|jjS)N)r_address)r7rrrszListener.cCs|jjS)N)r_last_accepted)r7rrrrscCs|S)Nr)r7rrrrcszListener.__enter__cCs |jdS)N)rB)r7rdrerfrrrrgszListener.__exit__)NNrN) rhrirjrr;rrBrkr0Z last_acceptedrcrgrrrrrs   cCsj|p t|}t||dkr&t|}nt|}|dk rJt|t rJtd|dk rft||t|||S)z= Returns a connection to the address of a `Listener` rNzauthkey should be a byte string) r1r+ PipeClient SocketClientrrHrrr)r0r%rrrrrrs    TcCsj|r>tj\}}|jd|jdt|j}t|j}n$tj\}}t|dd}t|dd}||fS)zL Returns pair of connection objects at either end of a pipe TF)r:)r9)r*Z socketpair setblockingrdetachr pipe)duplexs1s2c1c2Zfd1Zfd2rrrrs       c Cstd}|r*tj}tjtjB}tt}}ntj}tj}dt}}tj||tjBtj Btj tj Btj Bd||tj tj}tj||dtjtjtjtj}tj|tj ddtj|dd}|jd\} } | dkstt||d} t||d} | | fS) zL Returns pair of connection objects at either end of a pipe rrrNT)rm)r:)r9)r&rnPIPE_ACCESS_DUPLEX GENERIC_READ GENERIC_WRITEBUFSIZEZPIPE_ACCESS_INBOUNDCreateNamedPipeFILE_FLAG_OVERLAPPEDFILE_FLAG_FIRST_PIPE_INSTANCEPIPE_TYPE_MESSAGEPIPE_READMODE_MESSAGE PIPE_WAITNMPWAIT_WAIT_FOREVERNULL CreateFile OPEN_EXISTINGSetNamedPipeHandleStateConnectNamedPipertrrrl) rr0ZopenmodeaccessZobsizeZibsizeZh1Zh2rm_rvrrrrrr s4          c@s*eZdZdZd ddZddZddZd S) rzO Representation of a socket which is bound to an address and listening rcCstjtt||_yRtjdkr2|jjtjtjd|jjd|jj ||jj ||jj |_ Wn t k r|jjYnX||_d|_|dkrtj|tj|fdd|_nd|_dS)NposixrTrr)args exitpriority)r*getattr_socketr nameZ setsockoptZ SOL_SOCKETZ SO_REUSEADDRrZbindZlistenZ getsocknamerr>rBZ_familyrrFinalizeunlink_unlink)r7r0r%rrrrr;<s$       zSocketListener.__init__cCs&|jj\}|_|jdt|jS)NT)rrrrrr)r7srrrrTs zSocketListener.acceptc Cs0z|jjWd|j}|dk r*d|_|XdS)N)rrBr)r7rrrrrBYs zSocketListener.closeN)r)rhrirjrr;rrBrrrrr8s rc CsDt|}tjtt|"}|jd|j|t|jSQRXdS)zO Return a connection object connected to the socket given by `address` TN)r1r*rrZconnectrr)r0r%rrrrrcs   rc@s8eZdZdZd ddZd ddZdd Zed d ZdS)rz0 Representation of a named pipe NcCsL||_|jddg|_d|_tjd|jtj|tj|j|jfdd|_ dS)NT)firstz listener created with address=%rr)rr) r _new_handle _handle_queuerr sub_debugrr_finalize_pipe_listenerrB)r7r0rrrrr;wszPipeListener.__init__Fc CsHtjtjB}|r|tjO}tj|j|tjtjBtjBtj t t tj tj S)N) rnrrrrrrrrZPIPE_UNLIMITED_INSTANCESrrr)r7rflagsrrrrs   zPipeListener._new_handlecCs|jj|j|jjd}ytj|dd}Wn0tk r^}z|jtjkrNWYdd}~Xn\XzrZ ERROR_NO_DATArprqrrsrrtrrrl)r7r8rurresrrvrrrrs"    zPipeListener.acceptcCs(tjd|x|D]}tj|qWdS)Nz closing listener with address=%r)rrrnr)Zqueuer0r8rrrrs  z$PipeListener._finalize_pipe_listener)N)F) rhrirjrr;rr staticmethodrrrrrrss  rcCst}x~y6tj|dtj|tjtjBdtjtjtjtj}Wn>t k r|}z"|j tj tj fksjt |rlWYdd}~XqXPqWtj|tjddt|S)zU Return a connection object connected to the pipe given by `address` irN)rrnZ WaitNamedPiperrrrrrr>rZERROR_SEM_TIMEOUTZERROR_PIPE_BUSYrrrrl)r0rhrrrrrs"   rs #CHALLENGE#s #WELCOME#s #FAILURE#cCstddl}t|tsttjt}|jt||j ||t j }|j d}||kr^|jt n|jttddS)Nrzdigest received was wrong)hmacrrHrrr urandomMESSAGE_LENGTHrP CHALLENGEnewHMAC_DIGEST_NAMEdigestrWWELCOMEFAILUREr) connectionrrmessagerresponserrrrs    rcCsddl}t|tst|jd}|dtttks@td||ttd}|j||tj }|j ||jd}|t krt ddS)Nrrz message = %rzdigest sent was rejected) rrrHrrrWrIrrrrrPrr)rrrrrrrrrrs    rc@s$eZdZddZddZddZdS)ConnectionWrappercCs:||_||_||_x"dD]}t||}t|||qWdS)NrErBrbrWrP)rErBrbrWrP)_conn_dumps_loadsrsetattr)r7connrRr]attrrSrrrr;s   zConnectionWrapper.__init__cCs|j|}|jj|dS)N)rrrP)r7rSrrrrrTs zConnectionWrapper.sendcCs|jj}|j|S)N)rrWr)r7rrrrr_s zConnectionWrapper.recvN)rhrirjr;rTr_rrrrrsrcCstj|fddddjdS)Nrzutf-8) xmlrpclibrRencode)rSrrr _xml_dumpssrcCstj|jd\\}}|S)Nzutf-8)rr]decode)rrSmethodrrr _xml_loadssrc@seZdZddZdS) XmlListenercCs ddljatj|}t|ttS)Nr) xmlrpc.clientclientrrrrrr)r7rSrrrrs  zXmlListener.acceptN)rhrirjrrrrrrsrcOsddljatt||ttS)Nr)rrrrrrr)rkwdsrrr XmlClient s rcCst|}g}x|rtj|d|}|tkr,Pn\t|koFtt|knrV|t8}n2t|koptt|knr|t8}ntd|j||||dd}d}qW|S)NFzShould not get hererr) listrnrpr r rIr rr)ZhandlesrLreadyrrrr_exhaustive_waits    rc .sn|dkrt}n|dkrd}nt|dd}t|}ig}tt}zHx2|D](}yt|d}Wn tk r||j<YqTXytj|dd\}}Wn8t k r}zd|j }}|t krʂWYdd}~XnX|tj kr|j |||j<qT|rptjdddkrpy|jd \} }Wn*t k rT}z |j }WYdd}~XnX| rpt|d rpd|_j|d}qTWtj|}Wdx|D]}|jqWx|D]}y|jd\} }Wn6t k r}z|j }|t krWYdd}~XnX|tjkr|j}j||dkrt|d rd|_qWXjfd d |Dfd d|DS)z Wait till an object in object_list is ready/readable. Returns list of those objects in object_list which are ready/readable. Nrig?rETFryc3s|]}|VqdS)Nr).0r)waithandle_to_objrr vszwait..csg|]}|kr|qSrr)ro) ready_objectsrr wszwait..)rr)rintrsetrAttributeErrorr3rnr}r>r _ready_errorsrorrqr'Zgetwindowsversionrtr)ryaddrkeysrsZERROR_OPERATION_ABORTEDupdate) object_listrZov_listZ ready_handlesrrErurvrrr)rrrr+sh              PollSelectorc Cstx}x|D]}|j|tjqW|dk r8tj|}x@|j|}|rVdd|DS|dk r:|tj}|dkr:|Sq:WWdQRXdS)z Wait till an object in object_list is ready/readable. Returns list of those objects in object_list which are ready/readable. NcSsg|]\}}|jqSr)Zfileobj)rkeyZeventsrrrrszwait..r) _WaitSelectorregister selectorsZ EVENT_READrrZselect)r rZselectorrSZdeadlinerrrrrs    c CsN|j}tj|tjtj*}ddlm}|j|}t||j |j ffSQRXdS)Nr)resource_sharer) rEr*ZfromfdrZ SOCK_STREAMrrZ DupSocketrebuild_connectionr9r:)rr8rrdsrrrreduce_connections   rcCs|j}t|j||S)N)rr)rr9r:ZsockrrrrsrcCsB|jr tjnd|jrtjndB}tj|j|}t||j|jffS)Nr) r9rnZFILE_GENERIC_READr:ZFILE_GENERIC_WRITEr Z DupHandlerErebuild_pipe_connection)rrdhrrrreduce_pipe_connectionsrcCs|j}t|||S)N)rrl)rr9r:r8rrrrsrcCs tj|j}t||j|jffS)N)r ZDupFdrErr9r:)rdfrrrrscCs|j}t|||S)N)rr)rr9r:fdrrrrs)NN)T)T)N)N)J__all__rzr r'r*rrr itertoolsrrrrr contextr ZForkingPicklerrQrnr r r r ImportErrorr(rZCONNECTION_TIMEOUTrcountr#rZfamiliesr)rrr&r+r1r2rlrobjectrrrrrrrrrrrrrrrrrrrrZERROR_NETNAME_DELETEDr rrrrZSelectSelectorrrrrrrrrr s           PJ8    ,+ 8    P    __pycache__/context.cpython-36.opt-1.pyc000064400000031432147221272370014037 0ustar003 \*@sddlZddlZddlZddlmZddlmZgZGdddeZGdddeZ Gd d d eZ Gd d d eZ Gd dde Z GdddejZGddde ZeddeeDe_ejdkrPGdddejZGdddejZGdddejZGddde ZGddde ZGd d!d!e Zeeed"Zeed#Zn8Gd$ddejZGd%dde Zd&eiZeed&Zd'd(ZejZd)d*Zd+d,Z d-d.Z!dS)/N)process) reductionc@s eZdZdS) ProcessErrorN)__name__ __module__ __qualname__r r /usr/lib64/python3.6/context.pyrsrc@s eZdZdS)BufferTooShortN)rrrr r r r r sr c@s eZdZdS) TimeoutErrorN)rrrr r r r r sr c@s eZdZdS)AuthenticationErrorN)rrrr r r r r sr c@sVeZdZeZeZeZeZeej Z eej Z ddZ ddZ dBddZ dd Zd d ZdCd dZdDddZdEddZddZdFddZdGddZdHddZddZd d fd fdd Zd!d"Zd#d$Zdd%d&d'Zdd%d(d)Zd*d+Zd,d-ZdId.d/Zd0d1Z d2d3Z!d4d5Z"dJd6d7Z#dKd9d:Z$dLd;d<Z%e&d=d>Z'e'j(d?d>Z'd@dAZ)d S)M BaseContextcCs"tj}|dkrtdn|SdS)z(Returns the number of CPUs in the systemNzcannot determine number of cpus)os cpu_countNotImplementedError)selfZnumr r r r(s zBaseContext.cpu_countcCs&ddlm}||jd}|j|S)zReturns a manager associated with a running server process The managers methods such as `Lock()`, `Condition()` and `Queue()` can be used to create shared objects. r) SyncManager)ctx)Zmanagersr get_contextstart)rrmr r r Manager0s zBaseContext.ManagerTcCsddlm}||S)z1Returns two connection object connected by a piper)Pipe) connectionr)rZduplexrr r r r;s zBaseContext.PipecCsddlm}||jdS)z#Returns a non-recursive lock objectr)Lock)r) synchronizerr)rrr r r r@s zBaseContext.LockcCsddlm}||jdS)zReturns a recursive lock objectr)RLock)r)rrr)rrr r r rEs zBaseContext.RLockNcCsddlm}|||jdS)zReturns a condition objectr) Condition)r)rrr)rlockrr r r rJs zBaseContext.ConditionrcCsddlm}|||jdS)zReturns a semaphore objectr) Semaphore)r)rr r)rvaluer r r r r Os zBaseContext.SemaphorecCsddlm}|||jdS)z"Returns a bounded semaphore objectr)BoundedSemaphore)r)rr"r)rr!r"r r r r"Ts zBaseContext.BoundedSemaphorecCsddlm}||jdS)zReturns an event objectr)Event)r)rr#r)rr#r r r r#Ys zBaseContext.EventcCs ddlm}|||||jdS)zReturns a barrier objectr)Barrier)r)rr$r)rZpartiesactionZtimeoutr$r r r r$^s zBaseContext.BarrierrcCsddlm}|||jdS)zReturns a queue objectr)Queue)r)queuesr&r)rmaxsizer&r r r r&cs zBaseContext.QueuecCsddlm}|||jdS)zReturns a queue objectr) JoinableQueue)r)r'r)r)rr(r)r r r r)hs zBaseContext.JoinableQueuecCsddlm}||jdS)zReturns a queue objectr) SimpleQueue)r)r'r*r)rr*r r r r*ms zBaseContext.SimpleQueuecCs"ddlm}||||||jdS)zReturns a process pool objectr)Pool)context)Zpoolr+r)rZ processesZ initializerZinitargsZmaxtasksperchildr+r r r r+rs  zBaseContext.PoolcGsddlm}||f|S)zReturns a shared objectr)RawValue) sharedctypesr-)rtypecode_or_typeargsr-r r r r-ys zBaseContext.RawValuecCsddlm}|||S)zReturns a shared arrayr)RawArray)r.r1)rr/size_or_initializerr1r r r r1~s zBaseContext.RawArray)rcGs&ddlm}||f|||jdS)z$Returns a synchronized shared objectr)Value)rr)r.r3r)rr/rr0r3r r r r3s  zBaseContext.ValuecCs ddlm}|||||jdS)z#Returns a synchronized shared arrayr)Array)rr)r.r4r)rr/r2rr4r r r r4s zBaseContext.ArraycCs,tjdkr(ttddr(ddlm}|dS)zCheck whether this is a fake forked process in a frozen executable. If so then run code specified by commandline and exit. win32frozenFr)freeze_supportN)sysplatformgetattrspawnr7)rr7r r r r7s zBaseContext.freeze_supportcCsddlm}|S)zZReturn package logger -- if it does not already exist then it is created. r) get_logger)utilr<)rr<r r r r<s zBaseContext.get_loggercCsddlm}||S)z8Turn on logging and add a handler which prints to stderrr) log_to_stderr)r=r>)rlevelr>r r r r>s zBaseContext.log_to_stderrcCsddlm}dS)zVInstall support for sending connections and sockets between processes r)rN)r)rrr r r allow_connection_picklingsz%BaseContext.allow_connection_picklingcCsddlm}||dS)zSets the path to a python.exe or pythonw.exe binary used to run child processes instead of sys.executable when using the 'spawn' start method. Useful for people embedding Python. r)set_executableN)r;rB)r executablerBr r r rBs zBaseContext.set_executablecCsddlm}||dS)zkSet list of module names to try to load in forkserver process. This is really just a hint. r)set_forkserver_preloadN) forkserverrD)rZ module_namesrDr r r rDs z"BaseContext.set_forkserver_preloadc CsF|dkr |Sy t|}Wn tk r8td|YnX|j|S)Nzcannot find context for %r)_concrete_contextsKeyError ValueError_check_available)rmethodrr r r rs zBaseContext.get_contextFcCs|jS)N)_name)r allow_noner r r get_start_methodszBaseContext.get_start_methodcCs tddS)Nz+cannot set start method of concrete context)rH)rrJforcer r r set_start_methodszBaseContext.set_start_methodcCs tjdS)z_Controls how objects will be reduced to a form that can be shared with other processes.r)globalsget)rr r r reducerszBaseContext.reducercCs|td<dS)Nr)rP)rrr r r rRscCsdS)Nr )rr r r rIszBaseContext._check_available)T)N)r)r)NN)r)r)N)N)F)F)*rrrrr r r staticmethodrZcurrent_processZactive_childrenrrrrrrr r"r#r$r&r)r*r+r-r1r3r4r7r<r>rArBrDrrMrOpropertyrRsetterrIr r r r rsJ              rc@seZdZdZeddZdS)ProcessNcCstjjj|S)N)_default_contextrrV_Popen) process_objr r r rXszProcess._Popen)rrr _start_methodrSrXr r r r rVsrVcsFeZdZeZddZd fdd ZdddZdd d Zd d ZZ S)DefaultContextcCs||_d|_dS)N)rW_actual_context)rr,r r r __init__szDefaultContext.__init__Ncs0|dkr |jdkr|j|_|jStj|SdS)N)r\rWsuperr)rrJ) __class__r r rs  zDefaultContext.get_contextFcCs>|jdk r| rtd|dkr.|r.d|_dS|j||_dS)Nzcontext has already been set)r\ RuntimeErrorr)rrJrNr r r rOs  zDefaultContext.set_start_methodcCs"|jdkr|rdS|j|_|jjS)N)r\rWrK)rrLr r r rMs  zDefaultContext.get_start_methodcCs,tjdkrdgStjr dddgSddgSdS)Nr5r;forkrE)r8r9rHAVE_SEND_HANDLE)rr r r get_all_start_methodss   z$DefaultContext.get_all_start_methods)N)F)F) rrrrVr]rrOrMrc __classcell__r r )r_r r[s   r[ccs|]}|ddkr|VqdS)r_Nr ).0xr r r srhr5c@seZdZdZeddZdS) ForkProcessracCsddlm}||S)Nr)Popen)Z popen_forkrj)rYrjr r r rXs zForkProcess._PopenN)rrrrZrSrXr r r r risric@seZdZdZeddZdS) SpawnProcessr;cCsddlm}||S)Nr)rj)Zpopen_spawn_posixrj)rYrjr r r rXs zSpawnProcess._PopenN)rrrrZrSrXr r r r rksrkc@seZdZdZeddZdS)ForkServerProcessrEcCsddlm}||S)Nr)rj)Zpopen_forkserverrj)rYrjr r r rX s zForkServerProcess._PopenN)rrrrZrSrXr r r r rlsrlc@seZdZdZeZdS) ForkContextraN)rrrrKrirVr r r r rm%srmc@seZdZdZeZdS) SpawnContextr;N)rrrrKrkrVr r r r rn)srnc@seZdZdZeZddZdS)ForkServerContextrEcCstjstddS)Nz%forkserver start method not available)rrbrH)rr r r rI0sz"ForkServerContext._check_availableN)rrrrKrlrVrIr r r r ro-sro)rar;rErac@seZdZdZeddZdS)rkr;cCsddlm}||S)Nr)rj)Zpopen_spawn_win32rj)rYrjr r r rX?s zSpawnProcess._PopenN)rrrrZrSrXr r r r rk=sc@seZdZdZeZdS)rnr;N)rrrrKrkrVr r r r rnDsr;cCst|t_dS)N)rFrWr\)rJr r r _force_start_methodQsrpcCs ttddS)Nspawning_popen)r:_tlsr r r r get_spawning_popenZsrscCs |t_dS)N)rrrq)popenr r r set_spawning_popen]srucCs tdkrtdt|jdS)NzF%s objects should only be shared between processes through inheritance)rsr`typer)objr r r assert_spawning`s rx)"rr8Z threadingr@rr__all__ Exceptionrr r r objectrZ BaseProcessrVr[listdirr9rirkrlrmrnrorFrWrpZlocalrrrsrurxr r r r sD  >'    context.py000064400000025771147221272370006625 0ustar00import os import sys import threading from . import process from . import reduction __all__ = () # # Exceptions # class ProcessError(Exception): pass class BufferTooShort(ProcessError): pass class TimeoutError(ProcessError): pass class AuthenticationError(ProcessError): pass # # Base type for contexts. Bound methods of an instance of this type are included in __all__ of __init__.py # class BaseContext(object): ProcessError = ProcessError BufferTooShort = BufferTooShort TimeoutError = TimeoutError AuthenticationError = AuthenticationError current_process = staticmethod(process.current_process) parent_process = staticmethod(process.parent_process) active_children = staticmethod(process.active_children) def cpu_count(self): '''Returns the number of CPUs in the system''' num = os.cpu_count() if num is None: raise NotImplementedError('cannot determine number of cpus') else: return num def Manager(self): '''Returns a manager associated with a running server process The managers methods such as `Lock()`, `Condition()` and `Queue()` can be used to create shared objects. ''' from .managers import SyncManager m = SyncManager(ctx=self.get_context()) m.start() return m def Pipe(self, duplex=True): '''Returns two connection object connected by a pipe''' from .connection import Pipe return Pipe(duplex) def Lock(self): '''Returns a non-recursive lock object''' from .synchronize import Lock return Lock(ctx=self.get_context()) def RLock(self): '''Returns a recursive lock object''' from .synchronize import RLock return RLock(ctx=self.get_context()) def Condition(self, lock=None): '''Returns a condition object''' from .synchronize import Condition return Condition(lock, ctx=self.get_context()) def Semaphore(self, value=1): '''Returns a semaphore object''' from .synchronize import Semaphore return Semaphore(value, ctx=self.get_context()) def BoundedSemaphore(self, value=1): '''Returns a bounded semaphore object''' from .synchronize import BoundedSemaphore return BoundedSemaphore(value, ctx=self.get_context()) def Event(self): '''Returns an event object''' from .synchronize import Event return Event(ctx=self.get_context()) def Barrier(self, parties, action=None, timeout=None): '''Returns a barrier object''' from .synchronize import Barrier return Barrier(parties, action, timeout, ctx=self.get_context()) def Queue(self, maxsize=0): '''Returns a queue object''' from .queues import Queue return Queue(maxsize, ctx=self.get_context()) def JoinableQueue(self, maxsize=0): '''Returns a queue object''' from .queues import JoinableQueue return JoinableQueue(maxsize, ctx=self.get_context()) def SimpleQueue(self): '''Returns a queue object''' from .queues import SimpleQueue return SimpleQueue(ctx=self.get_context()) def Pool(self, processes=None, initializer=None, initargs=(), maxtasksperchild=None): '''Returns a process pool object''' from .pool import Pool return Pool(processes, initializer, initargs, maxtasksperchild, context=self.get_context()) def RawValue(self, typecode_or_type, *args): '''Returns a shared object''' from .sharedctypes import RawValue return RawValue(typecode_or_type, *args) def RawArray(self, typecode_or_type, size_or_initializer): '''Returns a shared array''' from .sharedctypes import RawArray return RawArray(typecode_or_type, size_or_initializer) def Value(self, typecode_or_type, *args, lock=True): '''Returns a synchronized shared object''' from .sharedctypes import Value return Value(typecode_or_type, *args, lock=lock, ctx=self.get_context()) def Array(self, typecode_or_type, size_or_initializer, *, lock=True): '''Returns a synchronized shared array''' from .sharedctypes import Array return Array(typecode_or_type, size_or_initializer, lock=lock, ctx=self.get_context()) def freeze_support(self): '''Check whether this is a fake forked process in a frozen executable. If so then run code specified by commandline and exit. ''' if sys.platform == 'win32' and getattr(sys, 'frozen', False): from .spawn import freeze_support freeze_support() def get_logger(self): '''Return package logger -- if it does not already exist then it is created. ''' from .util import get_logger return get_logger() def log_to_stderr(self, level=None): '''Turn on logging and add a handler which prints to stderr''' from .util import log_to_stderr return log_to_stderr(level) def allow_connection_pickling(self): '''Install support for sending connections and sockets between processes ''' # This is undocumented. In previous versions of multiprocessing # its only effect was to make socket objects inheritable on Windows. from . import connection def set_executable(self, executable): '''Sets the path to a python.exe or pythonw.exe binary used to run child processes instead of sys.executable when using the 'spawn' start method. Useful for people embedding Python. ''' from .spawn import set_executable set_executable(executable) def set_forkserver_preload(self, module_names): '''Set list of module names to try to load in forkserver process. This is really just a hint. ''' from .forkserver import set_forkserver_preload set_forkserver_preload(module_names) def get_context(self, method=None): if method is None: return self try: ctx = _concrete_contexts[method] except KeyError: raise ValueError('cannot find context for %r' % method) from None ctx._check_available() return ctx def get_start_method(self, allow_none=False): return self._name def set_start_method(self, method, force=False): raise ValueError('cannot set start method of concrete context') @property def reducer(self): '''Controls how objects will be reduced to a form that can be shared with other processes.''' return globals().get('reduction') @reducer.setter def reducer(self, reduction): globals()['reduction'] = reduction def _check_available(self): pass # # Type of default context -- underlying context can be set at most once # class Process(process.BaseProcess): _start_method = None @staticmethod def _Popen(process_obj): return _default_context.get_context().Process._Popen(process_obj) class DefaultContext(BaseContext): Process = Process def __init__(self, context): self._default_context = context self._actual_context = None def get_context(self, method=None): if method is None: if self._actual_context is None: self._actual_context = self._default_context return self._actual_context else: return super().get_context(method) def set_start_method(self, method, force=False): if self._actual_context is not None and not force: raise RuntimeError('context has already been set') if method is None and force: self._actual_context = None return self._actual_context = self.get_context(method) def get_start_method(self, allow_none=False): if self._actual_context is None: if allow_none: return None self._actual_context = self._default_context return self._actual_context._name def get_all_start_methods(self): if sys.platform == 'win32': return ['spawn'] else: methods = ['spawn', 'fork'] if sys.platform == 'darwin' else ['fork', 'spawn'] if reduction.HAVE_SEND_HANDLE: methods.append('forkserver') return methods # # Context types for fixed start method # if sys.platform != 'win32': class ForkProcess(process.BaseProcess): _start_method = 'fork' @staticmethod def _Popen(process_obj): from .popen_fork import Popen return Popen(process_obj) class SpawnProcess(process.BaseProcess): _start_method = 'spawn' @staticmethod def _Popen(process_obj): from .popen_spawn_posix import Popen return Popen(process_obj) class ForkServerProcess(process.BaseProcess): _start_method = 'forkserver' @staticmethod def _Popen(process_obj): from .popen_forkserver import Popen return Popen(process_obj) class ForkContext(BaseContext): _name = 'fork' Process = ForkProcess class SpawnContext(BaseContext): _name = 'spawn' Process = SpawnProcess class ForkServerContext(BaseContext): _name = 'forkserver' Process = ForkServerProcess def _check_available(self): if not reduction.HAVE_SEND_HANDLE: raise ValueError('forkserver start method not available') _concrete_contexts = { 'fork': ForkContext(), 'spawn': SpawnContext(), 'forkserver': ForkServerContext(), } if sys.platform == 'darwin': # bpo-33725: running arbitrary code after fork() is no longer reliable # on macOS since macOS 10.14 (Mojave). Use spawn by default instead. _default_context = DefaultContext(_concrete_contexts['spawn']) else: _default_context = DefaultContext(_concrete_contexts['fork']) else: class SpawnProcess(process.BaseProcess): _start_method = 'spawn' @staticmethod def _Popen(process_obj): from .popen_spawn_win32 import Popen return Popen(process_obj) class SpawnContext(BaseContext): _name = 'spawn' Process = SpawnProcess _concrete_contexts = { 'spawn': SpawnContext(), } _default_context = DefaultContext(_concrete_contexts['spawn']) # # Force the start method # def _force_start_method(method): _default_context._actual_context = _concrete_contexts[method] # # Check that the current thread is spawning a child process # _tls = threading.local() def get_spawning_popen(): return getattr(_tls, 'spawning_popen', None) def set_spawning_popen(popen): _tls.spawning_popen = popen def assert_spawning(obj): if get_spawning_popen() is None: raise RuntimeError( '%s objects should only be shared between processes' ' through inheritance' % type(obj).__name__ ) forkserver.py000064400000030363147221272370007322 0ustar00import errno import os import selectors import signal import socket import struct import sys import threading import warnings from . import connection from . import process from .context import reduction from . import resource_tracker from . import spawn from . import util __all__ = ['ensure_running', 'get_inherited_fds', 'connect_to_new_process', 'set_forkserver_preload'] # # # MAXFDS_TO_SEND = 256 SIGNED_STRUCT = struct.Struct('q') # large enough for pid_t # # Forkserver class # class ForkServer(object): def __init__(self): self._forkserver_address = None self._forkserver_alive_fd = None self._forkserver_pid = None self._inherited_fds = None self._lock = threading.Lock() self._preload_modules = ['__main__'] def _stop(self): # Method used by unit tests to stop the server with self._lock: self._stop_unlocked() def _stop_unlocked(self): if self._forkserver_pid is None: return # close the "alive" file descriptor asks the server to stop os.close(self._forkserver_alive_fd) self._forkserver_alive_fd = None os.waitpid(self._forkserver_pid, 0) self._forkserver_pid = None if not util.is_abstract_socket_namespace(self._forkserver_address): os.unlink(self._forkserver_address) self._forkserver_address = None def set_forkserver_preload(self, modules_names): '''Set list of module names to try to load in forkserver process.''' if not all(type(mod) is str for mod in self._preload_modules): raise TypeError('module_names must be a list of strings') self._preload_modules = modules_names def get_inherited_fds(self): '''Return list of fds inherited from parent process. This returns None if the current process was not started by fork server. ''' return self._inherited_fds def connect_to_new_process(self, fds): '''Request forkserver to create a child process. Returns a pair of fds (status_r, data_w). The calling process can read the child process's pid and (eventually) its returncode from status_r. The calling process should write to data_w the pickled preparation and process data. ''' self.ensure_running() if len(fds) + 4 >= MAXFDS_TO_SEND: raise ValueError('too many fds') with socket.socket(socket.AF_UNIX) as client: client.connect(self._forkserver_address) parent_r, child_w = os.pipe() child_r, parent_w = os.pipe() allfds = [child_r, child_w, self._forkserver_alive_fd, resource_tracker.getfd()] allfds += fds try: reduction.sendfds(client, allfds) return parent_r, parent_w except: os.close(parent_r) os.close(parent_w) raise finally: os.close(child_r) os.close(child_w) def ensure_running(self): '''Make sure that a fork server is running. This can be called from any process. Note that usually a child process will just reuse the forkserver started by its parent, so ensure_running() will do nothing. ''' with self._lock: resource_tracker.ensure_running() if self._forkserver_pid is not None: # forkserver was launched before, is it still running? pid, status = os.waitpid(self._forkserver_pid, os.WNOHANG) if not pid: # still alive return # dead, launch it again os.close(self._forkserver_alive_fd) self._forkserver_address = None self._forkserver_alive_fd = None self._forkserver_pid = None cmd = ('from multiprocessing.forkserver import main; ' + 'main(%d, %d, %r, **%r)') if self._preload_modules: desired_keys = {'main_path', 'sys_path'} data = spawn.get_preparation_data('ignore') data = {x: y for x, y in data.items() if x in desired_keys} else: data = {} with socket.socket(socket.AF_UNIX) as listener: address = connection.arbitrary_address('AF_UNIX') listener.bind(address) if not util.is_abstract_socket_namespace(address): os.chmod(address, 0o600) listener.listen() # all client processes own the write end of the "alive" pipe; # when they all terminate the read end becomes ready. alive_r, alive_w = os.pipe() try: fds_to_pass = [listener.fileno(), alive_r] cmd %= (listener.fileno(), alive_r, self._preload_modules, data) exe = spawn.get_executable() args = [exe] + util._args_from_interpreter_flags() args += ['-c', cmd] pid = util.spawnv_passfds(exe, args, fds_to_pass) except: os.close(alive_w) raise finally: os.close(alive_r) self._forkserver_address = address self._forkserver_alive_fd = alive_w self._forkserver_pid = pid # # # def main(listener_fd, alive_r, preload, main_path=None, sys_path=None): '''Run forkserver.''' if preload: if '__main__' in preload and main_path is not None: process.current_process()._inheriting = True try: spawn.import_main_path(main_path) finally: del process.current_process()._inheriting for modname in preload: try: __import__(modname) except ImportError: pass util._close_stdin() sig_r, sig_w = os.pipe() os.set_blocking(sig_r, False) os.set_blocking(sig_w, False) def sigchld_handler(*_unused): # Dummy signal handler, doesn't do anything pass handlers = { # unblocking SIGCHLD allows the wakeup fd to notify our event loop signal.SIGCHLD: sigchld_handler, # protect the process from ^C signal.SIGINT: signal.SIG_IGN, } old_handlers = {sig: signal.signal(sig, val) for (sig, val) in handlers.items()} # calling os.write() in the Python signal handler is racy signal.set_wakeup_fd(sig_w) # map child pids to client fds pid_to_fd = {} with socket.socket(socket.AF_UNIX, fileno=listener_fd) as listener, \ selectors.DefaultSelector() as selector: _forkserver._forkserver_address = listener.getsockname() selector.register(listener, selectors.EVENT_READ) selector.register(alive_r, selectors.EVENT_READ) selector.register(sig_r, selectors.EVENT_READ) while True: try: while True: rfds = [key.fileobj for (key, events) in selector.select()] if rfds: break if alive_r in rfds: # EOF because no more client processes left assert os.read(alive_r, 1) == b'', "Not at EOF?" raise SystemExit if sig_r in rfds: # Got SIGCHLD os.read(sig_r, 65536) # exhaust while True: # Scan for child processes try: pid, sts = os.waitpid(-1, os.WNOHANG) except ChildProcessError: break if pid == 0: break child_w = pid_to_fd.pop(pid, None) if child_w is not None: if os.WIFSIGNALED(sts): returncode = -os.WTERMSIG(sts) else: if not os.WIFEXITED(sts): raise AssertionError( "Child {0:n} status is {1:n}".format( pid,sts)) returncode = os.WEXITSTATUS(sts) # Send exit code to client process try: write_signed(child_w, returncode) except BrokenPipeError: # client vanished pass os.close(child_w) else: # This shouldn't happen really warnings.warn('forkserver: waitpid returned ' 'unexpected pid %d' % pid) if listener in rfds: # Incoming fork request with listener.accept()[0] as s: # Receive fds from client fds = reduction.recvfds(s, MAXFDS_TO_SEND + 1) if len(fds) > MAXFDS_TO_SEND: raise RuntimeError( "Too many ({0:n}) fds to send".format( len(fds))) child_r, child_w, *fds = fds s.close() pid = os.fork() if pid == 0: # Child code = 1 try: listener.close() selector.close() unused_fds = [alive_r, child_w, sig_r, sig_w] unused_fds.extend(pid_to_fd.values()) code = _serve_one(child_r, fds, unused_fds, old_handlers) except Exception: sys.excepthook(*sys.exc_info()) sys.stderr.flush() finally: os._exit(code) else: # Send pid to client process try: write_signed(child_w, pid) except BrokenPipeError: # client vanished pass pid_to_fd[pid] = child_w os.close(child_r) for fd in fds: os.close(fd) except OSError as e: if e.errno != errno.ECONNABORTED: raise def _serve_one(child_r, fds, unused_fds, handlers): # close unnecessary stuff and reset signal handlers signal.set_wakeup_fd(-1) for sig, val in handlers.items(): signal.signal(sig, val) for fd in unused_fds: os.close(fd) (_forkserver._forkserver_alive_fd, resource_tracker._resource_tracker._fd, *_forkserver._inherited_fds) = fds # Run process object received over pipe parent_sentinel = os.dup(child_r) code = spawn._main(child_r, parent_sentinel) return code # # Read and write signed numbers # def read_signed(fd): data = b'' length = SIGNED_STRUCT.size while len(data) < length: s = os.read(fd, length - len(data)) if not s: raise EOFError('unexpected EOF') data += s return SIGNED_STRUCT.unpack(data)[0] def write_signed(fd, n): msg = SIGNED_STRUCT.pack(n) while msg: nbytes = os.write(fd, msg) if nbytes == 0: raise RuntimeError('should not get here') msg = msg[nbytes:] # # # _forkserver = ForkServer() ensure_running = _forkserver.ensure_running get_inherited_fds = _forkserver.get_inherited_fds connect_to_new_process = _forkserver.connect_to_new_process set_forkserver_preload = _forkserver.set_forkserver_preload resource_sharer.py000064400000012350147221272370010321 0ustar00# # We use a background thread for sharing fds on Unix, and for sharing sockets on # Windows. # # A client which wants to pickle a resource registers it with the resource # sharer and gets an identifier in return. The unpickling process will connect # to the resource sharer, sends the identifier and its pid, and then receives # the resource. # import os import signal import socket import sys import threading from . import process from .context import reduction from . import util __all__ = ['stop'] if sys.platform == 'win32': __all__ += ['DupSocket'] class DupSocket(object): '''Picklable wrapper for a socket.''' def __init__(self, sock): new_sock = sock.dup() def send(conn, pid): share = new_sock.share(pid) conn.send_bytes(share) self._id = _resource_sharer.register(send, new_sock.close) def detach(self): '''Get the socket. This should only be called once.''' with _resource_sharer.get_connection(self._id) as conn: share = conn.recv_bytes() return socket.fromshare(share) else: __all__ += ['DupFd'] class DupFd(object): '''Wrapper for fd which can be used at any time.''' def __init__(self, fd): new_fd = os.dup(fd) def send(conn, pid): reduction.send_handle(conn, new_fd, pid) def close(): os.close(new_fd) self._id = _resource_sharer.register(send, close) def detach(self): '''Get the fd. This should only be called once.''' with _resource_sharer.get_connection(self._id) as conn: return reduction.recv_handle(conn) class _ResourceSharer(object): '''Manager for resources using background thread.''' def __init__(self): self._key = 0 self._cache = {} self._old_locks = [] self._lock = threading.Lock() self._listener = None self._address = None self._thread = None util.register_after_fork(self, _ResourceSharer._afterfork) def register(self, send, close): '''Register resource, returning an identifier.''' with self._lock: if self._address is None: self._start() self._key += 1 self._cache[self._key] = (send, close) return (self._address, self._key) @staticmethod def get_connection(ident): '''Return connection from which to receive identified resource.''' from .connection import Client address, key = ident c = Client(address, authkey=process.current_process().authkey) c.send((key, os.getpid())) return c def stop(self, timeout=None): '''Stop the background thread and clear registered resources.''' from .connection import Client with self._lock: if self._address is not None: c = Client(self._address, authkey=process.current_process().authkey) c.send(None) c.close() self._thread.join(timeout) if self._thread.is_alive(): util.sub_warning('_ResourceSharer thread did ' 'not stop when asked') self._listener.close() self._thread = None self._address = None self._listener = None for key, (send, close) in self._cache.items(): close() self._cache.clear() def _afterfork(self): for key, (send, close) in self._cache.items(): close() self._cache.clear() # If self._lock was locked at the time of the fork, it may be broken # -- see issue 6721. Replace it without letting it be gc'ed. self._old_locks.append(self._lock) self._lock = threading.Lock() if self._listener is not None: self._listener.close() self._listener = None self._address = None self._thread = None def _start(self): from .connection import Listener assert self._listener is None, "Already have Listener" util.debug('starting listener and thread for sending handles') self._listener = Listener(authkey=process.current_process().authkey) self._address = self._listener.address t = threading.Thread(target=self._serve) t.daemon = True t.start() self._thread = t def _serve(self): if hasattr(signal, 'pthread_sigmask'): signal.pthread_sigmask(signal.SIG_BLOCK, signal.valid_signals()) while 1: try: with self._listener.accept() as conn: msg = conn.recv() if msg is None: break key, destination_pid = msg send, close = self._cache.pop(key) try: send(conn, destination_pid) finally: close() except: if not util.is_exiting(): sys.excepthook(*sys.exc_info()) _resource_sharer = _ResourceSharer() stop = _resource_sharer.stop popen_spawn_win32.py000064400000007653147221272370010513 0ustar00import os import msvcrt import signal import sys import _winapi from .context import reduction, get_spawning_popen, set_spawning_popen from . import spawn from . import util __all__ = ['Popen'] # # # TERMINATE = 0x10000 WINEXE = (sys.platform == 'win32' and getattr(sys, 'frozen', False)) WINSERVICE = sys.executable.lower().endswith("pythonservice.exe") def _path_eq(p1, p2): return p1 == p2 or os.path.normcase(p1) == os.path.normcase(p2) WINENV = not _path_eq(sys.executable, sys._base_executable) def _close_handles(*handles): for handle in handles: _winapi.CloseHandle(handle) # # We define a Popen class similar to the one from subprocess, but # whose constructor takes a process object as its argument. # class Popen(object): ''' Start a subprocess to run the code of a process object ''' method = 'spawn' def __init__(self, process_obj): prep_data = spawn.get_preparation_data(process_obj._name) # read end of pipe will be duplicated by the child process # -- see spawn_main() in spawn.py. # # bpo-33929: Previously, the read end of pipe was "stolen" by the child # process, but it leaked a handle if the child process had been # terminated before it could steal the handle from the parent process. rhandle, whandle = _winapi.CreatePipe(None, 0) wfd = msvcrt.open_osfhandle(whandle, 0) cmd = spawn.get_command_line(parent_pid=os.getpid(), pipe_handle=rhandle) cmd = ' '.join('"%s"' % x for x in cmd) python_exe = spawn.get_executable() # bpo-35797: When running in a venv, we bypass the redirect # executor and launch our base Python. if WINENV and _path_eq(python_exe, sys.executable): python_exe = sys._base_executable env = os.environ.copy() env["__PYVENV_LAUNCHER__"] = sys.executable else: env = None with open(wfd, 'wb', closefd=True) as to_child: # start process try: hp, ht, pid, tid = _winapi.CreateProcess( python_exe, cmd, None, None, False, 0, env, None, None) _winapi.CloseHandle(ht) except: _winapi.CloseHandle(rhandle) raise # set attributes of self self.pid = pid self.returncode = None self._handle = hp self.sentinel = int(hp) self.finalizer = util.Finalize(self, _close_handles, (self.sentinel, int(rhandle))) # send information to child set_spawning_popen(self) try: reduction.dump(prep_data, to_child) reduction.dump(process_obj, to_child) finally: set_spawning_popen(None) def duplicate_for_child(self, handle): assert self is get_spawning_popen() return reduction.duplicate(handle, self.sentinel) def wait(self, timeout=None): if self.returncode is None: if timeout is None: msecs = _winapi.INFINITE else: msecs = max(0, int(timeout * 1000 + 0.5)) res = _winapi.WaitForSingleObject(int(self._handle), msecs) if res == _winapi.WAIT_OBJECT_0: code = _winapi.GetExitCodeProcess(self._handle) if code == TERMINATE: code = -signal.SIGTERM self.returncode = code return self.returncode def poll(self): return self.wait(timeout=0) def terminate(self): if self.returncode is None: try: _winapi.TerminateProcess(int(self._handle), TERMINATE) except OSError: if self.wait(timeout=1.0) is None: raise kill = terminate def close(self): self.finalizer() spawn.py000064400000022120147221272370006252 0ustar00# # Code used to start processes when using the spawn or forkserver # start methods. # # multiprocessing/spawn.py # # Copyright (c) 2006-2008, R Oudkerk # Licensed to PSF under a Contributor Agreement. # import os import sys import runpy import types from . import get_start_method, set_start_method from . import process from .context import reduction from . import util __all__ = ['_main', 'freeze_support', 'set_executable', 'get_executable', 'get_preparation_data', 'get_command_line', 'import_main_path'] # # _python_exe is the assumed path to the python executable. # People embedding Python want to modify it. # if sys.platform != 'win32': WINEXE = False WINSERVICE = False else: WINEXE = getattr(sys, 'frozen', False) WINSERVICE = sys.executable.lower().endswith("pythonservice.exe") if WINSERVICE: _python_exe = os.path.join(sys.exec_prefix, 'python.exe') else: _python_exe = sys.executable def set_executable(exe): global _python_exe _python_exe = exe def get_executable(): return _python_exe # # # def is_forking(argv): ''' Return whether commandline indicates we are forking ''' if len(argv) >= 2 and argv[1] == '--multiprocessing-fork': return True else: return False def freeze_support(): ''' Run code for process object if this in not the main process ''' if is_forking(sys.argv): kwds = {} for arg in sys.argv[2:]: name, value = arg.split('=') if value == 'None': kwds[name] = None else: kwds[name] = int(value) spawn_main(**kwds) sys.exit() def get_command_line(**kwds): ''' Returns prefix of command line used for spawning a child process ''' if getattr(sys, 'frozen', False): return ([sys.executable, '--multiprocessing-fork'] + ['%s=%r' % item for item in kwds.items()]) else: prog = 'from multiprocessing.spawn import spawn_main; spawn_main(%s)' prog %= ', '.join('%s=%r' % item for item in kwds.items()) opts = util._args_from_interpreter_flags() return [_python_exe] + opts + ['-c', prog, '--multiprocessing-fork'] def spawn_main(pipe_handle, parent_pid=None, tracker_fd=None): ''' Run code specified by data received over pipe ''' assert is_forking(sys.argv), "Not forking" if sys.platform == 'win32': import msvcrt import _winapi if parent_pid is not None: source_process = _winapi.OpenProcess( _winapi.SYNCHRONIZE | _winapi.PROCESS_DUP_HANDLE, False, parent_pid) else: source_process = None new_handle = reduction.duplicate(pipe_handle, source_process=source_process) fd = msvcrt.open_osfhandle(new_handle, os.O_RDONLY) parent_sentinel = source_process else: from . import resource_tracker resource_tracker._resource_tracker._fd = tracker_fd fd = pipe_handle parent_sentinel = os.dup(pipe_handle) exitcode = _main(fd, parent_sentinel) sys.exit(exitcode) def _main(fd, parent_sentinel): with os.fdopen(fd, 'rb', closefd=True) as from_parent: process.current_process()._inheriting = True try: preparation_data = reduction.pickle.load(from_parent) prepare(preparation_data) self = reduction.pickle.load(from_parent) finally: del process.current_process()._inheriting return self._bootstrap(parent_sentinel) def _check_not_importing_main(): if getattr(process.current_process(), '_inheriting', False): raise RuntimeError(''' An attempt has been made to start a new process before the current process has finished its bootstrapping phase. This probably means that you are not using fork to start your child processes and you have forgotten to use the proper idiom in the main module: if __name__ == '__main__': freeze_support() ... The "freeze_support()" line can be omitted if the program is not going to be frozen to produce an executable.''') def get_preparation_data(name): ''' Return info about parent needed by child to unpickle process object ''' _check_not_importing_main() d = dict( log_to_stderr=util._log_to_stderr, authkey=process.current_process().authkey, ) if util._logger is not None: d['log_level'] = util._logger.getEffectiveLevel() sys_path=sys.path.copy() try: i = sys_path.index('') except ValueError: pass else: sys_path[i] = process.ORIGINAL_DIR d.update( name=name, sys_path=sys_path, sys_argv=sys.argv, orig_dir=process.ORIGINAL_DIR, dir=os.getcwd(), start_method=get_start_method(), ) # Figure out whether to initialise main in the subprocess as a module # or through direct execution (or to leave it alone entirely) main_module = sys.modules['__main__'] main_mod_name = getattr(main_module.__spec__, "name", None) if main_mod_name is not None: d['init_main_from_name'] = main_mod_name elif sys.platform != 'win32' or (not WINEXE and not WINSERVICE): main_path = getattr(main_module, '__file__', None) if main_path is not None: if (not os.path.isabs(main_path) and process.ORIGINAL_DIR is not None): main_path = os.path.join(process.ORIGINAL_DIR, main_path) d['init_main_from_path'] = os.path.normpath(main_path) return d # # Prepare current process # old_main_modules = [] def prepare(data): ''' Try to get current process ready to unpickle process object ''' if 'name' in data: process.current_process().name = data['name'] if 'authkey' in data: process.current_process().authkey = data['authkey'] if 'log_to_stderr' in data and data['log_to_stderr']: util.log_to_stderr() if 'log_level' in data: util.get_logger().setLevel(data['log_level']) if 'sys_path' in data: sys.path = data['sys_path'] if 'sys_argv' in data: sys.argv = data['sys_argv'] if 'dir' in data: os.chdir(data['dir']) if 'orig_dir' in data: process.ORIGINAL_DIR = data['orig_dir'] if 'start_method' in data: set_start_method(data['start_method'], force=True) if 'init_main_from_name' in data: _fixup_main_from_name(data['init_main_from_name']) elif 'init_main_from_path' in data: _fixup_main_from_path(data['init_main_from_path']) # Multiprocessing module helpers to fix up the main module in # spawned subprocesses def _fixup_main_from_name(mod_name): # __main__.py files for packages, directories, zip archives, etc, run # their "main only" code unconditionally, so we don't even try to # populate anything in __main__, nor do we make any changes to # __main__ attributes current_main = sys.modules['__main__'] if mod_name == "__main__" or mod_name.endswith(".__main__"): return # If this process was forked, __main__ may already be populated if getattr(current_main.__spec__, "name", None) == mod_name: return # Otherwise, __main__ may contain some non-main code where we need to # support unpickling it properly. We rerun it as __mp_main__ and make # the normal __main__ an alias to that old_main_modules.append(current_main) main_module = types.ModuleType("__mp_main__") main_content = runpy.run_module(mod_name, run_name="__mp_main__", alter_sys=True) main_module.__dict__.update(main_content) sys.modules['__main__'] = sys.modules['__mp_main__'] = main_module def _fixup_main_from_path(main_path): # If this process was forked, __main__ may already be populated current_main = sys.modules['__main__'] # Unfortunately, the main ipython launch script historically had no # "if __name__ == '__main__'" guard, so we work around that # by treating it like a __main__.py file # See https://github.com/ipython/ipython/issues/4698 main_name = os.path.splitext(os.path.basename(main_path))[0] if main_name == 'ipython': return # Otherwise, if __file__ already has the setting we expect, # there's nothing more to do if getattr(current_main, '__file__', None) == main_path: return # If the parent process has sent a path through rather than a module # name we assume it is an executable script that may contain # non-main code that needs to be executed old_main_modules.append(current_main) main_module = types.ModuleType("__mp_main__") main_content = runpy.run_path(main_path, run_name="__mp_main__") main_module.__dict__.update(main_content) sys.modules['__main__'] = sys.modules['__mp_main__'] = main_module def import_main_path(main_path): ''' Set sys.modules['__main__'] to module at main_path ''' _fixup_main_from_path(main_path) popen_spawn_posix.py000064400000003755147221272370010712 0ustar00import io import os from .context import reduction, set_spawning_popen from . import popen_fork from . import spawn from . import util __all__ = ['Popen'] # # Wrapper for an fd used while launching a process # class _DupFd(object): def __init__(self, fd): self.fd = fd def detach(self): return self.fd # # Start child process using a fresh interpreter # class Popen(popen_fork.Popen): method = 'spawn' DupFd = _DupFd def __init__(self, process_obj): self._fds = [] super().__init__(process_obj) def duplicate_for_child(self, fd): self._fds.append(fd) return fd def _launch(self, process_obj): from . import resource_tracker tracker_fd = resource_tracker.getfd() self._fds.append(tracker_fd) prep_data = spawn.get_preparation_data(process_obj._name) fp = io.BytesIO() set_spawning_popen(self) try: reduction.dump(prep_data, fp) reduction.dump(process_obj, fp) finally: set_spawning_popen(None) parent_r = child_w = child_r = parent_w = None try: parent_r, child_w = os.pipe() child_r, parent_w = os.pipe() cmd = spawn.get_command_line(tracker_fd=tracker_fd, pipe_handle=child_r) self._fds.extend([child_r, child_w]) self.pid = util.spawnv_passfds(spawn.get_executable(), cmd, self._fds) self.sentinel = parent_r with open(parent_w, 'wb', closefd=False) as f: f.write(fp.getbuffer()) finally: fds_to_close = [] for fd in (parent_r, parent_w): if fd is not None: fds_to_close.append(fd) self.finalizer = util.Finalize(self, util.close_fds, fds_to_close) for fd in (child_r, child_w): if fd is not None: os.close(fd) dummy/__pycache__/connection.cpython-36.opt-1.pyc000064400000004653147221272370015652 0ustar003 \/@sRdddgZddlmZdgZGdddeZddZd d dZGd d d eZdS) ClientListenerPipe)QueueNc@sBeZdZdddZddZddZed d Zd d Zd dZ dS)rNcCst||_dS)N)r_backlog_queue)selfaddressZfamilyZbacklogr "/usr/lib64/python3.6/connection.py__init__szListener.__init__cCst|jjS)N) Connectionrget)rr r r acceptszListener.acceptcCs d|_dS)N)r)rr r r closeszListener.closecCs|jS)N)r)rr r r szListener.cCs|S)Nr )rr r r __enter__szListener.__enter__cCs |jdS)N)r)rexc_type exc_valueexc_tbr r r __exit__"szListener.__exit__)NNr) __name__ __module__ __qualname__r rrpropertyr rrr r r r rs   cCs&tt}}|j||ft||S)N)rputr )r _in_outr r r r&sTcCs"tt}}t||t||fS)N)rr )Zduplexabr r r r,sc@s6eZdZddZd ddZddZdd Zd d Zd S)r cCs,||_||_|j|_|_|j|_|_dS)N)rrrsendZ send_bytesrZrecvZ recv_bytes)rrrr r r r 3szConnection.__init__c CsN|jjdkrdS|dkrdS|jj|jjj|WdQRX|jjdkS)NrTgF)rZqsizeZ not_emptywait)rZtimeoutr r r poll9s zConnection.pollcCsdS)Nr )rr r r rBszConnection.closecCs|S)Nr )rr r r rEszConnection.__enter__cCs |jdS)N)r)rrrrr r r rHszConnection.__exit__N)r!)rrrr r#rrrr r r r r 1s  r )T) __all__ZqueuerZfamiliesobjectrrrr r r r r  s   dummy/__pycache__/connection.cpython-36.opt-2.pyc000064400000004701147221272370015645 0ustar003 \/@sRdddgZddlmZdgZGdddeZddZd d dZGd d d eZdS) ClientListenerPipe)QueueNc@sBeZdZdddZddZddZed d Zd d Zd dZ dS)rNcCst||_dS)N)r_backlog_queue)selfaddressZfamilyZbacklogr 8/usr/lib64/python3.6/multiprocessing/dummy/connection.py__init__szListener.__init__cCst|jjS)N) Connectionrget)rr r r acceptszListener.acceptcCs d|_dS)N)r)rr r r closeszListener.closecCs|jS)N)r)rr r r szListener.cCs|S)Nr )rr r r __enter__szListener.__enter__cCs |jdS)N)r)rexc_type exc_valueexc_tbr r r __exit__"szListener.__exit__)NNr) __name__ __module__ __qualname__r rrpropertyr rrr r r r rs   cCs&tt}}|j||ft||S)N)rputr )r _in_outr r r r&sTcCs"tt}}t||t||fS)N)rr )Zduplexabr r r r,sc@s6eZdZddZd ddZddZdd Zd d Zd S)r cCs,||_||_|j|_|_|j|_|_dS)N)rrrsendZ send_bytesrZrecvZ recv_bytes)rrrr r r r 3szConnection.__init__c CsN|jjdkrdS|dkrdS|jj|jjj|WdQRX|jjdkS)NrTgF)rZqsizeZ not_emptywait)rZtimeoutr r r poll9s zConnection.pollcCsdS)Nr )rr r r rBszConnection.closecCs|S)Nr )rr r r rEszConnection.__enter__cCs |jdS)N)r)rrrrr r r rHszConnection.__exit__N)r!)rrrr r#rrrr r r r r 1s  r )T) __all__ZqueuerZfamiliesobjectrrrr r r r r  s   dummy/__pycache__/__init__.cpython-36.opt-1.pyc000064400000007110147221272370015241 0ustar003 \P @sdddddddddd d d d d ddgZddlZddlZddlZddlZddlmZddlmZmZm Z m Z ddlm Z m Z m Z ddlmZGdddejZeZejZeje_ddZddZGdddeZeZeZd&ddZGd d!d!eZd"d Zd#d$Z ddffd%dZ!eZ"dS)'Processcurrent_processactive_childrenfreeze_supportLockRLock SemaphoreBoundedSemaphore ConditionEventBarrierQueueManagerPipePool JoinableQueueN)r)rrrr)r r r )r c@s4eZdZdddfifddZddZeddZdS) DummyProcessNcCs8tjj||||||d|_tj|_d|_t|_ dS)NF) threadingThread__init__Z_pidweakrefWeakKeyDictionary _children _start_calledr_parent)selfgrouptargetnameargskwargsr" /usr/lib64/python3.6/__init__.pyr$s  zDummyProcess.__init__cCs.d|_t|jdrd|jj|<tjj|dS)NTr)rhasattrrrrrstart)rr"r"r#r%+s  zDummyProcess.startcCs|jr|j rdSdSdS)Nr)ris_alive)rr"r"r#exitcode2szDummyProcess.exitcode)__name__ __module__ __qualname__rr%propertyr'r"r"r"r#r"srcCs6tj}x$t|D]}|js|j|dqWt|S)N)rrlistr&pop)Zchildrenpr"r"r#rAs cCsdS)Nr"r"r"r"r#rHsc@seZdZddZddZdS) NamespacecKs|jj|dS)N)__dict__update)rkwdsr"r"r#rPszNamespace.__init__cCs^t|jj}g}x,|D]$\}}|jds|jd||fqW|jd|jjdj|fS)N_z%s=%rz%s(%s)z, ) r,r0items startswithappendsort __class__r(join)rr4Ztemprvaluer"r"r#__repr__Rs zNamespace.__repr__N)r(r)r*rr;r"r"r"r#r/Osr/TcCs tj||S)N)array)typecodeZsequencelockr"r"r#Array^sr?c@s8eZdZd ddZddZddZeeeZdd Zd S) ValueTcCs||_||_dS)N) _typecode_value)rr=r:r>r"r"r#rbszValue.__init__cCs|jS)N)rB)rr"r"r#_getesz Value._getcCs ||_dS)N)rB)rr:r"r"r#_setgsz Value._setcCsdt|j|j|jfS)Nz <%s(%r, %r)>)typer(rArB)rr"r"r#r;jszValue.__repr__N)T) r(r)r*rrCrDr+r:r;r"r"r"r#r@as   r@cCs tjtS)N)sysmodulesr(r"r"r"r#r mscCsdS)Nr"r"r"r"r#shutdownpsrHcCsddlm}||||S)N) ThreadPool)ZpoolrJ)Z processesZ initializerZinitargsrJr"r"r#rss )T)#__all__rrFrr<Z connectionrrrrrr r r Zqueuer rrrZcurrent_threadrrrrrobjectr/dictr,r?r@r rHrrr"r"r"r# s2       dummy/__pycache__/__init__.cpython-36.pyc000064400000007157147221272370014315 0ustar003 \P @sdddddddddd d d d d ddgZddlZddlZddlZddlZddlmZddlmZmZm Z m Z ddlm Z m Z m Z ddlmZGdddejZeZejZeje_ddZddZGdddeZeZeZd&ddZGd d!d!eZd"d Zd#d$Z ddffd%dZ!eZ"dS)'Processcurrent_processactive_childrenfreeze_supportLockRLock SemaphoreBoundedSemaphore ConditionEventBarrierQueueManagerPipePool JoinableQueueN)r)rrrr)r r r )r c@s4eZdZdddfifddZddZeddZdS) DummyProcessNcCs8tjj||||||d|_tj|_d|_t|_ dS)NF) threadingThread__init__Z_pidweakrefWeakKeyDictionary _children _start_calledr_parent)selfgrouptargetnameargskwargsr" /usr/lib64/python3.6/__init__.pyr$s  zDummyProcess.__init__cCs>|jtkstd|_t|jdr.d|jj|<tjj|dS)NTr) rrAssertionErrorrhasattrrrrstart)rr"r"r#r&+s   zDummyProcess.startcCs|jr|j rdSdSdS)Nr)ris_alive)rr"r"r#exitcode2szDummyProcess.exitcode)__name__ __module__ __qualname__rr&propertyr(r"r"r"r#r"srcCs6tj}x$t|D]}|js|j|dqWt|S)N)rrlistr'pop)Zchildrenpr"r"r#rAs cCsdS)Nr"r"r"r"r#rHsc@seZdZddZddZdS) NamespacecKs|jj|dS)N)__dict__update)rkwdsr"r"r#rPszNamespace.__init__cCs^t|jj}g}x,|D]$\}}|jds|jd||fqW|jd|jjdj|fS)N_z%s=%rz%s(%s)z, ) r-r1items startswithappendsort __class__r)join)rr5Ztemprvaluer"r"r#__repr__Rs zNamespace.__repr__N)r)r*r+rr<r"r"r"r#r0Osr0TcCs tj||S)N)array)typecodeZsequencelockr"r"r#Array^sr@c@s8eZdZd ddZddZddZeeeZdd Zd S) ValueTcCs||_||_dS)N) _typecode_value)rr>r;r?r"r"r#rbszValue.__init__cCs|jS)N)rC)rr"r"r#_getesz Value._getcCs ||_dS)N)rC)rr;r"r"r#_setgsz Value._setcCsdt|j|j|jfS)Nz <%s(%r, %r)>)typer)rBrC)rr"r"r#r<jszValue.__repr__N)T) r)r*r+rrDrEr,r;r<r"r"r"r#rAas   rAcCs tjtS)N)sysmodulesr)r"r"r"r#r mscCsdS)Nr"r"r"r"r#shutdownpsrIcCsddlm}||||S)N) ThreadPool)ZpoolrK)Z processesZ initializerZinitargsrKr"r"r#rss )T)#__all__rrGrr=Z connectionrrrrrr r r Zqueuer rrrZcurrent_threadrrrrrobjectr0dictr-r@rAr rIrrr"r"r"r# s2       dummy/__pycache__/__init__.cpython-36.opt-2.pyc000064400000007136147221272370015252 0ustar003 \P @sdddddddddd d d d d ddgZddlZddlZddlZddlZddlmZddlmZmZm Z m Z ddlm Z m Z m Z ddlmZGdddejZeZejZeje_ddZddZGdddeZeZeZd&ddZGd d!d!eZd"d Zd#d$Z ddffd%dZ!eZ"dS)'Processcurrent_processactive_childrenfreeze_supportLockRLock SemaphoreBoundedSemaphore ConditionEventBarrierQueueManagerPipePool JoinableQueueN)r)rrrr)r r r )r c@s4eZdZdddfifddZddZeddZdS) DummyProcessNcCs8tjj||||||d|_tj|_d|_t|_ dS)NF) threadingThread__init__Z_pidweakrefWeakKeyDictionary _children _start_calledr_parent)selfgrouptargetnameargskwargsr"6/usr/lib64/python3.6/multiprocessing/dummy/__init__.pyr$s  zDummyProcess.__init__cCs.d|_t|jdrd|jj|<tjj|dS)NTr)rhasattrrrrrstart)rr"r"r#r%+s  zDummyProcess.startcCs|jr|j rdSdSdS)Nr)ris_alive)rr"r"r#exitcode2szDummyProcess.exitcode)__name__ __module__ __qualname__rr%propertyr'r"r"r"r#r"srcCs6tj}x$t|D]}|js|j|dqWt|S)N)rrlistr&pop)Zchildrenpr"r"r#rAs cCsdS)Nr"r"r"r"r#rHsc@seZdZddZddZdS) NamespacecKs|jj|dS)N)__dict__update)rkwdsr"r"r#rPszNamespace.__init__cCs^t|jj}g}x,|D]$\}}|jds|jd||fqW|jd|jjdj|fS)N_z%s=%rz%s(%s)z, ) r,r0items startswithappendsort __class__r(join)rr4Ztemprvaluer"r"r#__repr__Rs zNamespace.__repr__N)r(r)r*rr;r"r"r"r#r/Osr/TcCs tj||S)N)array)typecodeZsequencelockr"r"r#Array^sr?c@s8eZdZd ddZddZddZeeeZdd Zd S) ValueTcCs||_||_dS)N) _typecode_value)rr=r:r>r"r"r#rbszValue.__init__cCs|jS)N)rB)rr"r"r#_getesz Value._getcCs ||_dS)N)rB)rr:r"r"r#_setgsz Value._setcCsdt|j|j|jfS)Nz <%s(%r, %r)>)typer(rArB)rr"r"r#r;jszValue.__repr__N)T) r(r)r*rrCrDr+r:r;r"r"r"r#r@as   r@cCs tjtS)N)sysmodulesr(r"r"r"r#r mscCsdS)Nr"r"r"r"r#shutdownpsrHcCsddlm}||||S)N) ThreadPool)ZpoolrJ)Z processesZ initializerZinitargsrJr"r"r#rss )T)#__all__rrFrr<Z connectionrrrrrr r r Zqueuer rrrZcurrent_threadrrrrrobjectr/dictr,r?r@r rHrrr"r"r"r# s2       dummy/__pycache__/connection.cpython-36.pyc000064400000004653147221272370014713 0ustar003 \/@sRdddgZddlmZdgZGdddeZddZd d dZGd d d eZdS) ClientListenerPipe)QueueNc@sBeZdZdddZddZddZed d Zd d Zd dZ dS)rNcCst||_dS)N)r_backlog_queue)selfaddressZfamilyZbacklogr "/usr/lib64/python3.6/connection.py__init__szListener.__init__cCst|jjS)N) Connectionrget)rr r r acceptszListener.acceptcCs d|_dS)N)r)rr r r closeszListener.closecCs|jS)N)r)rr r r szListener.cCs|S)Nr )rr r r __enter__szListener.__enter__cCs |jdS)N)r)rexc_type exc_valueexc_tbr r r __exit__"szListener.__exit__)NNr) __name__ __module__ __qualname__r rrpropertyr rrr r r r rs   cCs&tt}}|j||ft||S)N)rputr )r _in_outr r r r&sTcCs"tt}}t||t||fS)N)rr )Zduplexabr r r r,sc@s6eZdZddZd ddZddZdd Zd d Zd S)r cCs,||_||_|j|_|_|j|_|_dS)N)rrrsendZ send_bytesrZrecvZ recv_bytes)rrrr r r r 3szConnection.__init__c CsN|jjdkrdS|dkrdS|jj|jjj|WdQRX|jjdkS)NrTgF)rZqsizeZ not_emptywait)rZtimeoutr r r poll9s zConnection.pollcCsdS)Nr )rr r r rBszConnection.closecCs|S)Nr )rr r r rEszConnection.__enter__cCs |jdS)N)r)rrrrr r r rHszConnection.__exit__N)r!)rrrr r#rrrr r r r r 1s  r )T) __all__ZqueuerZfamiliesobjectrrrr r r r r  s   __pycache__/process.cpython-35.opt-2.pyc000064400000015563147554447510014051 0ustar00 ]# @svdddgZddlZddlZddlZddlZddlmZyejjej Z Wne k rdZ YnXddZ ddZ dd ZGd ddeZGd d d eZGd ddeZeaejdaea[iZxPeejjD]9\ZZedddkr,dekr,eee Ssz'BaseProcess.__init__..)next_process_counterr _identity_configcopyosgetpid _parent_pidr _targettuple_argsdict_kwargstype__name__join_namer _danglingadd)rgrouptargetnameargskwargsrcountrrr__init__Gs   #  zBaseProcess.__init__cCs#|jr|j|j|jdS)N)r"r$r&)rrrrrunXs zBaseProcess.runcCsKt|j||_|jj|_|`|`|`tj |dS)N) r rr sentinel _sentinelr"r$r&r r,)rrrrstart_s zBaseProcess.startcCs|jjdS)N)r terminate)rrrrr8pszBaseProcess.terminatecCs/|jj|}|dk r+tj|dS)N)r waitr r)rtimeoutresrrrr)vs zBaseProcess.joincCs@|tkrdS|jdkr#dS|jj|jjdkS)NTF)rr r returncode)rrrris_alives   zBaseProcess.is_alivecCs|jS)N)r*)rrrrr/szBaseProcess.namecCs ||_dS)N)r*)rr/rrrr/scCs|jjddS)NrF)rget)rrrrrszBaseProcess.daemoncCs||jdz daemon)rr!rr r r rBr'int_exitcode_to_namer>r(r*r)rstatusrrr__repr__s       zBaseProcess.__repr__c Csddlm}m}zgy|jdk r;|j|jtjdata |j t }|a z|j j |jWd~X|jdz|jd}Wd|jXWntk rA}zd|jsd}nMt|jdtr|jd}n'tjjt|jddd}WYdd}~Xn;d}ddl}tjjd|j|jYnXWd|jd|tjjtjjX|S)N)utilcontextz child process calling self.run()r z Process %s: z process exiting with exitcode %d)rKrQrR _start_method_force_start_method itertoolsr2rsetr _close_stdinr_finalizer_registryclear_run_after_forkersinfor4_exit_function SystemExitr0 isinstancerLsysstderrwriter tracebackr/ print_excstdoutflush)rrQrR old_processrBercrrr _bootstrapsD        !  zBaseProcess._bootstrap)r( __module__ __qualname__rr3r4r7r8r)r=propertyr/setterrr@rBrDrCr5rOrirrrrr>s(         c@seZdZddZdS)rAcCs>ddlm}|dkr+tdtt|ffS)NrP)get_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)rRrn TypeErrorrAbytes)rrnrrr __reduce__s  zAuthenticationString.__reduce__N)r(rjrkrqrrrrrAs rAc@seZdZddZdS) _MainProcesscCsLf|_d|_d|_d|_dttjdddi|_dS)N MainProcessr@ semprefixz/mp)rr*r!r rArurandomr)rrrrr3(s     z_MainProcess.__init__N)r(rjrkr3rrrrrr&s rrrPZSIG_) __all__rr`signalrV _weakrefsetrpathabspathgetcwd ORIGINAL_DIROSErrorrrr objectrrprArrrr2rrWr rMr __dict__itemsr/signumr+rrrr s0          ""__pycache__/popen_spawn_posix.cpython-35.opt-2.pyc000064400000004373147554447510016143 0ustar00 ]{@sddlZddlZddlmZddlmZddlmZddlmZddlmZdgZGd d d e Z Gd ddej Z dS) N)context) popen_fork) reduction)spawn)utilPopenc@s(eZdZddZddZdS)_DupFdcCs ||_dS)N)fd)selfr r 6/opt/alt/python35/lib64/python3.5/popen_spawn_posix.py__init__sz_DupFd.__init__cCs|jS)N)r )r r r r detachsz _DupFd.detachN)__name__ __module__ __qualname__rrr r r r r s  r csFeZdZdZeZfddZddZddZS)rrcsg|_tj|dS)N)_fdssuperr)r process_obj) __class__r r rs zPopen.__init__cCs|jj||S)N)rappend)r r r r r duplicate_for_child#szPopen.duplicate_for_childc Csddlm}|j}|jj|tj|j}tj }t j |z$t j ||t j ||Wdt j dXd}}}} ztj\}}tj\}} tjd|d|} |jj||gtjtj| |j|_||_t| ddd} | j|jWdQRXWd|dk rxtj|tj|fx0||| fD]} | dk rtj| qWXdS)Nr)semaphore_tracker tracker_fdZ pipe_handlewbclosefdF)rZgetfdrrrZget_preparation_data_nameioBytesIOrset_spawning_popenrdumpospipeZget_command_lineextendrspawnv_passfdsZget_executablepidsentinelopenwrite getbufferFinalizeclose) r rrrZ prep_datafpZparent_rZchild_wZchild_rZparent_wcmdfr r r r _launch's6       z Popen._launch) rrrmethodr DupFdrrr1r r )rr rs  ) rr#rrrrrr__all__objectr rr r r r s    __pycache__/sharedctypes.cpython-35.pyc000064400000016500147554447510014121 0ustar00 YfT@sddlZddlZddlmZddlmZddlmZddlmZddd d d d gZ d ej dej dej dej dejdejdejdejdejdejdejdeji ZddZddZddZddddd d Zddddd!d Zd"d Zddd#d Zd$d%Zd&d'Zd(d)Z d*Z!iZ"ej#Z$Gd+d,d,e%Z&Gd-d.d.e&Z'Gd/d0d0e&Z(Gd1d2d2e(Z)dS)3N)heap) get_context)assert_spawning)ForkingPicklerRawValueRawArrayValueArraycopy synchronizedcubBhHiIlLfdcCs.tj|}tj|}t||dS)N)ctypessizeofrZ BufferWrapper rebuild_ctype)type_sizewrapperrA/opt/alt/python35/lib64/python3.5/multiprocessing/sharedctypes.py _new_value&sr!cGsTtj||}t|}tjtj|dtj||j||S)z> Returns a ctypes object allocated from shared memory r)typecode_to_typegetr!rmemset addressofr__init__)typecode_or_typeargsrobjrrr r+s  % cCstj||}t|tr`||}t|}tjtj|dtj||S|t |}t|}|j ||SdS)z= Returns a ctypes array allocated from shared memory rN) r"r# isinstanceintr!rr$r%rlenr&)r'size_or_initializerrr)resultrrr r5s  %  lockTctxcGsxt||}|dkr|S|dkrF|p7t}|j}t|dsetd|t||d|S)z6 Return a synchronization wrapper for a Value FTNacquirez'%r' has no method 'acquire'r0)TN)rrRLockhasattrAttributeErrorr )r'r/r0r(r)rrr r Es   cCsxt||}|dkr|S|dkrF|p7t}|j}t|dsetd|t||d|S)z9 Return a synchronization wrapper for a RawArray FTNr1z'%r' has no method 'acquire'r0)TN)rrr2r3r4r )r'r-r/r0r)rrr r Ss   cCs)tt|}|tj|d<|S)Nr)r!typerZpointer)r)Znew_objrrr r asc Cs-t|t std|p(t}t|tjrMt|||St|tjr|jtj krt |||St |||St |}yt |}Wnktk rdd|jD}tdd|D}d|j}t |tf|}t |us z synchronized..css!|]}|t|fVqdS)N) make_property)r6namerrr vszsynchronized.. Synchronized)r*SynchronizedBaseAssertionErrorrrZ _SimpleCDatar;r _type_c_charSynchronizedStringSynchronizedArrayr5 class_cacheKeyErrorZ_fields_dict__name__)r)r/r0clssclsnamesrZ classnamerrr r fs"   "cCsXt|t|tjr8t|j|j|jffStt||jdffSdS)N) rr*rr rr>_wrapperZ_length_r5)r)rrr reduce_ctypes rJcCsN|dk r||}tj|t|j}|j|}||_|S)N)rregisterrJZcreate_memoryviewZ from_bufferrI)rrZlengthZbufr)rrr rs    rc CsYy t|SWnFtk rTi}tt|fd|||t|<||SYnXdS)N) prop_cacherCexectemplate)r9rrrr r8s  r8z def get%s(self): self.acquire() try: return self._obj.%s finally: self.release() def set%s(self, value): self.acquire() try: self._obj.%s = value finally: self.release() %s = property(get%s, set%s) c@sjeZdZddddZddZddZdd Zd d Zd d ZddZ dS)r<NcCsa||_|r||_n$|p-tdd}|j|_|jj|_|jj|_dS)NZforceT)_obj_lockrr2r1release)selfr)r/r0rrr r&s  zSynchronizedBase.__init__cCs |jjS)N)rQ __enter__)rSrrr rTszSynchronizedBase.__enter__cGs|jj|S)N)rQ__exit__)rSr(rrr rUszSynchronizedBase.__exit__cCs t|t|j|jffS)N)rr rPrQ)rSrrr __reduce__s zSynchronizedBase.__reduce__cCs|jS)N)rP)rSrrr get_objszSynchronizedBase.get_objcCs|jS)N)rQ)rSrrr get_lockszSynchronizedBase.get_lockcCsdt|j|jfS)Nz<%s wrapper for %s>)r5rErP)rSrrr __repr__szSynchronizedBase.__repr__) rE __module__ __qualname__r&rTrUrVrWrXrYrrrr r<s      r<c@seZdZedZdS)r;valueN)rErZr[r8r\rrrr r;s r;c@sLeZdZddZddZddZddZd d Zd S) rAcCs t|jS)N)r,rP)rSrrr __len__szSynchronizedArray.__len__c Cs||j|SWdQRXdS)N)rP)rSrrrr __getitem__szSynchronizedArray.__getitem__c Cs|||j| s:         __pycache__/forkserver.cpython-35.opt-2.pyc000064400000014311147554447510014551 0ustar00 ] @sdddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddlm Z ddlm Z ddlm Z ddlm Z ddlmZd d d d gZd ZejdZGdddeZddddZddZddZddZeZejZejZejZejZdS)N) connection)process) reduction)semaphore_tracker)spawn)utilensure_runningget_inherited_fdsconnect_to_new_processset_forkserver_preloadQc@sLeZdZddZddZddZddZd d Zd S) ForkServercCs:d|_d|_d|_tj|_dg|_dS)N__main__)_forkserver_address_forkserver_alive_fd_inherited_fds threadingLock_lock_preload_modules)selfr//opt/alt/python35/lib64/python3.5/forkserver.py__init__!s    zForkServer.__init__cCs5tdd|jDs(td||_dS)Ncss!|]}t|tkVqdS)N)typestr).0modrrr *sz4ForkServer.set_forkserver_preload..z&module_names must be a list of strings)allr TypeError)rZ modules_namesrrrr (s z!ForkServer.set_forkserver_preloadcCs|jS)N)r)rrrrr .szForkServer.get_inherited_fdscCs |jt|dtkr,tdtjtj}|j|jtj \}}tj \}}|||j t j g}||7}zJyt j||||fSWn%tj|tj|YnXWdtj|tj|XWdQRXdS)Nz too many fds)r lenMAXFDS_TO_SEND ValueErrorsocketAF_UNIXconnectrospiperrZgetfdrsendfdsclose)rfdsclientZparent_rchild_wchild_rZparent_wZallfdsrrrr 6s&        z!ForkServer.connect_to_new_processc s|jtj|jdk r'dSdd}|jr}ddhtjd}tfdd|jD}ni}t j t j  }t j d}|j |tj|d |jtj\}}zyy|j|g}||j||j|f;}tj}|gtj} | d |g7} tj|| |} Wntj|YnXWdtj|X||_||_WdQRXWdQRXdS) Nz-from multiprocessing.forkserver import main; zmain(%d, %d, %r, **%r) main_pathsys_pathignorec3s-|]#\}}|kr||fVqdS)Nr)rxy) desired_keysrrr es z,ForkServer.ensure_running..r(iz-c)rrr rrrZget_preparation_datadictitemsr'r(rarbitrary_addressbindr*chmodlistenr+filenoZget_executabler_args_from_interpreter_flagsspawnv_passfdsr-r) rcmddatalisteneraddressalive_rZalive_wZ fds_to_passZexeargspidr)r7rr Ss>    (       zForkServer.ensure_runningN)__name__ __module__ __qualname__rr r r r rrrrrs     rc4CsH|rd|krN|dk rNdtj_ztj|Wdtj`Xx1|D])}yt|WqUtk r}YqUXqUWtjt j t j t j t j i}dd|jD}tjtjd|f}tjP} |jt_| j|tj| j|tjxyx$dd| jD} | r+Pq+W|| krat|jd} d } tjdkrzPyt| |||Wn2tk rtj tj!tj"j#YnXWdtj$| XWdQRXWq%t%k r1} z| j&t&j'krWYdd} ~ Xq%Xq%WWdQRXWdQRXdS) NrTcSs+i|]!\}}tj|||qSr)signal)rsigvalrrr s zmain..r>cSsg|]\}}|jqSr)fileobj)rkeyeventsrrr s zmain..rr)(rcurrent_processZ _inheritingrZimport_main_path __import__ ImportErrorr _close_stdinrKSIGCHLDSIG_IGNSIGINTSIG_DFLr9r'r( selectorsDefaultSelector getsockname _forkserverrregister EVENT_READselect SystemExitacceptr*fork _serve_one Exceptionsys excepthookexc_infostderrflush_exitOSErrorerrnoZ ECONNABORTED)Z listener_fdrEZpreloadr2r3modnamehandlersZ old_handlersrCselectorZrfdsscodeerrrmainsR         ruc Cs|jtj|x*|jD]\}}tj||q$Wtj|td}|j|^}}t_} t_ | t j _ t |tjdtjkrddl} | jtj|} t || dS)Nrrandomr)r-r*r9rKrrecvfdsr%r^rrrZ_semaphore_trackerZ_fdwrite_unsignedgetpidrgmodulesrvseedr_main) rrrCrErprLrMr.r1r0Zstfdrvrsrrrres      recCsqd}tj}xNt||kr_tj||t|}|sRtd||7}qWtj|dS)Nzunexpected EOFr)UNSIGNED_STRUCTsizer$r*readEOFErrorunpack)fdrBlengthrrrrr read_unsigneds  rcCsZtj|}xD|rUtj||}|dkrBtd||d}qWdS)Nrzshould not get here)r~packr*write RuntimeError)rnmsgnbytesrrrrxs    rx)rnr*r[rKr'structrgrrrrrrr__all__r%Structr~objectrrurerrxr^r r r r rrrrs6          h= !    __pycache__/managers.cpython-35.opt-2.pyc000064400000076743147554447510014177 0ustar00 ]{@sddddgZddlZddlZddlZddlZddlmZddlmZdd l m Z dd l m Z dd l m Z dd l m Z dd l mZddl mZddl mZddZejejedddddfDZedek rJddZxeD]Zejeeq0WGdddeZfiddZddZGdddeZd d!Zd"d#ZGd$d%d%eZGd&d'd'eZ d(e j!e j"fd)e j#e j$fiZ%Gd*ddeZ&Gd+d,d,e'Z(Gd-ddeZ)d.d/Z*id0d1Z+dddd2d3d4Z,Gd5d6d6eZ-Gd7d8d8eZ.d2d9d:Z/Gd;d<d<e)Z0Gd=d>d>e)Z1Gd?d@d@e1Z2GdAdBdBe)Z3GdCdDdDe)Z4GdEdFdFe)Z5GdGdHdHe)Z6e+dIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\fZ7Gd]d^d^e7Z8e+d_dKdLdMdNdRd`dadbdcdddXdddedfdfZ9e+dgdNdMdRfZ:e+dhdidjdkdldmdndodpdqdrdsf Z;djdtdpdtdrdtdldudmduie;_<Gdvdhdhe;Z=Gdwdde&Z>e>jdxej?e>jdyej?e>jdzej@e3e>jd{ejAe1e>jd|ejBe1e>jd}ejCe1e>jd~ejDe1e>jdejEe2e>jdejFe4e>jde jGe=e>jdee8e>jdeHe9e>jd8e.e6e>jd:e/e:e>jd6e-e5e>jdude0dde>jdtdddS) BaseManager SyncManager BaseProxyTokenN)time) format_exc) connection)context)pool)process) reduction)util) get_contextcCstj|j|jffS)N)arraytypecodetobytes)ar-/opt/alt/python35/lib64/python3.5/managers.py reduce_array%srcCs(g|]}tti|qSr)typegetattr).0namerrr )s ritemskeysvaluescCstt|ffS)N)list)objrrrrebuild_as_list+sr!c@sFeZdZd ZddZddZdd Zd d Zd S)rtypeidaddressidcCs!||||_|_|_dS)N)r"r#r$)selfr"r#r$rrr__init__:szToken.__init__cCs|j|j|jfS)N)r"r#r$)r%rrr __getstate__=szToken.__getstate__cCs|\|_|_|_dS)N)r"r#r$)r%staterrr __setstate__@szToken.__setstate__cCs#d|jj|j|j|jfS)Nz %s(typeid=%r, address=%r, id=%r)) __class____name__r"r#r$)r%rrr__repr__CszToken.__repr__N)r"r#r$)r+ __module__ __qualname__ __slots__r&r'r)r,rrrrr4s    cCsN|j||||f|j\}}|dkr;|St||dS)Nz#RETURN)sendrecvconvert_to_error)cr$ methodnameargskwdskindresultrrrdispatchKs  r9cCsN|dkr|S|dkr&t|S|dkr@td|StdSdS)Nz#ERRORz #TRACEBACKz#UNSERIALIZABLEzUnserializable message: %s zUnrecognized message type) RemoteError ValueError)r7r8rrrr2Us    r2c@seZdZddZdS)r:cCs)ddddt|jdddS)N -Kr)strr5)r%rrr__str__bszRemoteError.__str__N)r+r-r.r@rrrrr:as r:cCsIg}x<t|D].}t||}t|r|j|qW|S)N)dirrcallableappend)r temprfuncrrr all_methodsis  rFcCsddt|DS)NcSs&g|]}|ddkr|qS)r_r)rrrrrrxs z"public_methods..)rF)r rrrpublic_methodstsrHc @seZdZddddddddd g Zd d Zd d ZddZddZddZddZ ddZ ddZ de de de iZ ddZ dd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/S)0Servershutdowncreateaccept_connection get_methods debug_infonumber_of_objectsdummyincrefdecrefcCs||_tj||_t|\}}|d|dd|_|jj|_ddffi|_i|_t j |_ dS)Nr#backlog0) registryr AuthenticationStringauthkeylistener_clientlistenerr# id_to_objid_to_refcount threadingRLockmutex)r%rVr#rX serializerListenerClientrrrr&s  zServer.__init__cCstj|_|tj_zqtjd|j}d|_|j y*x#|jj sq|jj dqOWWnt t fk rYnXWdtjtjkrtjdtjt_tjt_tjdXdS)NtargetTrzresetting stdout, stderrr)r]Event stop_eventr current_process_manager_serverThreadaccepterdaemonstartis_setwaitKeyboardInterrupt SystemExitsysstdout __stdout__rdebug __stderr__stderrexit)r%rirrr serve_forevers       zServer.serve_foreverc Csgx`y|jj}Wntk r-wYnXtjd|jd|f}d|_|jqWdS)Nrcr5T)rZacceptOSErrorr]rhhandle_requestrjrk)r%r3trrrris  zServer.accepterc 'Csud}}}yWtj||jtj||j|j}|\}}}}t||}Wn!tk rdtf} YnGXy||||}Wn!tk rdtf} Yn Xd|f} y|j| Wntk rf} zdy|jdtfWntk r#YnXt j d| t j d|t j d| WYdd} ~ XnX|j dS)Nz #TRACEBACKz#RETURNzFailure to send message: %rz ... request was %rz ... exception was %r) r deliver_challengerXanswer_challenger1r Exceptionrr0rinfoclose) r%r3funcnamer8requestignorer5r6rEmsgerrrrzs2     #zServer.handle_requestc*Cs%tjdtjj|j}|j}|j}x|jj s y,d}}|}|\}}} } ||\}} } || krt d|t || ft ||} y| | | }Wn1t k r}zd|f}WYdd}~XnpX| o| j|d}|re|j|||\}}t||j|}d||ff}n d|f}Wnt k r|dkrdtf}n\y8|j|}|||||| | }d|f}Wn!t k rdtf}YnXYnXtk r7tjdtjjtjdYn!t k rWdtf}YnXyMy||Wn8t k r}z|d tfWYdd}~XnXWq7t k r}zUtjd tjjtjd |tjd ||jtjd WYdd}~Xq7Xq7WdS)Nz$starting server thread to service %rz+method %r of %r object is not in exposed=%rz#ERRORz#PROXYz#RETURNz #TRACEBACKz$got EOF -- exiting thread serving %rrz#UNSERIALIZABLEzexception in thread serving %rz ... message was %rz ... exception was %rr)rrsr]current_threadrr1r0r[rerlAttributeErrorrrr~getrKrr#rfallback_mappingEOFErrorrprvrr)r%connr1r0r[r4r ridentr5r6exposedZ gettypeidfunctionresrrr"ZridentZrexposedtokenZ fallback_funcr8rrr serve_clientsl              *  zServer.serve_clientcCs|S)Nr)r%rrr rrrfallback_getvalueszServer.fallback_getvaluecCs t|S)N)r?)r%rrr rrr fallback_str"szServer.fallback_strcCs t|S)N)repr)r%rrr rrr fallback_repr%szServer.fallback_reprr@r,z #GETVALUEcCsdS)Nr)r%r3rrrrP.sz Server.dummycCs|jg}t|jj}|jxV|D]N}|dkr6|jd||j|t|j|dddfq6Wdj|SWdQRXdS)NrUz %s: refcount=%s %srr>r<) r_rr[rsortrCr\r?join)r%r3r8rrrrrrN1s      *zServer.debug_infocCst|jdS)Nr)lenr[)r%r3rrrrO@szServer.number_of_objectscCsXzCytjd|jdWnddl}|jYnXWd|jjXdS)Nz!manager received shutdown message#RETURNr)rN)rrsr0 traceback print_excreset)r%r3rrrrrJFs  zServer.shutdownc Os |j|j|\}}}}|dkr<|d} n|||} |dkrct| }|dk rt|t|}dt| } tjd|| | t||f|j| <| |j krd|j | <|j || | t |fSWdQRXdS)Nrz%xz&%r callable returned object with id %r) r_rVrHrr$rrsrr[r\rQtuple) r%r3r"r5r6rBrmethod_to_typeid proxytyper rrrrrKSs        z Server.createcCst|j|jdS)Nr)rr[r$)r%r3rrrrrMvszServer.get_methodscCs-|tj_|jd|j|dS)N#RETURN)rN)r]rrr0r)r%r3rrrrrL|s zServer.accept_connectionc Cs&|j|j|d7sz$BaseManager.start..r= exitpriorityr)rB TypeErrorr PiperProcessr _run_serverrrrr_processr _identityr+rrkrr1rrrrrFinalize_finalize_managerrrJ)r% initializerinitargsreaderwriterrrrrrks&  "   zBaseManager.startc Csi|dk r|||j||||}|j|j|jtjd|j|jdS)Nzmanager serving at %r)_Serverr0r#rrrrw) clsrVr#rXr`rrrserverrrrrs   zBaseManager._run_serverc Osk|j|jd|j}z)t|dd|f||\}}Wd|jXt||j||fS)NrXrK)rrrr9rr)r%r"r5r6rr$rrrr_creates ) zBaseManager._createcCs;|jdk r7|jj||jjs7d|_dS)N)rris_alive)r%timeoutrrrrszBaseManager.joinc CsA|j|jd|j}zt|ddSWd|jXdS)NrXrN)rrrr9r)r%rrrr _debug_infoszBaseManager._debug_infoc CsA|j|jd|j}zt|ddSWd|jXdS)NrXrO)rrrr9r)r%rrrr_number_of_objects"szBaseManager._number_of_objectscCs#|jjtjkr|j|S)N)rrrrrk)r%rrr __enter__,s zBaseManager.__enter__cCs|jdS)N)rJ)r%exc_typeexc_valexc_tbrrr__exit__2szBaseManager.__exit__cCs|jrtjdy8||d|}zt|ddWd|jXWntk reYnX|jdd|jrtjdt|drtjd|j|jdd |jrtjd t j |_ yt j |=Wntk r YnXdS) Nz#sending shutdown message to managerrXrJrg?zmanager still alive terminatez'trying to `terminate()` manager processg?z#manager still alive after terminate)rrrr9rr~rhasattrrrrrr_address_to_localKeyError)r r#rXr(rrrrrr5s.           zBaseManager._finalize_managercCs|jS)N)r)r%rrrUszBaseManager.Tc sd|jkr!|jj|_dkr3t|pHtdd}|p`tdd}|rx t|jD] \}}q|W|||f|j<|rfdd} | _t|| dS)Nr _exposed__method_to_typeid_c stjd|j||\}}||jd|d|jd|}|j|jd|j}t|dd|jf|S)Nz)requesting creation of a shared %r objectmanagerrXrrR) rrsrrrrr#r9r$)r%r5r6rexpproxyr)rr"rrrDrsz"BaseManager.register..temp) __dict__rcopy AutoProxyrrrr+setattr) rr"rBrrr create_methodkeyrrDr)rr"rregisterWs  zBaseManager.register)r+r-r.rrIrr&rrrk classmethodrrrrrrr staticmethodrpropertyr#rrrrrrs(    $     c@s(eZdZddZddZdS)ProcessLocalSetcCstj|dddS)NcSs |jS)N)clear)r rrrrsz*ProcessLocalSet.__init__..)rregister_after_fork)r%rrrr&szProcessLocalSet.__init__cCst|ffS)N)r)r%rrr __reduce__szProcessLocalSet.__reduce__N)r+r-r.r&rrrrrrs  rc@seZdZiZejZddddddZddZfiddZ d d Z d d Z e d dZ ddZddZddZddZddZdS)rNTc Cs*tjNtjj|jd}|dkrStjtf}|tj|j)rr+rr"r$)r%rrrr,%szBaseProxy.__repr__c CsBy|jdSWn*tk r=t|dddSYnXdS)Nr,rz; '__str__()' failed>r)rr~r)r%rrrr@)s zBaseProxy.__str__)r+r-r.rrForkAwareThreadLockrr&rrrrrrrrrr,r@rrrrrs  "      cCsttjdd}|rB|j|jkrB|j|jdS|jddojttjdd }|||d||SdS)NrgrrQTZ _inheritingF)rr rfr#r[r$pop)rErr`r6rrQrrrr6s rc Cst|}y|||fSWntk r2YnXi}x%|D]}td||f|q@Wt|tf|}||_||||f<|S)NzLdef %s(self, *args, **kwds): return self._callmethod(%r, args, kwds))rrexecrrr)rr_cacheZdicmeth ProxyTyperrr MakeProxyTypeKs    rTc Cst|d}|dkrY||jd|}zt|dd|f}Wd|jX|dkrz|dk rz|j}|dkrtjj}td|j |}|||d|d|d|} d| _ | S)NrrXrMz AutoProxy[%s]rrQT) rYr#r9rrr rfrXrr"r) rr`rrXrrQrrrrrrrras      rc@s(eZdZddZddZdS) NamespacecKs|jj|dS)N)rupdate)r%r6rrrr&szNamespace.__init__cCst|jj}g}x:|D]2\}}|jds"|jd||fq"W|jd|jjdj|fS)NrGz%s=%rz%s(%s)z, ) rrr startswithrCrr*r+r)r%rrDrrrrrr,s zNamespace.__repr__N)r+r-r.r&r,rrrrr ~s  r c@sReZdZdddZddZddZdd ZeeeZd S) ValueTcCs||_||_dS)N) _typecode_value)r%rrlockrrrr&s zValue.__init__cCs|jS)N)r)r%rrrrsz Value.getcCs ||_dS)N)r)r%rrrrrsz Value.setcCs dt|j|j|jfS)Nz %s(%r, %r))rr+r r)r%rrrr,szValue.__repr__N) r+r-r.r&rrr,rrrrrrr s    r cCstj||S)N)r)rZsequencerrrrArraysrc@sReZdZdZddZddZd d Zd d Zd dZdS) IteratorProxy__next__r0throwrcCs|S)Nr)r%rrr__iter__szIteratorProxy.__iter__cGs|jd|S)Nr)r)r%r5rrrrszIteratorProxy.__next__cGs|jd|S)Nr0)r)r%r5rrrr0szIteratorProxy.sendcGs|jd|S)Nr)r)r%r5rrrrszIteratorProxy.throwcGs|jd|S)Nr)r)r%r5rrrrszIteratorProxy.closeN)rr0rr) r+r-r.rrrr0rrrrrrrs     rc@sLeZdZd ZddddZddZd d Zd d ZdS) AcquirerProxyacquirereleaseTNcCs1|dkr|fn ||f}|jd|S)Nr)r)r%blockingrr5rrrrs!zAcquirerProxy.acquirecCs |jdS)Nr)r)r%rrrrszAcquirerProxy.releasecCs |jdS)Nr)r)r%rrrrszAcquirerProxy.__enter__cCs |jdS)Nr)r)r%rrrrrrrszAcquirerProxy.__exit__)rr)r+r-r.rrrrrrrrrrs   rc@sLeZdZdZdddZd d Zd d Zdd dZdS)ConditionProxyrrrmnotify notify_allNcCs|jd|fS)Nrm)r)r%rrrrrmszConditionProxy.waitcCs |jdS)Nr)r)r%rrrrszConditionProxy.notifycCs |jdS)Nr)r)r%rrrrszConditionProxy.notify_allcCs|}|r|S|dk r/t|}n d}d}xF|s|dk rj|t}|dkrjP|j||}q>W|S)Nr)_timerm)r% predicaterr8endtimewaittimerrrwait_fors        zConditionProxy.wait_for)rrrmrr)r+r-r.rrmrrr rrrrrs   rc@sIeZdZdZddZddZd d Zd d d Zd S) EventProxyrlrrrmcCs |jdS)Nrl)r)r%rrrrlszEventProxy.is_setcCs |jdS)Nr)r)r%rrrrszEventProxy.setcCs |jdS)Nr)r)r%rrrrszEventProxy.clearNcCs|jd|fS)Nrm)r)r%rrrrrmszEventProxy.wait)rlrrrm)r+r-r.rrlrrrmrrrrr!s    r!c@sseZdZdZdddZdd Zd d Zed d ZeddZ eddZ dS) BarrierProxy__getattribute__rmabortresetNcCs|jd|fS)Nrm)r)r%rrrrrmszBarrierProxy.waitcCs |jdS)Nr$)r)r%rrrr$szBarrierProxy.abortcCs |jdS)Nr%)r)r%rrrr%szBarrierProxy.resetcCs|jddS)Nr#parties)r&)r)r%rrrr&szBarrierProxy.partiescCs|jddS)Nr# n_waiting)r')r)r%rrrr'szBarrierProxy.n_waitingcCs|jddS)Nr#broken)r()r)r%rrrr(szBarrierProxy.broken)r#rmr$r%) r+r-r.rrmr$r%rr&r'r(rrrrr"s   r"c@s:eZdZd ZddZddZdd Zd S) NamespaceProxyr# __setattr__ __delattr__cCsB|ddkr tj||Stj|d}|d|fS)NrrGrr#)objectr#)r%r callmethodrrr __getattr__szNamespaceProxy.__getattr__cCsH|ddkr#tj|||Stj|d}|d||fS)NrrGrr*)r,r*r#)r%rrr-rrrr*szNamespaceProxy.__setattr__cCsB|ddkr tj||Stj|d}|d|fS)NrrGrr+)r,r+r#)r%rr-rrrr+szNamespaceProxy.__delattr__N)r#r*r+)r+r-r.rr.r*r+rrrrr)s   r)c@s=eZdZdZddZddZeeeZdS) ValueProxyrrcCs |jdS)Nr)r)r%rrrrszValueProxy.getcCs|jd|fS)Nr)r)r%rrrrr szValueProxy.setN)rr)r+r-r.rrrrrrrrrr/s   r/ BaseListProxy__add__ __contains__ __delitem__ __getitem____len____mul__ __reversed____rmul__ __setitem__rCcountextendindexinsertrremovereverser__imul__c@s(eZdZddZddZdS) ListProxycCs|jd|f|S)Nr;)r)r%rrrr__iadd__szListProxy.__iadd__cCs|jd|f|S)Nr@)r)r%rrrrr@szListProxy.__imul__N)r+r-r.rBr@rrrrrAs  rA DictProxyrrrZhas_keypopitem setdefaultr  ArrayProxy PoolProxyZapplyZ apply_asyncrimapZimap_unorderedrmapZ map_asyncstarmapZ starmap_asyncrZ AsyncResultIteratorc@s(eZdZddZddZdS)rGcCs|S)Nr)r%rrrr5szPoolProxy.__enter__cCs|jdS)N)r)r%rrrrrrr7szPoolProxy.__exit__N)r+r-r.rrrrrrrG4s  c@seZdZdS)rN)r+r-r.rrrrr>s Queue JoinableQueuerdLockr^ SemaphoreBoundedSemaphore ConditionBarrierPoolrdictrrF)I__all__rpr]rqueuerrrrr r r r r rrrrZ view_typesrr!Z view_typer,rr9r2r~r:rFrHrIrrarb XmlListener XmlClientrYrrrrrrrr r rrrrr!r"r)r/r0rArCrFZ BasePoolProxyrrGrrLrdrNr^rOrPrQrRrSrTrrrr s                      __pycache__/pool.cpython-35.opt-2.pyc000064400000050474147554447510013344 0ustar00 ]d@sddgZddlZddlZddlZddlZddlZddlZddlZddlm Z ddlm Z m Z dZ dZ dZejZdd Zd d ZGd d d eZGdddZddZGdddeZdfddddZddZGdddeZGdddeZeZGdddeZGdddeZGd d!d!eZ Gd"ddeZ!dS)#Pool ThreadPoolN)util) get_context TimeoutErrorcCstt|S)N)listmap)argsr )/opt/alt/python35/lib64/python3.5/pool.pymapstar+srcCsttj|d|dS)Nrr)r itertoolsstarmap)r r r r starmapstar.src@s(eZdZddZddZdS)RemoteTracebackcCs ||_dS)N)tb)selfrr r r __init__6szRemoteTraceback.__init__cCs|jS)N)r)rr r r __str__8szRemoteTraceback.__str__N)__name__ __module__ __qualname__rrr r r r r5s  rc@s(eZdZddZddZdS)ExceptionWithTracebackcCsDtjt|||}dj|}||_d||_dS)Nz """ %s""") tracebackformat_exceptiontypejoinexcr)rr rr r r r<s zExceptionWithTraceback.__init__cCst|j|jffS)N) rebuild_excr r)rr r r __reduce__Asz!ExceptionWithTraceback.__reduce__N)rrrrr"r r r r r;s  rcCst||_|S)N)r __cause__)r rr r r r!Dsr!cs:eZdZfddZddZddZS)MaybeEncodingErrorcsAt||_t||_tt|j|j|jdS)N)reprr valuesuperr$r)rr r&) __class__r r rPszMaybeEncodingError.__init__cCsd|j|jfS)Nz(Error sending result: '%s'. Reason: '%s')r&r )rr r r rUs zMaybeEncodingError.__str__cCsd|jj|fS)Nz<%s: %s>)r(r)rr r r __repr__YszMaybeEncodingError.__repr__)rrrrrr)r r )r(r r$Ls  r$Fc'Cs|j}|j}t|dr;|jj|jj|dk rQ||d}x|dksx|r||kry |} Wn&ttfk rtj dPYnX| dkrtj dP| \} } } } }yd| | |f}WnUt k rM}z5|r/| t k r/t ||j }d|f}WYdd}~XnXy|| | |fWnbt k r}zBt||d}tj d||| | d|ffWYdd}~XnXd} } }} } }|d7}qZWtj d |dS) N_writerrz)worker got EOFError or OSError -- exitingzworker got sentinel -- exitingTFrz0Possible encoding error while sending result: %szworker exiting after %d tasks)putgethasattrr*close_readerEOFErrorOSErrorrdebug Exception_helper_reraises_exceptionr __traceback__r$)inqueueoutqueue initializerinitargsZmaxtasksZwrap_exceptionr+r,Z completedtaskjobifuncr kwdsresultewrappedr r r worker]sD      !     ,rBcCs |dS)Nr )exr r r r4sr4c@seZdZdZddZddfddddZddZd d Zd d Zd dZ fiddZ dddZ dddZ dddddZ ddZdddZdddZfiddddZdddd d!Zdddd"d#Zed$d%Zed&d'Zed(d)Zed*d+Zd,d-Zd.d/Zd0d1Zd2d3Zed4d5Zed6d7Zd8d9Z d:d;Z!dS)r r r rEsz Pool.ProcessNc Cs#|p t|_|jtj|_i|_t|_||_ ||_ ||_ |dkrvt j psd}|dkrtd|dk rt| rtd||_g|_|jtjdtjd|f|_d|j_t|j_|jjtjdtjd|j|j|j|j|jf|_d|j_t|j_|jjtjdtjd|j|j |jf|_!d|j!_t|j!_|j!jt"j#||j$d|j|j%|j|j|j|j|j!|jfdd|_&dS) Nrz&Number of processes must be at least 1zinitializer must be a callabletargetr T exitpriority)'rrD _setup_queuesqueueQueue _taskqueue_cacheRUN_state_maxtasksperchild _initializer _initargsos cpu_count ValueErrorcallable TypeError _processes_pool_repopulate_pool threadingThreadr_handle_workers_worker_handlerdaemonstart _handle_tasks _quick_put _outqueue _task_handler_handle_results _quick_get_result_handlerrFinalize_terminate_pool_inqueue _terminate)r processesr8r9maxtasksperchildcontextr r r rsT                              z Pool.__init__cCswd}xjttt|jD]M}|j|}|jdk r"tjd||jd}|j|=q"W|S)NFzcleaning up worker %dT)reversedrangelenrYexitcoderr2r)rZcleanedr<rBr r r _join_exited_workerss"  zPool._join_exited_workersc Csxt|jt|jD]}|jdtd|j|j|j|j |j |j f}|jj ||j jdd|_ d|_|jtjdqWdS)NrFr rEZ PoolWorkerTz added worker)rprXrqrYrErBrjrcrQrRrP_wrap_exceptionappendnamereplacer_r`rr2)rr<wr r r rZs#    zPool._repopulate_poolcCs|jr|jdS)N)rsrZ)rr r r _maintain_pools zPool._maintain_poolcCsL|jj|_|jj|_|jjj|_|jjj|_ dS)N) rD SimpleQueuerjrcr*sendrbr/recvrf)rr r r rIszPool._setup_queuescCs|j|||jS)N) apply_asyncr,)rr=r r>r r r applysz Pool.applycCs|j||t|jS)N) _map_asyncrr,)rr=iterable chunksizer r r r szPool.mapcCs|j||t|jS)N)rrr,)rr=rrr r r r sz Pool.starmapcCs|j||t|||S)N)rr)rr=rrcallbackerror_callbackr r r starmap_asyncszPool.starmap_asyncccsy>d}x1t|D]#\}}||||fifVqWWn@tk r}z ||dt|fifVWYdd}~XnXdS)Nr) enumerater3r4)rZ result_jobr=rr<xr@r r r _guarded_task_generations zPool._guarded_task_generationrcCs|jtkrtd|dkret|j}|jj|j|j|||j f|St j |||}t|j}|jj|j|jt ||j fdd|DSdS)NzPool not runningrcss"|]}|D] }|Vq qdS)Nr ).0chunkitemr r r @szPool.imap..) rOrNrU IMapIteratorrMrLr+r_job _set_lengthr _get_tasksr)rr=rrr? task_batchesr r r imap's        z Pool.imapcCs|jtkrtd|dkret|j}|jj|j|j|||j f|St j |||}t|j}|jj|j|jt ||j fdd|DSdS)NzPool not runningrcss"|]}|D] }|Vq qdS)Nr )rrrr r r r[sz&Pool.imap_unordered..) rOrNrUIMapUnorderedIteratorrMrLr+rrrrrr)rr=rrr?rr r r imap_unorderedBs        zPool.imap_unorderedcCs_|jtkrtdt|j||}|jj|jd|||fgdf|S)NzPool not runningr)rOrNrU ApplyResultrMrLr+r)rr=r r>rrr?r r r r}]s  +zPool.apply_asynccCs|j||t|||S)N)rr)rr=rrrrr r r map_asynchszPool.map_asyncc Cs|jtkrtdt|ds6t|}|dkrztt|t|jd\}}|rz|d7}t|dkrd}tj |||}t |j |t||d|} |j j |j| j||df| S)NzPool not running__len__rrr)rOrNrUr-r divmodrqrYrr MapResultrMrLr+rr) rr=rZmapperrrrextrarr?r r r rps&   (     zPool._map_asynccCsrtj}xB|jtks6|jrP|jtkrP|jtjdqW|j j dt j ddS)Ng?zworker handler exiting) r[current_threadrOrNrM TERMINATErytimesleeprLr+rr2)poolthreadr r r r]s  * zPool._handle_workersc Cstj}x+t|jdD] \}}d}zx|D]}|jrXtjdPy||Wq;tk r} zN|dd\} } y|| j| d| fWnt k rYnXWYdd} ~ Xq;Xq;W|rtjd|r|dnd } || dwPWdd}}} XqWtjdyFtjd|j dtjdx|D]} |dqkWWnt k rtjd YnXtjd dS) Nz'task handler found thread._state != RUNrFzdoing set_length()rztask handler got sentinelz/task handler sending sentinel to result handlerz(task handler sending sentinel to workersz/task handler got OSError when sending sentinelsztask handler exitingr) r[riterr,rOrr2r3_setKeyErrorr+r1) taskqueuer+r7rcacherZtaskseqZ set_lengthr:r@r;idxpr r r rasB            zPool._handle_taskscCs tj}xy |}Wn)ttfk rGtjddSYnX|jr_tjdP|dkrytjdP|\}}}y||j||Wntk rYnXd}}}qWx|r|jt kry |}Wn)ttfk rtjddSYnX|dkr4tjdq|\}}}y||j||Wntk roYnXd}}}qWt |drtjdy2x+t dD]}|j j sP|qWWnttfk rYnXtjdt||jdS) Nz.result handler got EOFError/OSError -- exitingz,result handler found thread._state=TERMINATEzresult handler got sentinelz&result handler ignoring extra sentinelr/z"ensuring that outqueue is not full z7result handler exiting: len(cache)=%s, thread._state=%s)r[rr1r0rr2rOrrrr-rpr/pollrq)r7r,rrr:r;r<objr r r resZ                 zPool._handle_resultsccsDt|}x1ttj||}|s1dS||fVqWdS)N)rtuplerislice)r=itsizerr r r rs  zPool._get_taskscCstddS)Nz:pool objects cannot be passed between processes or pickled)NotImplementedError)rr r r r"szPool.__reduce__cCs5tjd|jtkr1t|_t|j_dS)Nz closing pool)rr2rOrNCLOSEr^)rr r r r.s  z Pool.closecCs0tjdt|_t|j_|jdS)Nzterminating pool)rr2rrOr^rk)rr r r terminates   zPool.terminatecCsVtjd|jj|jj|jjx|jD]}|jq>WdS)Nz joining pool)rr2r^rrdrgrY)rrr r r rs     z Pool.joincCsZtjd|jjx9|jrU|jjrU|jjtj dqWdS)Nz7removing tasks from inqueue until task handler finishedr) rr2Z_rlockacquireis_aliver/rr|rr)r6 task_handlerrr r r _help_stuff_finish(s    zPool._help_stuff_finishc Cstjdt|_t|_tjd|j||t|t|_|jdtjdtj|k r|j |rt |ddrtjdx'|D]} | j dkr| j qWtjdtj|k r|j tjdtj|k r&|j |rt |ddrtjd x8|D]0} | j rStjd | j| j qSWdS) Nzfinalizing poolz&helping task handler/workers to finishzjoining worker handlerrrzterminating workerszjoining task handlerzjoining result handlerzjoining pool workerszcleaning up worker %d)rr2rrOrrqr+r[rrr-rrrrpid) clsrr6r7rZworker_handlerrZresult_handlerrrr r r ri1s6                 zPool._terminate_poolcCs|S)Nr )rr r r __enter___szPool.__enter__cCs|jdS)N)r)rexc_typeexc_valexc_tbr r r __exit__bsz Pool.__exit__)"rrrrtrErrsrZryrIr~r rrrrrr}rr staticmethodr]rarerr"r.rrr classmethodrirrr r r r rsD   8        .<     . c@s^eZdZddZddZddZddd Zdd d Zd d ZdS)rcCsJtj|_tt|_||_||_||_|||jrEr r r rE szThreadPool.ProcessNcCstj||||dS)N)rr)rrlr8r9r r r rszThreadPool.__init__cCs@tj|_tj|_|jj|_|jj|_dS)N)rJrKrjrcr+rbr,rf)rr r r rIszThreadPool._setup_queuesc CsF|j6|jj|jjdg||jjWdQRXdS)N) not_emptyrJclearextend notify_all)r6rrr r r rs  zThreadPool._help_stuff_finish) rrrrtrrErrIrr r r r rs  )"__all__r[rJrrrSrrrrrrrNrrcountrrrr3rrr!r$rBr4objectrrZ AsyncResultrrrrr r r r  s<             * &%@__pycache__/reduction.cpython-35.opt-1.pyc000064400000017036147554447510014363 0ustar00 Yf@sddlZddlZddlZddlZddlZddlZddlZddlmZdddddgZ ej d kpe ed oe ed oe ejd Z Gd ddej ZejZdddZej d krfe dddg7Z ddlZddddZddZddZddZGdddeZnje dddg7Z ddlZej dkZddZddZddZddZd dZd!d"ZGd#d$d$Zeeej ed%d&Z!eee"j#e!eee$j%e!d'd(Z&d)d*Z'eej(e&ej d krd+d,Z)d-d.Z*eeje)n(d/d,Z)d0d.Z*eeje)dS)1N)context send_handle recv_handleForkingPicklerregisterdumpwin32CMSG_LEN SCM_RIGHTSsendmsgcsgeZdZdZiZejZfddZe ddZ e dddZ e j Z S) rz)Pickler subclass used by multiprocessing.cs9tj||jj|_|jj|jdS)N)super__init___copyreg_dispatch_tablecopydispatch_tableupdate_extra_reducers)selfargs) __class__>/opt/alt/python35/lib64/python3.5/multiprocessing/reduction.pyr%szForkingPickler.__init__cCs||j|r.r3r4r0r/r?r5r6)rrCrrrr;ts zDupHandle.detach)r"r#r$r%rr;rrrrr+cs DupFdsendfdsrecvfdsdarwincCs{tjd|}tt|dg}|j|gtjtj|fgtrw|jddkrwt ddS)z,Send an array of fds over an AF_UNIX socket.irAz%did not receive acknowledgement of fdN) arraybyteslenr socket SOL_SOCKETr ACKNOWLEDGEr: RuntimeError)sockZfdsmsgrrrrEs %c Cs(tjd}|j|}|jdtj|\}}}}| rW| rWtytrm|jdt|dkrt dt||d\}} } |tj kr| tj krt| |jdkrt |j | t|SWnt tfk rYnXt ddS)z/Receive an array of fds over an AF_UNIX socket.rHrrJzreceived %d items of ancdatarzInvalid data receivedN)rKitemsizeZrecvmsgrNr EOFErrorrPr7rMrQrOr ValueErrorZ frombyteslist IndexError) rRsizeaZ bytes_sizerSZancdataflagsZaddrZ cmsg_levelZ cmsg_typeZ cmsg_datarrrrFs* '  c Cs?tj|jtjtj}t||gWdQRXdS)z&Send a handle over a local connection.N)rNfromfdfilenoAF_UNIX SOCK_STREAMrE)r8r2r9srrrrs$c Cs@tj|jtjtj}t|ddSWdQRXdS)z)Receive a handle over a local connection.rrN)rNr\r]r^r_rF)r8r`rrrrs$cCsatj}|dk r.|j|j|StrQddlm}|j|StddS)zReturn a wrapper for an fd.Nr)resource_sharerz&SCM_RIGHTS appears not to be available)rZget_spawning_popenrDZduplicate_for_childHAVE_SEND_HANDLErarV)fdZ popen_objrarrrrDs   cCsE|jdkr(t|j|jjffSt|j|jjffSdS)N)__self__getattrr__func__r")mrrr_reduce_methodsric@seZdZddZdS)_CcCsdS)Nr)rrrrfsz_C.fN)r"r#r$rkrrrrrjs rjcCst|j|jffS)N)rf __objclass__r")rhrrr_reduce_method_descriptorsrmcCs"t|j|j|jpiffS)N)_rebuild_partialfuncrkeywords)prrr_reduce_partialsrrcCstj|||S)N) functoolspartial)rorrprrrrnsrncCs#ddlm}t||ffS)Nr) DupSocket)raru_rebuild_socket)r`rurrr_reduce_socketsrwcCs |jS)N)r;)ZdsrrrrvsrvcCs1t|j}t||j|j|jffS)N)rDr]rvfamilyrproto)r`dfrrrrwscCs%|j}tj|||d|S)Nr])r;rN)rzrxrryrdrrrrvs )+r&rsrr<r(rNsysrcr__all__platformhasattrrbZPicklerrrrr.r,r-rrobjectr+rKrPrErFrDrirjrrkrmrWappendint__add__rrrnrtrwrvrrrr s^           #              __pycache__/popen_fork.cpython-35.opt-1.pyc000064400000004433147554447510014526 0ustar00 Yf @sWddlZddlZddlZddlmZdgZGdddeZdS)N)utilPopenc@sgeZdZdZddZddZejddZdd d Z d d Z d dZ dS)rforkcCs4tjjtjjd|_|j|dS)N)sysstdoutflushstderr returncode_launch)self process_objr?/opt/alt/python35/lib64/python3.5/multiprocessing/popen_fork.py__init__s   zPopen.__init__cCs|S)Nr)r fdrrrduplicate_for_childszPopen.duplicate_for_childcCs|jdkrxPytj|j|\}}Wn)tk r\}z dSWYdd}~XqXPqW||jkrtj|rtj| |_ntj||_|jS)N)r oswaitpidpidOSError WIFSIGNALEDWTERMSIG WEXITSTATUS)r Zflagrstserrrpollsz Popen.pollNcCsm|jdkrf|dk rDddlm}||jg|sDdS|j|dkr_tjndS|jS)Nr)waitg)r Zmultiprocessing.connectionrsentinelrrWNOHANG)r timeoutrrrrr,s "z Popen.waitc Csn|jdkrjytj|jtjWn>tk r=Yn-tk ri|jdddkreYnXdS)Nr g?) r rkillrsignalSIGTERMProcessLookupErrorrr)r rrr terminate6s  zPopen.terminatec Csd}tj\}}tj|_|jdkrzBtj|dtjkrkddl}|j|j }Wdtj |Xn/tj|t j |tj|f||_ dS)Nrrrandom)rpiperrclosermodulesr&Zseed _bootstrap_exitrZFinalizer)r r codeZparent_rZchild_wr&rrrr @s    z Popen._launch) __name__ __module__ __qualname__methodrrrrrrr%r rrrrr s    )rrr"r__all__objectrrrrrs    __pycache__/connection.cpython-35.opt-2.pyc000064400000057753147554447510014541 0ustar00 ]x @sIddddgZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z dd l m Z mZdd l mZy2ddlZdd lmZmZmZmZWn*ek r"ejd krdZYnXd ZdZejZdZdgZeedrldZedg7Zejd krdZedg7ZeddZddZddZ ddZ!ddZ"GdddZ#erGddde#Z$Gd d!d!e#Z%Gd"dde&Z'ddd#dZ(ejd kr[d$d%dZ)nd$d&dZ)Gd'd(d(e&Z*d)d*Z+ejd krGd+d,d,e&Z,d-d.Z-d/Z.d0Z/d1Z0d2Z1d3d4Z2d5d6Z3Gd7d8d8e&Z4d9d:Z5d;d<Z6Gd=d>d>e'Z7d?d@Z8ejd kr|dAdBZ9ej:ej;hZ<ddCdZ=n?ddl>Z>ee>dDre>j?Z@n e>jAZ@ddEdZ=ejd krdFdGZBdHdIZCe jDe%eBdJdKZEdLdMZFe jDe$eEn(dNdGZBdOdIZCe jDe%eBdS)PClientListenerPipewaitN) reduction)util)AuthenticationErrorBufferTooShort)ForkingPickler) WAIT_OBJECT_0WAIT_ABANDONED_0 WAIT_TIMEOUTINFINITEwin32i g4@AF_INETAF_UNIXAF_PIPEcCstj|S)N)time)timeoutr//opt/alt/python35/lib64/python3.5/connection.py _init_timeout;srcCstj|kS)N)r)trrr_check_timeout>srcCs|dkrd S|dkr8tjdddtjS|dkrptjdd tjttfdd Std dS) Nr localhostrrprefixz listener-dirrz\\.\pipe\pyc-%d-%d-zunrecognized family)rr) tempfilemktempr get_temp_dirosgetpidnext _mmap_counter ValueError)familyrrrarbitrary_addressEs     r(cCsitjdkr+|dkr+td|tjdkre|dkrett|setd|dS)NrrzFamily %s is not recognized.r)sysplatformr&hasattrsocket)r'rrr_validate_familySs r-cCset|tkrdSt|tkr;|jdr;dSt|tkrQdStd|dS)Nrz\\rrzaddress type of %r unrecognized)typetuplestr startswithr&)addressrrr address_type_s!r3c@s!eZdZdZddddZddZddZd d Zd d Zd dZ e ddZ e ddZ e ddZ ddZddZddddZddZdddZdd d!Zd"d#Zd$d%d&Zd'd(Zd)d*ZdS)+_ConnectionBaseNTcCs]|j}|dkr$td| r>| r>td||_||_||_dS)Nrzinvalid handlez6at least one of `readable` and `writable` must be True) __index__r&_handle _readable _writable)selfhandlereadablewritablerrr__init__us      z_ConnectionBase.__init__cCs|jdk r|jdS)N)r6_close)r9rrr__del__sz_ConnectionBase.__del__cCs|jdkrtddS)Nzhandle is closed)r6OSError)r9rrr _check_closedsz_ConnectionBase._check_closedcCs|jstddS)Nzconnection is write-only)r7r@)r9rrr_check_readables z_ConnectionBase._check_readablecCs|jstddS)Nzconnection is read-only)r8r@)r9rrr_check_writables z_ConnectionBase._check_writablecCs/|jrd|_n |jtddS)NFzbad message length)r8r7closer@)r9rrr_bad_message_lengths   z#_ConnectionBase._bad_message_lengthcCs |jdkS)N)r6)r9rrrclosedsz_ConnectionBase.closedcCs|jS)N)r7)r9rrrr;sz_ConnectionBase.readablecCs|jS)N)r8)r9rrrr<sz_ConnectionBase.writablecCs|j|jS)N)rAr6)r9rrrfilenos z_ConnectionBase.filenoc Cs.|jdk r*z|jWdd|_XdS)N)r6r>)r9rrrrDsz_ConnectionBase.closercCs|j|jt|}|jdkrAtt|}t|}|dkretd||kr}td|dkr||}n7|dkrtdn|||krtd|j||||dS)Nrrzoffset is negativezbuffer length < offsetzsize is negativezbuffer length < offset + size)rArC memoryviewitemsizebyteslenr& _send_bytes)r9bufoffsetsizemnrrr send_bytess"            z_ConnectionBase.send_bytescCs.|j|j|jtj|dS)N)rArCrLr dumps)r9objrrrsends  z_ConnectionBase.sendcCsg|j|j|dk r8|dkr8td|j|}|dkr]|j|jS)Nrznegative maxlength)rArBr& _recv_bytesrEgetvalue)r9 maxlengthrMrrr recv_bytess     z_ConnectionBase.recv_bytesc Cs|j|jt|}|j}|t|}|dkrWtdn||krotd|j}|j}|||krt|j |j d|j |||||||SWdQRXdS)Nrznegative offsetzoffset too large) rArBrHrIrKr&rVtellr rWseekreadinto)r9rMrNrPrIbytesizeresultrOrrrrecv_bytes_intos"         z_ConnectionBase.recv_bytes_intocCs3|j|j|j}tj|jS)N)rArBrVr loads getbuffer)r9rMrrrrecvs   z_ConnectionBase.recvgcCs!|j|j|j|S)N)rArB_poll)r9rrrrpolls  z_ConnectionBase.pollcCs|S)Nr)r9rrr __enter__sz_ConnectionBase.__enter__cCs|jdS)N)rD)r9exc_type exc_valueexc_tbrrr__exit__sz_ConnectionBase.__exit__)__name__ __module__ __qualname__r6r=r?rArBrCrEpropertyrFr;r<rGrDrRrUrYr_rbrdrerirrrrr4rs(            r4c@s[eZdZdZejddZddZdddZd d Z d d Z dS) PipeConnectionFcCs||jdS)N)r6)r9Z _CloseHandlerrrr>szPipeConnection._closecCstj|j|dd\}}zJy.|tjkrQtj|jgdt}Wn|jYnXWd|jd\}}XdS)N overlappedTF) _winapiZ WriteFiler6ERROR_IO_PENDINGWaitForMultipleObjectseventrcancelGetOverlappedResult)r9rMoverrwaitresZnwrittenrrrrLs!  zPipeConnection._send_bytesNc Csi|jrd|_tjS|dkr.dn t|d}ytj|j|dd\}}zJy.|tjkrtj|j gdt }Wn|j YnXWd|j d\}}|dkrtj}|j |j|S|tjkr|j||SXWnCtk rX}z#|jtjkrCtnWYdd}~XnXtddS)NFroTrz.shouldn't get here; expected KeyboardInterrupt)_got_empty_messageioBytesIOminrpReadFiler6rqrrrsrrtruwriteraZERROR_MORE_DATA_get_more_datar@winerrorERROR_BROKEN_PIPEEOFError RuntimeError) r9maxsizeZbsizervrwrxZnreadferrrrV&s6   !     zPipeConnection._recv_bytescCs?|js%tj|jddkr)dStt|g|S)NrT)rzrp PeekNamedPiper6boolr)r9rrrrrcFs zPipeConnection._pollcCs|j}tj}|j|tj|jd}|dk rgt|||krg|jtj |j|dd\}}|j d\}}|j|j|S)NrroT) rar{r|rrprr6rKrEr~ru)r9rvrrMrleftrwZrbytesrrrrLs   " !zPipeConnection._get_more_data) rjrkrlrzrp CloseHandler>rLrVrcrrrrrrn s   rnc@seZdZer9ejddZejZej Z n$e j ddZe j Ze jZ eddZe ddZdd Zd d d Zd dZd S) ConnectioncCs||jdS)N)r6)r9r>rrrr>cszConnection._closecCs||jdS)N)r6)r9r>rrrr>hscCsPt|}x=||j|}||8}|dkr8P||d}qWdS)Nr)rKr6)r9rMr remainingrQrrr_sendms   zConnection._sendcCstj}|j}|}xo|dkr|||}t|}|dkrr||krftn td|j|||8}qW|S)Nrzgot end of file during message)r{r|r6rKrr@r)r9rOreadrMr:rchunkrQrrr_recvvs        zConnection._recvcCs\t|}tjd|}|dkrG|j||j|n|j||dS)Nz!ii@)rKstructpackr)r9rMrQheaderrrrrLs    zConnection._send_bytesNcCsS|jd}tjd|j\}|dk rF||krFdS|j|S)Nz!i)rrunpackrW)r9rrMrOrrrrVs zConnection._recv_bytescCst|g|}t|S)N)rr)r9rrrrrrcszConnection._poll)rjrkrlrp_multiprocessingZ closesocketr>rU_writerb_readr"rDrrrrrLrVrcrrrrr\s       rc@s|eZdZddddddZddZddZed d Zed d Zd d Z ddZ dS)rNrcCs|p|rt|pt}|p-t|}t||dkr[t|||_nt||||_|dk rt|t rt d||_ dS)Nrzauthkey should be a byte string) r3default_familyr(r- PipeListener _listenerSocketListener isinstancerJ TypeError_authkey)r9r2r'backlogauthkeyrrrr=s   zListener.__init__cCsW|jdkrtd|jj}|jrSt||jt||j|S)Nzlistener is closed)rr@acceptrdeliver_challengeanswer_challenge)r9crrrrs  zListener.acceptcCs,|j}|dk r(d|_|jdS)N)rrD)r9listenerrrrrDs   zListener.closecCs |jjS)N)r_address)r9rrrszListener.cCs |jjS)N)r_last_accepted)r9rrrrscCs|S)Nr)r9rrrreszListener.__enter__cCs|jdS)N)rD)r9rfrgrhrrrriszListener.__exit__) rjrkrlr=rrDrmr2 last_acceptedrerirrrrrs    cCs|pt|}t||dkr7t|}n t|}|dk rkt|t rktd|dk rt||t|||S)Nrzauthkey should be a byte string) r3r- PipeClient SocketClientrrJrrr)r2r'rrrrrrs       TcCs|rYtj\}}|jd|jdt|j}t|j}n6tj\}}t|dd}t|dd}||fS)NTr<Fr;)r, socketpair setblockingrdetachr"pipe)duplexs1s2c1c2fd1fd2rrrrs  c CsAtd}|r;tj}tjtjB}tt}}ntj}tj}dt}}tj||tjBtj Btj tj Btj Bd||tj tj}tj||dtjtjtjtj}tj|tj ddtj|dd}|jd\} } t|d|} t|d|} | | fS)NrrrroTr<r;)r(rpPIPE_ACCESS_DUPLEX GENERIC_READ GENERIC_WRITEBUFSIZEZPIPE_ACCESS_INBOUNDCreateNamedPipeFILE_FLAG_OVERLAPPEDFILE_FLAG_FIRST_PIPE_INSTANCEPIPE_TYPE_MESSAGEPIPE_READMODE_MESSAGE PIPE_WAITNMPWAIT_WAIT_FOREVERNULL CreateFile OPEN_EXISTINGSetNamedPipeHandleStateConnectNamedPiperurn) rr2ZopenmodeaccessZobsizeZibsizeZh1Zh2ro_rwrrrrrrs2        c@s7eZdZdddZddZddZdS) rrcCstjtt||_yqtjdkrI|jjtjtjd|jjd|jj ||jj ||jj |_ Wn"t k r|jjYnX||_d|_|dkrtj|tjd|fdd|_n d|_dS)NposixrTrargs exitpriorityr)r,getattr_socketr"name setsockopt SOL_SOCKET SO_REUSEADDRrbindlisten getsocknamerr@rD_familyrrFinalizeunlink_unlink)r9r2r'rrrrr=8s$      $zSocketListener.__init__cCs5|jj\}|_|jdt|jS)NT)rrrrrr)r9srrrrPs zSocketListener.acceptc Cs>z|jjWd|j}|dk r9d|_|XdS)N)rrDr)r9rrrrrDUs    zSocketListener.closeN)rjrkrlr=rrDrrrrr4s  rc Cs\t|}tjtt|1}|jd|j|t|jSWdQRXdS)NT)r3r,rrconnectrr)r2r'rrrrr_s    rc@sLeZdZdddZdddZddZed d ZdS) rNcCsq||_|jddg|_d|_tjd|jtj|tjd|j|jfdd|_ dS)NfirstTz listener created with address=%rrrr) r _new_handle _handle_queuerr sub_debugrr_finalize_pipe_listenerrD)r9r2rrrrr=ss   zPipeListener.__init__Fc CsbtjtjB}|r#|tjO}tj|j|tjtjBtjBtj t t tj tj S)N) rprrrrrrrrZPIPE_UNLIMITED_INSTANCESrrr)r9rflagsrrrr~s    zPipeListener._new_handlecCs|jj|j|jjd}ytj|dd}Wn:tk r}}z|jtjkrkWYdd}~XnbXzHytj |j gdt }Wn"|j tj |YnXWd|jd\}}Xt|S)NrroTF)rappendrpoprprr@rZ ERROR_NO_DATArrrsrrtrrurn)r9r:rvrresrrwrrrrs"   zPipeListener.acceptcCs2tjd|x|D]}tj|qWdS)Nz closing listener with address=%r)rrrpr)queuer2r:rrrrs z$PipeListener._finalize_pipe_listener)rjrkrlr=rr staticmethodrrrrrros   rcCst}xyKtj|dtj|tjtjBdtjtjtjtj}WnOt k r}z/|j tj tj fkst |rWYdd}~Xq XPq Wtj|tjddt|S)Nir)rrpZ WaitNamedPiperrrrrrr@rZERROR_SEM_TIMEOUTZERROR_PIPE_BUSYrrrrn)r2rhrrrrrs"  rs #CHALLENGE#s #WELCOME#s #FAILURE#cCsddl}tjt}|jt||j||dj}|jd}||krr|jt n|jt t ddS)Nrmd5zdigest received was wrong) hmacr"urandomMESSAGE_LENGTHrR CHALLENGEnewdigestrYWELCOMEFAILUREr ) connectionrrmessagerresponserrrrs   rcCsddl}|jd}|ttd}|j||dj}|j||jd}|tkrtddS)Nrrrzdigest sent was rejected) rrYrKrrrrRrr )rrrrrrrrrrs   rc@s4eZdZddZddZddZdS)ConnectionWrappercCsO||_||_||_x-dD]%}t||}t|||q"WdS)NrGrDrdrYrR)rGrDrdrYrR)_conn_dumps_loadsrsetattr)r9connrSr`attrrTrrrr=s     zConnectionWrapper.__init__cCs#|j|}|jj|dS)N)rrrR)r9rTrrrrrUszConnectionWrapper.sendcCs|jj}|j|S)N)rrYr)r9rrrrrbszConnectionWrapper.recvN)rjrkrlr=rUrbrrrrrs   rcCs%tj|fddddjdS)Nrzutf-8) xmlrpclibrSencode)rTrrr _xml_dumpssrcCs%tj|jd\\}}|S)Nzutf-8)rr`decode)rrTmethodrrr _xml_loadss!rc@seZdZddZdS) XmlListenercCs.ddljatj|}t|ttS)Nr) xmlrpc.clientclientrrrrrr)r9rTrrrrszXmlListener.acceptN)rjrkrlrrrrrrs rcOs(ddljatt||ttS)Nr)rrrrrrr)rkwdsrrr XmlClientsr cCst|}g}x|rtj|d|}|tkr@Pnrt|koatt|knrs|t8}n?t|kott|knr|t8}n td|j||||dd}d}qW|S)NFzShould not get hererr) listrprrrr rKr rr)ZhandlesrLreadyrrrr_exhaustive_waits   & &   r c .s |dkrt}n)|dkr*d}nt|dd}t|}ig}tt}zxy|D]q}yt|d}Wn"tk r||jrszwait..cs"g|]}|kr|qSrr)ro) ready_objectsrr ss zwait..)rr)rintr setrAttributeErrorr5rpr~r@r _ready_errorsrqrrsr)Zgetwindowsversionrur+rzaddr keysrtZERROR_OPERATION_ABORTEDupdate) object_listrZov_listZ ready_handlesrrGrvrwrrr)rrrr'sh         "  "            PollSelectorc Cst}x!|D]}|j|tjqW|dk rLtj|}xV|j|}|rudd|DS|dk rO|tj}|dkrO|SqOWWdQRXdS)NcSsg|]\}}|jqSr)fileobj)rkeyeventsrrrrs zwait..r) _WaitSelectorregister selectors EVENT_READrselect)rrselectorrTdeadliner rrrrs     c Csm|j}tj|tjtj?}ddlm}|j|}t||j |j ffSWdQRXdS)Nr)resource_sharer) rGr,fromfdr SOCK_STREAMrr)Z DupSocketrebuild_connectionr;r<)rr:rr)dsrrrreduce_connections  r.cCs"|j}t|j||S)N)rr)r-r;r<sockrrrr,s r,cCs_|jrtjnd|jr'tjndB}tj|j|}t||j|jffS)Nr) r;rpZFILE_GENERIC_READr<ZFILE_GENERIC_WRITErZ DupHandlerGrebuild_pipe_connection)rrdhrrrreduce_pipe_connectionsr2cCs|j}t|||S)N)rrn)r1r;r<r:rrrr0s r0cCs.tj|j}t||j|jffS)N)rDupFdrGr,r;r<)rdfrrrr.scCs|j}t|||S)N)rr)r4r;r<fdrrrr,s )G__all__r{r"r)r,rrr itertoolsrrrrr r r rpr r rr ImportErrorr*rCONNECTION_TIMEOUTcountr%rfamiliesr+rrr(r-r3r4rnrobjectrrrrrrrrrrrrrrrrrr r rZERROR_NETNAME_DELETEDrrr$rr"SelectSelectorr.r,r#r2r0rrrr s          &         PJ8,+ 8      P         __pycache__/synchronize.cpython-35.pyc000064400000027763147554447510014013 0ustar00 Yf/ @sddddddgZddlZddlZddlZddlZddlmZd d lmZd d lm Z d d lm Z ydd lm Z m Z Wn*e k re ddddYnXeed\ZZej jZGdddeZ Gddde ZGdddeZGddde ZGddde ZGdddeZGdddeZGdddejZdS)LockRLock SemaphoreBoundedSemaphore ConditionEventN)time)context)process)util)SemLock sem_unlinkz*This platform lacks a functioning sem_openz( implementation, therefore, the requiredz+ synchronization primitives needed will notz function, see issue 3770.c@seZdZejZddZeddZddZ ddZ d d Z d d Z d dZ eddZdS)r c CsK|dkrtjj}|j}tjdkp?|dk}xbtdD]H}y,tj||||j |}|_ Wnt k rYqOXPqOWt dt j d|j|jtjdkrdd} t j|| |j jdk rGdd lm} | |j jt j|tj|j jfd d dS) Nwin32forkdzcannot find name for semaphorezcreated semlock with handle %scSs|jjdS)N)_semlock _after_fork)objr@/opt/alt/python35/lib64/python3.5/multiprocessing/synchronize.pyrHsz%SemLock.__init__.._after_forkr )registerZ exitpriorityr)r Z_default_contextZ get_contextZget_start_methodsysplatformrange_multiprocessingr _make_namerFileExistsErrorr debughandle _make_methodsZregister_after_forknamesemaphore_trackerrZFinalize_cleanup) selfkindvaluemaxvaluectxr"Z unlink_nowislrrrrr__init__3s.      zSemLock.__init__cCs(ddlm}t|||dS)Nr ) unregister)r#r-r)r"r-rrrr$Us zSemLock._cleanupcCs"|jj|_|jj|_dS)N)racquirerelease)r%rrrr![szSemLock._make_methodscCs |jjS)N)r __enter__)r%rrrr0_szSemLock.__enter__cGs|jj|S)N)r__exit__)r%argsrrrr1bszSemLock.__exit__cCsbtj||j}tjdkr@tjj|j}n |j}||j|j |j fS)Nr) r assert_spawningrrrZget_spawning_popenZduplicate_for_childr r&r(r")r%r+hrrr __getstate__es    zSemLock.__getstate__cCs8tjj||_tjd|d|jdS)Nz recreated blocker with handle %rr)rr Z_rebuildrr rr!)r%staterrr __setstate__nszSemLock.__setstate__cCs$dtjjdttjfS)Nz%s-%sZ semprefix)r current_processZ_confignextr _randrrrrrsszSemLock._make_nameN)__name__ __module__ __qualname__tempfileZ_RandomNameSequencer:r, staticmethodr$r!r0r1r5r7rrrrrr /s   "    r c@s7eZdZdddZddZddZdS) rr cCs tj|t|td|dS)Nr))r r, SEMAPHORE SEM_VALUE_MAX)r%r'r)rrrr,~szSemaphore.__init__cCs |jjS)N)r _get_value)r%rrr get_valueszSemaphore.get_valuec CsBy|jj}Wntk r-d}YnXd|jj|fS)Nunknownz<%s(value=%s)>)rrB Exception __class__r;)r%r'rrr__repr__s   zSemaphore.__repr__N)r;r<r=r,rCrGrrrrr|s  c@s+eZdZdddZddZdS)rr cCs tj|t||d|dS)Nr))r r,r@)r%r'r)rrrr,szBoundedSemaphore.__init__c CsKy|jj}Wntk r-d}YnXd|jj||jjfS)NrDz<%s(value=%s, maxvalue=%s)>)rrBrErFr;r()r%r'rrrrGs   zBoundedSemaphore.__repr__N)r;r<r=r,rGrrrrrs c@s(eZdZddZddZdS)rcCs tj|tddd|dS)Nr r))r r,r@)r%r)rrrr,sz Lock.__init__c Csy|jjrPtjj}tjjdkr|dtjj7}nB|jjdkrnd}n$|jjdkrd}nd}Wnt k rd}YnXd |j j |fS) N MainThread|r NonerSomeOtherThreadSomeOtherProcessrDz<%s(owner=%s)>) r_is_miner r8r" threadingcurrent_threadrB_countrErFr;)r%r"rrrrGs     z Lock.__repr__N)r;r<r=r,rGrrrrrs  c@s(eZdZddZddZdS)rcCs tj|tddd|dS)Nr r))r r,RECURSIVE_MUTEX)r%r)rrrr,szRLock.__init__c Csy|jjr_tjj}tjjdkrM|dtjj7}|jj}nT|jjdkrd \}}n0|jjdkrd \}}n d \}}Wnt k rd\}}YnXd |j j ||fS)NrHrIr rJrrKnonzerorLrDz <%s(%s, %s)>)rJr)rKrR)rLrR)rDrD) rrMr r8r"rNrOrPrBrErFr;)r%r"countrrrrGs zRLock.__repr__N)r;r<r=r,rGrrrrrs  c@seZdZdddZddZddZdd Zd d Zd d ZddZ dddZ ddZ ddZ dddZ dS)rNcCsY|p|j|_|jd|_|jd|_|jd|_|jdS)Nr)r_lockr_sleeping_count _woken_count_wait_semaphorer!)r%lockr)rrrr,s zCondition.__init__cCs)tj||j|j|j|jfS)N)r r3rTrUrVrW)r%rrrr5s  zCondition.__getstate__cCs,|\|_|_|_|_|jdS)N)rTrUrVrWr!)r%r6rrrr7szCondition.__setstate__cCs |jjS)N)rTr0)r%rrrr0szCondition.__enter__cGs|jj|S)N)rTr1)r%r2rrrr1szCondition.__exit__cCs"|jj|_|jj|_dS)N)rTr.r/)r%rrrr!szCondition._make_methodsc Cs[y&|jjj|jjj}Wntk r@d}YnXd|jj|j|fS)NrDz <%s(%s, %s)>)rUrrBrVrErFr;rT)r%Z num_waitersrrrrGs   zCondition.__repr__c Cs|jjjstd|jj|jjj}x!t|D]}|jjqJWz|jj d|SWd|j jx!t|D]}|jj qWXdS)Nz,must acquire() condition before using wait()T) rTrrMAssertionErrorrUr/rPrrWr.rV)r%timeoutrSr*rrrwaits   zCondition.waitcCs|jjjstd|jjd s7tx4|jjdrm|jjd}|s:tq:W|jjdr|jj|jj|jjddS)Nzlock is not ownedF) rTrrMrYrWr.rVrUr/)r%resrrrnotifys  zCondition.notifycCs|jjjstd|jjd s7tx4|jjdrm|jjd}|s:tq:Wd}x-|jjdr|jj|d7}qwW|rx!t |D]}|jjqWx|jjdrqWdS)Nzlock is not ownedFrr ) rTrrMrYrWr.rVrUr/r)r%r\Zsleepersr*rrr notify_all s zCondition.notify_allcCs|}|r|S|dk r/t|}n d}d}xF|s|dk rj|t}|dkrjP|j||}q>W|S)Nr)_timer[)r%Z predicaterZresultZendtimeZwaittimerrrwait_for7s        zCondition.wait_for)r;r<r=r,r5r7r0r1r!rGr[r]r^rarrrrrs         c@sOeZdZddZddZddZddZd d d Zd S) rcCs.|j|j|_|jd|_dS)Nr)rr_condr_flag)r%r)rrrr,OszEvent.__init__c Cs<|j,|jjdr-|jjdSdSWdQRXdS)NFT)rbrcr.r/)r%rrris_setSs   z Event.is_setc Cs?|j/|jjd|jj|jjWdQRXdS)NF)rbrcr.r/r^)r%rrrsetZs  z Event.setc Cs%|j|jjdWdQRXdS)NF)rbrcr.)r%rrrclear`s z Event.clearNc Csn|j^|jjdr,|jjn|jj||jjdr_|jjdSdSWdQRXdS)NFT)rbrcr.r/r[)r%rZrrrr[ds  z Event.wait)r;r<r=r,rdrerfr[rrrrrMs     c@seZdZddddZddZddZedd Zejd d Zed d Z e jd d Z dS)BarrierNc Cssddl}ddlm}||jdd}|j}|j|||||fd|_d|_dS)Nrr ) BufferWrapperr*r)structheaprhZcalcsizerr7_staterP) r%ZpartiesactionrZr)rirhwrapperZcondrrrr,vs   zBarrier.__init__cCsC|\|_|_|_|_|_|jjjd|_dS)Nr*)_parties_action_timeoutrb_wrapperZcreate_memoryviewcast_array)r%r6rrrr7s$zBarrier.__setstate__cCs"|j|j|j|j|jfS)N)rnrorprbrq)r%rrrr5szBarrier.__getstate__cCs |jdS)Nr)rs)r%rrrrkszBarrier._statecCs||jdrrr_r r r r r ImportErrorlistrrQr@rAobjectrrrrrrrgrrrr s0       Mz'__pycache__/queues.cpython-35.opt-2.pyc000064400000022740147554447510013675 0ustar00 ])@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}||_tjdd\|_|_|j|_t j |_ t j dkr|d|_n|j|_|j||_d|_|jt j dkrt|tjdS)Nrr) SEM_VALUE_MAXduplexFwin32) synchronizer_maxsizerPipe_reader_writerLock_rlockosgetpid_opidsysplatform_wlockBoundedSemaphore_sem _ignore_epipe _after_forkr r)selfmaxsizectxr'+/opt/alt/python35/lib64/python3.5/queues.py__init__$s     zQueue.__init__cCsAtj||j|j|j|j|j|j|j|j fS)N) r assert_spawningr"rrrrrr!r)r$r'r'r( __getstate__9s zQueue.__getstate__c CsD|\|_|_|_|_|_|_|_|_|jdS)N) r"rrrrrr!rr#)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 Csf|jj||st|j;|jdkr>|j|jj||jjWdQRXdS)N) r!acquirerr0r4 _start_threadr3appendnotify)r$objblocktimeoutr'r'r(putPs  z Queue.putc Cs|r?|dkr?|j|j}WdQRX|jjn|rUtj|}|jj||sptzj|r|tj}|dks|j| rtn|jst|j}|jjWd|jjXtj |S)Nr) rr<r!releasetimer?rr>rloads)r$rDrEresdeadliner'r'r(get[s&    z Queue.getcCs|j|jjjS)N)rr!_semlock _get_value)r$r'r'r(qsizessz Queue.qsizecCs |j S)N)r>)r$r'r'r(emptywsz Queue.emptycCs|jjjS)N)r!rM_is_zero)r$r'r'r(fullzsz Queue.fullcCs |jdS)NF)rL)r$r'r'r( get_nowait}szQueue.get_nowaitcCs|j|dS)NF)rF)r$rCr'r'r( put_nowaitszQueue.put_nowaitc CsAd|_z|jjWd|j}|r<d|_|XdS)NT)r7rcloser8)r$rUr'r'r(rUs   z Queue.closecCs!td|jr|jdS)NzQueue.join_thread())r r5)r$r'r'r( join_threads  zQueue.join_threadc Cs=tdd|_y|jjWntk r8YnXdS)NzQueue.cancel_join_thread()T)r r6r5cancelAttributeError)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|jst|j tjtj|j gd d |_t|tj|j|jgd d |_dS) NzQueue._start_thread()targetargsnameZQueueFeederThreadTzdoing self._thread.start()z... done self._thread.start() exitpriority )r r3clearr.Threadr_feedr0r:rrrUr"r4daemonstartr6r _finalize_joinweakrefrefr5_finalize_closer8)r$r'r'r(r@s(             zQueue._start_threadcCsDtd|}|dk r6|jtdn tddS)Nzjoining queue threadz... queue thread joinedz... queue thread already dead)r join)Ztwrthreadr'r'r(rfs      zQueue._finalize_joinc Cs3td||jt|jWdQRXdS)Nztelling queue thread to quit)r rA _sentinelrB)buffernotemptyr'r'r(ris  zQueue._finalize_closecCstd|j}|j}|j}|j} t} tjdkrX|j} |j} nd} x:y|z|s{|Wd|Xy}xv| } | | krtd|dStj | } | dkr|| q| z|| Wd| XqWWnt k rYnXWqat k r}zZ|rTt |ddt jkrTdStrntd|dSddl}|jWYdd}~XqaXqaWdS)Nz$starting thread to feed data to piperz%feeder thread got sentinel -- exitingerrnorzerror in queue thread: %s)r r?rGwaitpopleftrlrrrdumps IndexError ExceptiongetattrroZEPIPErr traceback print_exc)rmrnr9Z writelockrUZ ignore_epipeZnacquireZnreleaseZnwaitZbpopleftsentinelZwacquireZwreleaserCervr'r'r(rcsR               !   z Queue._feed)__name__ __module__ __qualname__r)r+r-r#rFrLrOrPrRrSrTrUrVrYr@ staticmethodrfrircr'r'r'r(r"s$              c@saeZdZdddZddZddZdd d d Zd d ZddZd S)rrcCs;tj||d||jd|_|j|_dS)Nr&r)rr) Semaphore_unfinished_tasksr/_cond)r$r%r&r'r'r(r)szJoinableQueue.__init__cCstj||j|jfS)N)rr+rr)r$r'r'r(r+szJoinableQueue.__getstate__cCs:tj||dd|dd\|_|_dS)Nr)rr-rr)r$r,r'r'r(r-szJoinableQueue.__setstate__TNcCs|jj||st|jY|jH|jdkrH|j|jj||j j |jj WdQRXWdQRXdS)N) r!r?rr0rr4r@r3rArrGrB)r$rCrDrEr'r'r(rFs  zJoinableQueue.putc CsR|jB|jjds(td|jjjrG|jjWdQRXdS)NFz!task_done() called too many times)rrr? ValueErrorrMrQ notify_all)r$r'r'r( task_done's   zJoinableQueue.task_donec Cs4|j$|jjjs)|jjWdQRXdS)N)rrrMrQrp)r$r'r'r(rj.s zJoinableQueue.join) rzr{r|r)r+r-rFrrjr'r'r'r(r s    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)9s  zSimpleQueue.__init__cCs |j S)N)r>)r$r'r'r(rPBszSimpleQueue.emptycCs)tj||j|j|j|jfS)N)r r*rrrr)r$r'r'r(r+Es zSimpleQueue.__getstate__cCs1|\|_|_|_|_|jj|_dS)N)rrrrr=r>)r$r,r'r'r(r-IszSimpleQueue.__setstate__c Cs-|j|jj}WdQRXtj|S)N)rrr;rrI)r$rJr'r'r(rLMs zSimpleQueue.getc CsVtj|}|jdkr1|jj|n!|j|jj|WdQRXdS)N)rrrrrr9)r$rCr'r'r(rFSs  zSimpleQueue.putN) rzr{r|r)rPr+r-rLrFr'r'r'r(r7s     )__all__rrr.r1rHrgroqueuerr_multiprocessingrr utilr r r r r reductionrobjectrrlrrr'r'r'r( s"        ( *__pycache__/context.cpython-35.opt-1.pyc000064400000032315147554447510014050 0ustar00 Yf)@sWddlZddlZddlZddlmZgZGdddeZGdddeZGdd d eZ Gd d d eZ Gd d d e Z Gdddej ZGddde ZeddeeDe_ejdkrGdddej ZGdddej ZGdddej ZGddde ZGddde ZGdd d e Zd!ed"ed#eiZeed!ZnNGd$ddej ZGd%dde Zd"eiZeed"Zd&d'ZejZd(d)Zd*d+Zd,d-Z dS).N)processc@seZdZdS) ProcessErrorN)__name__ __module__ __qualname__rrZ&d S)? BaseContextcCs/tj}|dkr'tdn|SdS)z(Returns the number of CPUs in the systemNzcannot determine number of cpus)os cpu_countNotImplementedError)selfZnumrrr r's  zBaseContext.cpu_countcCs3ddlm}|d|j}|j|S)zReturns a manager associated with a running server process The managers methods such as `Lock()`, `Condition()` and `Queue()` can be used to create shared objects. r) SyncManagerctx)Zmanagersr get_contextstart)rrmrrr Manager/s zBaseContext.ManagerTcCsddlm}||S)z1Returns two connection object connected by a piper)Pipe) connectionr)rZduplexrrrr r:szBaseContext.PipecCs#ddlm}|d|jS)z#Returns a non-recursive lock objectr)Lockr) synchronizerr)rrrrr r?szBaseContext.LockcCs#ddlm}|d|jS)zReturns a recursive lock objectr)RLockr)rrr)rrrrr rDszBaseContext.RLockNcCs&ddlm}||d|jS)zReturns a condition objectr) Conditionr)rrr)rlockrrrr rIszBaseContext.ConditionrcCs&ddlm}||d|jS)zReturns a semaphore objectr) Semaphorer)rrr)rvaluerrrr rNszBaseContext.SemaphorecCs&ddlm}||d|jS)z"Returns a bounded semaphore objectr)BoundedSemaphorer)rr!r)rr r!rrr r!SszBaseContext.BoundedSemaphorecCs#ddlm}|d|jS)zReturns an event objectr)Eventr)rr"r)rr"rrr r"XszBaseContext.EventcCs,ddlm}||||d|jS)zReturns a barrier objectr)Barrierr)rr#r)rZpartiesactionZtimeoutr#rrr r#]szBaseContext.BarrierrcCs&ddlm}||d|jS)zReturns a queue objectr)Queuer)queuesr%r)rmaxsizer%rrr r%bszBaseContext.QueuecCs&ddlm}||d|jS)zReturns a queue objectr) JoinableQueuer)r&r(r)rr'r(rrr r(gszBaseContext.JoinableQueuecCs#ddlm}|d|jS)zReturns a queue objectr) SimpleQueuer)r&r)r)rr)rrr r)lszBaseContext.SimpleQueuecCs/ddlm}|||||d|jS)zReturns a process pool objectr)Poolcontext)Zpoolr*r)rZ processesZ initializerZinitargsZmaxtasksperchildr*rrr r*qszBaseContext.PoolcGsddlm}|||S)zReturns a shared objectr)RawValue) sharedctypesr,)rtypecode_or_typeargsr,rrr r,xszBaseContext.RawValuecCsddlm}|||S)zReturns a shared arrayr)RawArray)r-r0)rr.size_or_initializerr0rrr r0}szBaseContext.RawArrayrcGs/ddlm}|||d|d|jS)z$Returns a synchronized shared objectr)Valuerr)r-r2r)rr.rr/r2rrr r2szBaseContext.ValuecCs/ddlm}|||d|d|jS)z#Returns a synchronized shared arrayr)Arrayrr)r-r3r)rr.r1rr3rrr r3szBaseContext.ArraycCs<tjdkr8ttddr8ddlm}|dS)zCheck whether this is a fake forked process in a frozen executable. If so then run code specified by commandline and exit. win32frozenFr)freeze_supportN)sysplatformgetattrspawnr6)rr6rrr r6s!zBaseContext.freeze_supportcCsddlm}|S)zZReturn package logger -- if it does not already exist then it is created. r) get_logger)utilr;)rr;rrr r;szBaseContext.get_loggercCsddlm}||S)z8Turn on logging and add a handler which prints to stderrr) log_to_stderr)r<r=)rlevelr=rrr r=szBaseContext.log_to_stderrcCsddlm}dS)zVInstall support for sending connections and sockets between processes r)rN)r)rrrrr allow_connection_picklingsz%BaseContext.allow_connection_picklingcCsddlm}||dS)zSets the path to a python.exe or pythonw.exe binary used to run child processes instead of sys.executable when using the 'spawn' start method. Useful for people embedding Python. r)set_executableN)r:rA)r executablerArrr rAszBaseContext.set_executablecCsddlm}||dS)zkSet list of module names to try to load in forkserver process. This is really just a hint. r)set_forkserver_preloadN) forkserverrC)rZ module_namesrCrrr rCsz"BaseContext.set_forkserver_preloadc CsQ|dkr|Syt|}Wn"tk rBtd|YnX|j|S)Nzcannot find context for %r)_concrete_contextsKeyError ValueError_check_available)rmethodrrrr rs   zBaseContext.get_contextFcCs|jS)N)_name)r allow_nonerrr get_start_methodszBaseContext.get_start_methodcCstddS)Nz+cannot set start method of concrete context)rG)rrIforcerrr set_start_methodszBaseContext.set_start_methodcCsdS)Nr)rrrr rHszBaseContext._check_available)'rrrrr r r staticmethodrZcurrent_processZactive_childrenrrrrrrrr!r"r#r%r(r)r*r,r0r2r3r6r;r=r@rArCrrLrNrHrrrr r sF                r c@s(eZdZdZeddZdS)ProcessNcCstjjj|S)N)_default_contextrrP_Popen) process_objrrr rRszProcess._Popen)rrr _start_methodrOrRrrrr rPs rPcsaeZdZeZddZdfddZdddZdd d Zd d ZS) DefaultContextcCs||_d|_dS)N)rQ_actual_context)rr+rrr __init__s zDefaultContext.__init__NcsB|dkr.|jdkr'|j|_|jStj|SdS)N)rVrQsuperr)rrI) __class__rr rs   zDefaultContext.get_contextFcCsW|jdk r"| r"td|dkrA|rAd|_dS|j||_dS)Nzcontext has already been set)rV RuntimeErrorr)rrIrMrrr rNs   zDefaultContext.set_start_methodcCs/|jdkr%|rdS|j|_|jjS)N)rVrQrJ)rrKrrr rLs  zDefaultContext.get_start_methodcCsJtjdkrdgSddlm}|jr<dddgSddgSdS)Nr4r:r) reductionforkrD)r7r8r?r[HAVE_SEND_HANDLE)rr[rrr get_all_start_methodss   z$DefaultContext.get_all_start_methods) rrrrPrWrrNrLr^rr)rYr rUs  rUccs%|]}|ddkr|VqdS)r_Nr).0xrrr srbr4c@s(eZdZdZeddZdS) ForkProcessr\cCsddlm}||S)Nr)Popen)Z popen_forkrd)rSrdrrr rRszForkProcess._PopenN)rrrrTrOrRrrrr rcs rcc@s(eZdZdZeddZdS) SpawnProcessr:cCsddlm}||S)Nr)rd)Zpopen_spawn_posixrd)rSrdrrr rRszSpawnProcess._PopenN)rrrrTrOrRrrrr re s rec@s(eZdZdZeddZdS)ForkServerProcessrDcCsddlm}||S)Nr)rd)Zpopen_forkserverrd)rSrdrrr rRszForkServerProcess._PopenN)rrrrTrOrRrrrr rfs rfc@seZdZdZeZdS) ForkContextr\N)rrrrJrcrPrrrr rgs rgc@seZdZdZeZdS) SpawnContextr:N)rrrrJrerPrrrr rhs rhc@s(eZdZdZeZddZdS)ForkServerContextrDcCs)ddlm}|js%tddS)Nr)r[z%forkserver start method not available)r?r[r]rG)rr[rrr rH&s z"ForkServerContext._check_availableN)rrrrJrfrPrHrrrr ri#s rir\r:rDc@s(eZdZdZeddZdS)rer:cCsddlm}||S)Nr)rd)Zpopen_spawn_win32rd)rSrdrrr rR6szSpawnProcess._PopenN)rrrrTrOrRrrrr re4s c@seZdZdZeZdS)rhr:N)rrrrJrerPrrrr rh;s cCst|t_dS)N)rErQrV)rIrrr _force_start_methodHsrjcCsttddS)Nspawning_popen)r9_tlsrrrr get_spawning_popenQsrmcCs |t_dS)N)rlrk)popenrrr set_spawning_popenTsrocCs,tdkr(tdt|jdS)NzF%s objects should only be shared between processes through inheritance)rmrZtyper)objrrr assert_spawningWsrr)!rr7Z threadingr?r__all__ Exceptionrr r r objectr Z BaseProcessrPrUlistdirr8rcrerfrgrhrirErQrjZlocalrlrmrorrrrrr s@   ("      __pycache__/popen_spawn_posix.cpython-35.opt-1.pyc000064400000004413147554447510016135 0ustar00 Yf{@sddlZddlZddlmZddlmZddlmZddlmZddlmZdgZGd d d e Z Gd ddej Z dS) N)context) popen_fork) reduction)spawn)utilPopenc@s(eZdZddZddZdS)_DupFdcCs ||_dS)N)fd)selfr r F/opt/alt/python35/lib64/python3.5/multiprocessing/popen_spawn_posix.py__init__sz_DupFd.__init__cCs|jS)N)r )r r r r detachsz _DupFd.detachN)__name__ __module__ __qualname__rrr r r r r s  r csFeZdZdZeZfddZddZddZS)rrcsg|_tj|dS)N)_fdssuperr)r process_obj) __class__r r rs zPopen.__init__cCs|jj||S)N)rappend)r r r r r duplicate_for_child#szPopen.duplicate_for_childc Csddlm}|j}|jj|tj|j}tj }t j |z$t j ||t j ||Wdt j dXd}}}} ztj\}}tj\}} tjd|d|} |jj||gtjtj| |j|_||_t| ddd} | j|jWdQRXWd|dk rxtj|tj|fx0||| fD]} | dk rtj| qWXdS)Nr)semaphore_tracker tracker_fdZ pipe_handlewbclosefdF)rZgetfdrrrZget_preparation_data_nameioBytesIOrZset_spawning_popenrdumpospipeZget_command_lineextendrZspawnv_passfdsZget_executablepidsentinelopenwrite getbufferZFinalizeclose) r rrrZ prep_datafpZparent_rZchild_wZchild_rZparent_wcmdfr r r r _launch's6       z Popen._launch) rrrmethodr ZDupFdrrr.r r )rr rs  ) rr"rrrrrr__all__objectr rr r r r s    __pycache__/spawn.cpython-35.opt-1.pyc000064400000015533147554447510013517 0ustar00 Yf"@sddlZddlZddlZddlZddlZddlmZmZddlmZddlm Z dddd d d d gZ ej d krdZ dZ n9ej d koeeddZ ejjjdZ e rejjejdan ejaddZdd ZddZddZdd ZddddZddZddZdd ZgZddZ d d!Z!d"d#Z"d$d Z#dS)%N)get_start_methodset_start_method)process)util_mainfreeze_supportset_executableget_executableget_preparation_dataget_command_lineimport_main_pathwin32Ffrozenzpythonservice.exez python.execCs |adS)N) _python_exe)Zexer:/opt/alt/python35/lib64/python3.5/multiprocessing/spawn.pyr )scCstS)N)rrrrrr -scCs.t|dkr&|ddkr&dSdSdS)z= Return whether commandline indicates we are forking rz--multiprocessing-forkTFN)len)argvrrr is_forking4s"rcCsttjri}xYtjddD]D}|jd\}}|dkr]d||s   cKsttddr6tjdgdd|jDSd}|djdd |jD;}tj}tg|d |dgSd S) zJ Returns prefix of command line used for spawning a child process rFz--multiprocessing-forkcSsg|]}d|qS)z%s=%rr).0itemrrr Ts z$get_command_line..zWsz#get_command_line..z-cN)getattrr executableitemsjoinrZ_args_from_interpreter_flagsr)rprogZoptsrrrr Ns & c CstjdkrRddl}ddlm}|||}|j|tj}n"ddlm }||j _ |}t |}tj |dS)z7 Run code specified by data received over pipe rrNr) steal_handle)semaphore_tracker)rplatformmsvcrtZ reductionr+Zopen_osfhandleosO_RDONLYr,Z_semaphore_trackerZ_fdrr) Z pipe_handleZ parent_pidZ tracker_fdr.r+Z new_handlefdr,Zexitcoderrrr\s   rcCswtj|dddR}dtj_z,tj|}t|tj|}Wdtj`XWdQRX|jS)NrbclosefdT) r/fdopenrcurrent_process _inheritingpickleloadprepare _bootstrap)r2Z from_parentZpreparation_dataselfrrrrns cCs(ttjddr$tddS)Nr7Fa An attempt has been made to start a new process before the current process has finished its bootstrapping phase. This probably means that you are not using fork to start your child processes and you have forgotten to use the proper idiom in the main module: if __name__ == '__main__': freeze_support() ... The "freeze_support()" line can be omitted if the program is not going to be frozen to produce an executable.)r&rr6 RuntimeErrorrrrr_check_not_importing_mainzs r>cCsttdtjdtjj}tjdk rJtjj|ddictrZ_log_to_stderrrr6r@Z_loggerZgetEffectiveLevelrpathcopyindex ValueError ORIGINAL_DIRupdaterr/getcwdrmodulesr&__spec__r-WINEXE WINSERVICEisabsr)normpath)r drBi main_moduleZ main_mod_name main_pathrrrr s>            cCsDd|kr|dtj_d|kr>|dtj_d|kr^|dr^tjd|krtjj|dd|kr|dt_ d|kr|dt_ d|krt j |dd|kr|dt_ d |kr t|d d d d |kr&t|d nd |kr@t|d dS)zE Try to get current process ready to unpickle process object r r@r?rArBrCrErDrFZforceTrHrJN)rr6r r@rr?Z get_loggerZsetLevelrrLrr/chdirrPr_fixup_main_from_name_fixup_main_from_path)datarrrr:s,              r:cCstjd}|dks(|jdr,dSt|jdd|krKdStj|tjd}t j |dddd}|j j ||tjdr rdr:r^r_r rrrr s>       !       2 &  __pycache__/resource_sharer.cpython-35.opt-2.pyc000064400000012031147554447510015551 0ustar00 ]@sddlZddlZddlZddlZddlZddlmZddlmZddlmZdgZ ej dkre dg7Z Gd dde Z n#e d g7Z Gd d d e Z Gd d d e ZeZejZdS)N)process) reduction)utilstopwin32 DupSocketc@s(eZdZddZddZdS)rcs:|jfdd}tj|j|_dS)Ncs j|}|j|dS)N)share send_bytes)connpidr )new_sock4/opt/alt/python35/lib64/python3.5/resource_sharer.pysendsz DupSocket.__init__..send)dup_resource_sharerregisterclose_id)selfsockrr)r r__init__s zDupSocket.__init__c Cs9tj|j }|j}tj|SWdQRXdS)N)rget_connectionr recv_bytessocketZ fromshare)rr r rrrdetach$s zDupSocket.detachN)__name__ __module__ __qualname__rrrrrrrs  DupFdc@s(eZdZddZddZdS)r csLtj|fdd}fdd}tj|||_dS)Ncstj||dS)N)r send_handle)r r )new_fdrrr1szDupFd.__init__..sendcstjdS)N)osrr)r"rrr3szDupFd.__init__..close)r#rrrr)rfdrrr)r"rr/szDupFd.__init__c Cs-tj|j}tj|SWdQRXdS)N)rrrr recv_handle)rr rrrr7sz DupFd.detachN)rrrrrrrrrr -s  c@smeZdZddZddZeddZddd Zd d Zd d Z ddZ dS)_ResourceSharercCs\d|_i|_g|_tj|_d|_d|_d|_t j |t j dS)Nr) _key_cache _old_locks threadingLock_lock _listener_address_threadrregister_after_forkr& _afterfork)rrrrr?s      z_ResourceSharer.__init__c Csc|jS|jdkr#|j|jd7_||f|j|j<|j|jfSWdQRXdS)Nr)r,r._startr'r()rrrrrrrIs   z_ResourceSharer.registercCsTddlm}|\}}||dtjj}|j|tjf|S)Nr)Clientauthkey) connectionr3rcurrent_processr4rr#getpid)identr3addresskeycrrrrRs  z_ResourceSharer.get_connectionNc Csddlm}|j|jdk r||jdtjj}|jd|j|j j ||j j rt j d|jjd|_ d|_d|_x*|jjD]\}\}}|qW|jjWdQRXdS)Nr)r3r4z._ResourceSharer thread did not stop when asked)r5r3r,r.rr6r4rrr/joinis_aliver sub_warningr-r(itemsclear)rtimeoutr3r;r:rrrrrr[s"         " z_ResourceSharer.stopcCsx*|jjD]\}\}}|qW|jj|jj|jtj|_|jdk rx|jj d|_d|_ d|_ dS)N) r(r?r@r)appendr,r*r+r-rr.r/)rr:rrrrrr1ps"     z_ResourceSharer._afterforkcCs|ddlm}tjd|dtjj|_|jj|_ t j d|j }d|_ |j||_dS)Nr)Listenerz0starting listener and thread for sending handlesr4targetT)r5rCrdebugrr6r4r-r9r.r*Thread_servedaemonstartr/)rrCtrrrr2~s   z_ResourceSharer._startcCsttdr.tjtjtdtjxyv|jj`}|j}|dkr_P|\}}|j j |\}}z|||Wd|XWdQRXWq1t j st jt jYq1Xq1WdS)Npthread_sigmaskr)hasattrsignalrK SIG_BLOCKrangeNSIGr-acceptrecvr(popr is_exitingsys excepthookexc_info)rr msgr:destination_pidrrrrrrGs     z_ResourceSharer._serve) rrrrr staticmethodrrr1r2rGrrrrr&=s     r&)r#rMrrUr*rrr__all__platformobjectrr r&rrrrrr s        ` __pycache__/heap.cpython-35.opt-1.pyc000064400000014626147554447510013306 0ustar00 Yf @s#ddlZddlZddlZddlZddlZddlZddlmZddlmZddlm Z dgZ ej dkrddl Z Gdd d e Zn>Gd d d e Zd d Zd dZejeeGddde ZGddde ZdS)N)context) reduction)util BufferWrapperwin32c@s@eZdZejZddZddZddZdS)ArenacCs||_xttdD]Z}dtjt|jf}tjd|d|}tjdkrfP|j qWt d||_ ||_ |j|j f|_ dS)Ndz pym-%d-%srtagnamerzCannot find name for new mmap)sizerangeosgetpidnext_randmmap_winapiZ GetLastErrorcloseFileExistsErrornamebuffer_state)selfr irZbufr9/opt/alt/python35/lib64/python3.5/multiprocessing/heap.py__init__#s    zArena.__init__cCstj||jS)N)rZassert_spawningr)rrrr __getstate__2s zArena.__getstate__cCs>|\|_|_|_tjd|jd|j|_dS)Nrr r )r rrrr)rstaterrr __setstate__6szArena.__setstate__N) __name__ __module__ __qualname__tempfileZ_RandomNameSequencerrrr rrrrrs    rc@seZdZdddZdS)rrc Cs||_||_|d krtjddtjdtj\|_}tj|tj |tj |jft |jdddc}d }||krd |}x%t ||D]}|j |qW~|j d ||WdQRXtj|j|j|_dS) Nrprefixzpym-%d-dirwbclosefdFisr i)r fdr$ZmkstemprrrZ get_temp_dirunlinkFinalizeropenr writerr)rr r)rfZbsZzeros_rrrrAs"    (   zArena.__init__Nr )r!r"r#rrrrrr?s cCs:|jdkrtdt|jtj|jffS)NrzDArena is unpicklable because forking was enabled when it was createdr )r) ValueError rebuild_arenar rZDupFd)arrr reduce_arenaTs r3cCst||jS)N)rdetach)r Zdupfdrrrr1Zsr1c@seZdZdZejddZeddZddZ dd Z d d Z d d Z ddZ ddZdS)HeapcCsmtj|_tj|_||_g|_i|_i|_ i|_ t |_ g|_ g|_dS)N)rr_lastpid threadingZLock_lock_size_lengths _len_to_seq_start_to_block_stop_to_blockset_allocated_blocks_arenas_pending_free_blocks)rr rrrrgs       z Heap.__init__cCs|d}|||@S)Nrr)nZ alignmentmaskrrr_roundupts z Heap._roundupc Cstj|j|}|t|jkr|jt|j|tj}|jd9_t j d|t |}|j j ||d|fS|j|}|j|}|j}|s|j|=|j|=|\}}}|j||f=|j||f=|S)Nz"allocating a new mmap of length %dr)bisectZ bisect_leftr;lenrEmaxr:rPAGESIZErinforrAappendr<popr=r>) rr rlengtharenaseqblockstartstoprrr_malloczs"!     z Heap._mallocc Cs$|\}}}y|j||f}Wntk r:YnX|j|\}}y|j||f}Wntk r{YnX|j|\}}|||f}||}y|j|j|Wn5tk r|g|j|KeyError_absorbr=r<rLrGZinsortr;) rrQrOrRrSZ prev_blockr/Z next_blockrNrrr_frees(    z Heap._freecCs}|\}}}|j||f=|j||f=||}|j|}|j||ss|j|=|jj|||fS)N)r=r>r<remover;)rrQrOrRrSrNrPrrrrVs    z Heap._absorbc CsQxJy|jj}Wntk r+PYnX|jj||j|qWdS)N)rBrM IndexErrorr@rXrW)rrQrrr_free_pending_blockss zHeap._free_pending_blocksc Cse|jjds%|jj|n<z+|j|jj||j|Wd|jjXdS)NF) r9acquirerBrLrZr@rXrWrelease)rrQrrrfrees  z Heap.freec Cstj|jkr|j|j|j|jt|d|j}|j |\}}}||}||kr|j |||f|||f}|j j ||SWdQRXdS)Nr) rrr7rr9rZrErI _alignmentrTrWr@add)rr rOrRrSZnew_stoprQrrrmallocs     z Heap.mallocN)r!r"r#r^rrJr staticmethodrErTrWrVrZr]r`rrrrr5cs      r5c@s1eZdZeZddZddZdS)rcCsDtjj|}||f|_tj|tjjd|fdS)Nargs)r_heapr`rrr+r])rr rQrrrrszBufferWrapper.__init__cCs3|j\\}}}}t|j|||S)N)r memoryviewr)rrOrRrSr rrrcreate_memoryviewszBufferWrapper.create_memoryviewN)r!r"r#r5rcrrerrrrrs   )rGrrsysr$r8rrr__all__platformrobjectrr3r1registerr5rrrrr s$           __pycache__/popen_spawn_win32.cpython-35.opt-1.pyc000064400000005661147554447510015743 0ustar00 Yf @sddlZddlZddlZddlZddlZddlmZddlmZddlmZddlm Z dgZ dZ ej d koe ed d Zejjjd ZGd ddeZdS)N)context)spawn) reduction)utilPopeniwin32frozenFzpythonservice.exec@s[eZdZdZdZddZddZddd Zd d Zd d Z dS)rz@ Start a subprocess to run the code of a process object rc Cstj|j}tjdd\}}tj|d}tjdtj d|}dj dd|D}t |ddd }yJtj tj |ddd dddd \}} } } tj| Wntj|YnX| |_d|_||_t||_tj|tj|jftj|z$tj||tj||WdtjdXWdQRXdS) NrZ parent_pidZ pipe_handle css|]}d|VqdS)z"%s"N).0xr r F/opt/alt/python35/lib64/python3.5/multiprocessing/popen_spawn_win32.py *sz!Popen.__init__..wbclosefdTF)rZget_preparation_data_name_winapiZ CreatePipemsvcrtZopen_osfhandleZget_command_lineosgetpidjoinopenZ CreateProcessZget_executableZ CloseHandlepid returncode_handleintsentinelrZFinalizerZset_spawning_popenrdump) selfZ process_objZ prep_dataZrhandleZwhandleZwfdcmdZto_childZhpZhtrtidr r r__init__!s2  '     zPopen.__init__cCstj||jS)N)rZ duplicater)rZhandler r rduplicate_for_childFszPopen.duplicate_for_childNcCs|jdkr|dkr'tj}ntdt|dd}tjt|j|}|tjkrtj|j}|t krt j }||_|jS)Nrig?) rrZINFINITEmaxrZWaitForSingleObjectrZ WAIT_OBJECT_0ZGetExitCodeProcess TERMINATEsignalSIGTERM)rtimeoutZmsecsrescoder r rwaitJs     z Popen.waitcCs|jddS)Nr(r)r+)rr r rpollZsz Popen.pollc Cs`|jdkr\ytjt|jtWn-tk r[|jdddkrWYnXdS)Nr(g?)rrZTerminateProcessrrr%OSErrorr+)rr r r terminate]s  zPopen.terminate) __name__ __module__ __qualname____doc__methodr"r#r+r,r.r r r rrs  %  )rrr&sysrrrrr__all__r%platformgetattrZWINEXE executablelowerendswithZ WINSERVICEobjectrr r r rs      !__pycache__/pool.cpython-35.pyc000064400000054304147554447510012400 0ustar00 Yfd@sddgZddlZddlZddlZddlZddlZddlZddlZddlm Z ddlm Z m Z dZ dZ dZejZdd Zd d ZGd d d eZGdddZddZGdddeZdfddddZddZGdddeZGdddeZeZGdddeZGdddeZGd d!d!eZ Gd"ddeZ!dS)#Pool ThreadPoolN)util) get_context TimeoutErrorcCstt|S)N)listmap)argsr 9/opt/alt/python35/lib64/python3.5/multiprocessing/pool.pymapstar+srcCsttj|d|dS)Nrr)r itertoolsstarmap)r r r r starmapstar.src@s(eZdZddZddZdS)RemoteTracebackcCs ||_dS)N)tb)selfrr r r __init__6szRemoteTraceback.__init__cCs|jS)N)r)rr r r __str__8szRemoteTraceback.__str__N)__name__ __module__ __qualname__rrr r r r r5s  rc@s(eZdZddZddZdS)ExceptionWithTracebackcCsDtjt|||}dj|}||_d||_dS)Nz """ %s""") tracebackformat_exceptiontypejoinexcr)rr rr r r r<s zExceptionWithTraceback.__init__cCst|j|jffS)N) rebuild_excr r)rr r r __reduce__Asz!ExceptionWithTraceback.__reduce__N)rrrrr"r r r r r;s  rcCst||_|S)N)r __cause__)r rr r r r!Dsr!cs@eZdZdZfddZddZddZS)MaybeEncodingErrorzVWraps possible unpickleable errors, so they can be safely sent through the socket.csAt||_t||_tt|j|j|jdS)N)reprr valuesuperr$r)rr r&) __class__r r rPszMaybeEncodingError.__init__cCsd|j|jfS)Nz(Error sending result: '%s'. Reason: '%s')r&r )rr r r rUs zMaybeEncodingError.__str__cCsd|jj|fS)Nz<%s: %s>)r(r)rr r r __repr__YszMaybeEncodingError.__repr__)rrr__doc__rrr)r r )r(r r$Ls  r$Fc'Cs7|dks0t|tkr*|dks0t|j}|j}t|drk|jj|jj|dk r||d}x|dks|r!||kr!y |} Wn&t t fk rt j dPYnX| dkrt j dP| \} } } } }yd| | |f}WnUt k r}}z5|r_| tk r_t||j}d|f}WYdd}~XnXy|| | |fWnbt k r}zBt||d}t j d||| | d|ffWYdd}~XnXd} } }} } }|d7}qWt j d |dS) Nr_writerz)worker got EOFError or OSError -- exitingzworker got sentinel -- exitingTFrz0Possible encoding error while sending result: %szworker exiting after %d tasks)rintAssertionErrorputgethasattrr+close_readerEOFErrorOSErrorrdebug Exception_helper_reraises_exceptionr __traceback__r$)inqueueoutqueue initializerinitargsZmaxtasksZwrap_exceptionr.r/Z completedtaskjobifuncr kwdsresultewrappedr r r worker]sF0      !     ,rEcCs |dS)z@Pickle-able helper function for use by _guarded_task_generation.Nr )Zexr r r r7sr7c@seZdZdZdZddZddfddddZdd Zd d Zd d Z ddZ fiddZ dddZ dddZ dddddZddZdddZdddZfidddd Zdddd!d"Zdddd#d$Zed%d&Zed'd(Zed)d*Zed+d,Zd-d.Zd/d0Zd1d2Zd3d4Zed5d6Zed7d8Z d9d:Z!d;d<Z"dS)=rzS Class which supports an async version of applying functions to arguments. TcOs|jj||S)N)_ctxProcess)rr rAr r r rGsz Pool.ProcessNc Cs#|p t|_|jtj|_i|_t|_||_ ||_ ||_ |dkrvt j psd}|dkrtd|dk rt| rtd||_g|_|jtjdtjd|f|_d|j_t|j_|jjtjdtjd|j|j|j|j|jf|_d|j_t|j_|jjtjdtjd|j|j |jf|_!d|j!_t|j!_|j!jt"j#||j$d|j|j%|j|j|j|j|j!|jfdd|_&dS) Nrz&Number of processes must be at least 1zinitializer must be a callabletargetr TZ exitpriority)'rrF _setup_queuesqueueQueue _taskqueue_cacheRUN_state_maxtasksperchild _initializer _initargsos cpu_count ValueErrorcallable TypeError _processes_pool_repopulate_pool threadingZThreadr_handle_workers_worker_handlerdaemonstart _handle_tasks _quick_put _outqueue _task_handler_handle_results _quick_get_result_handlerrZFinalize_terminate_pool_inqueue _terminate)r processesr;r<Zmaxtasksperchildcontextr r r rsT                              z Pool.__init__cCswd}xjttt|jD]M}|j|}|jdk r"tjd||jd}|j|=q"W|S)zCleanup after any worker processes which have exited due to reaching their specified lifetime. Returns True if any workers were cleaned up. FNzcleaning up worker %dT)reversedrangelenrZexitcoderr5r)rZcleanedr?rEr r r _join_exited_workerss"  zPool._join_exited_workersc Csxt|jt|jD]}|jdtd|j|j|j|j |j |j f}|jj ||j jdd|_ d|_|jtjdqWdS)zBring the number of pool processes up to the specified number, for use after reaping workers which have exited. rHr rGZ PoolWorkerTz added workerN)rnrYrorZrGrErircrRrSrQ_wrap_exceptionappendnamereplacer_r`rr5)rr?wr r r r[s#    zPool._repopulate_poolcCs|jr|jdS)zEClean up any exited workers and start replacements for them. N)rqr[)rr r r _maintain_pools zPool._maintain_poolcCsL|jj|_|jj|_|jjj|_|jjj|_ dS)N) rFZ SimpleQueuerircr+sendrbr2recvrf)rr r r rJszPool._setup_queuescCs.|jtkst|j|||jS)z6 Equivalent of `func(*args, **kwds)`. )rPrOr- apply_asyncr/)rr@r rAr r r applysz Pool.applycCs|j||t|jS)zx Apply `func` to each element in `iterable`, collecting the results in a list that is returned. ) _map_asyncrr/)rr@iterable chunksizer r r r szPool.mapcCs|j||t|jS)z Like `map()` method but the elements of the `iterable` are expected to be iterables as well and will be unpacked as arguments. Hence `func` and (a, b) becomes func(a, b). )r|rr/)rr@r}r~r r r r sz Pool.starmapcCs|j||t|||S)z= Asynchronous version of `starmap()` method. )r|r)rr@r}r~callbackerror_callbackr r r starmap_asyncszPool.starmap_asyncccsy>d}x1t|D]#\}}||||fifVqWWn@tk r}z ||dt|fifVWYdd}~XnXdS)zProvides a generator of tasks for imap and imap_unordered with appropriate handling for iterables which throw exceptions during iteration.rN) enumerater6r7)rZ result_jobr@r}r?xrCr r r _guarded_task_generations zPool._guarded_task_generationrcCs|jtkrtd|dkret|j}|jj|j|j|||j f|S|dkswt t j |||}t|j}|jj|j|jt ||j fdd|DSdS)zP Equivalent of `map()` -- can be MUCH slower than `Pool.map()`. zPool not runningrcss"|]}|D] }|Vq qdS)Nr ).0chunkitemr r r @szPool.imap..N)rPrOrV IMapIteratorrNrMr.r_job _set_lengthr-r _get_tasksr)rr@r}r~rB task_batchesr r r imap's"       z Pool.imapcCs|jtkrtd|dkret|j}|jj|j|j|||j f|S|dkswt t j |||}t|j}|jj|j|jt ||j fdd|DSdS)zL Like `imap()` method but ordering of results is arbitrary. zPool not runningrcss"|]}|D] }|Vq qdS)Nr )rrrr r r r[sz&Pool.imap_unordered..N)rPrOrVIMapUnorderedIteratorrNrMr.rrrr-rrr)rr@r}r~rBrr r r imap_unorderedBs"       zPool.imap_unorderedcCs_|jtkrtdt|j||}|jj|jd|||fgdf|S)z; Asynchronous version of `apply()` method. zPool not runningrN)rPrOrV ApplyResultrNrMr.r)rr@r rArrrBr r r rz]s  +zPool.apply_asynccCs|j||t|||S)z9 Asynchronous version of `map()` method. )r|r)rr@r}r~rrr r r map_asynchszPool.map_asyncc Cs|jtkrtdt|ds6t|}|dkrztt|t|jd\}}|rz|d7}t|dkrd}tj |||}t |j |t||d|} |j j |j| j||df| S)zY Helper function to implement map, starmap and their async counterparts. zPool not running__len__Nrrr)rPrOrVr0r divmodrorZrr MapResultrNrMr.rr) rr@r}Zmapperr~rrZextrarrBr r r r|ps&   (     zPool._map_asynccCsrtj}xB|jtks6|jrP|jtkrP|jtjdqW|j j dt j ddS)Ng?zworker handler exiting) r\current_threadrPrOrN TERMINATErwtimesleeprMr.rr5)poolthreadr r r r]s  * zPool._handle_workersc Cstj}x+t|jdD] \}}d}zx|D]}|jrXtjdPy||Wq;tk r} zN|dd\} } y|| j| d| fWnt k rYnXWYdd} ~ Xq;Xq;W|rtjd|r|dnd } || dwPWdd}}} XqWtjdyFtjd|j dtjdx|D]} |dqkWWnt k rtjd YnXtjd dS) Nz'task handler found thread._state != RUNrFzdoing set_length()rztask handler got sentinelz/task handler sending sentinel to result handlerz(task handler sending sentinel to workersz/task handler got OSError when sending sentinelsztask handler exitingr) r\riterr/rPrr5r6_setKeyErrorr.r4) taskqueuer.r:rcacherZtaskseqZ set_lengthr=rCr>idxpr r r rasB            zPool._handle_taskscCs tj}xy |}Wn)ttfk rGtjddSYnX|jrt|jtksfttjdP|dkrtjdP|\}}}y||j ||Wnt k rYnXd}}}qWx|r|jtkry |}Wn)ttfk r,tjddSYnX|dkrItjdq|\}}}y||j ||Wnt k rYnXd}}}qWt |drtjdy2x+t dD]}|j jsP|qWWnttfk rYnXtjdt||jdS) Nz.result handler got EOFError/OSError -- exitingz,result handler found thread._state=TERMINATEzresult handler got sentinelz&result handler ignoring extra sentinelr2z"ensuring that outqueue is not full z7result handler exiting: len(cache)=%s, thread._state=%s)r\rr4r3rr5rPrr-rrr0rnr2pollro)r:r/rrr=r>r?objr r r res\                 zPool._handle_resultsccsDt|}x1ttj||}|s1dS||fVqWdS)N)rtuplerislice)r@itsizerr r r rs  zPool._get_taskscCstddS)Nz:pool objects cannot be passed between processes or pickled)NotImplementedError)rr r r r"szPool.__reduce__cCs5tjd|jtkr1t|_t|j_dS)Nz closing pool)rr5rPrOCLOSEr^)rr r r r1s  z Pool.closecCs0tjdt|_t|j_|jdS)Nzterminating pool)rr5rrPr^rj)rr r r terminates   zPool.terminatecCsqtjd|jttfks(t|jj|jj|j jx|j D]}|jqYWdS)Nz joining pool) rr5rPrrr-r^rrdrgrZ)rrr r r rs    z Pool.joincCsZtjd|jjx9|jrU|jjrU|jjtj dqWdS)Nz7removing tasks from inqueue until task handler finishedr) rr5Z_rlockacquireis_aliver2rryrr)r9 task_handlerrr r r _help_stuff_finish(s    zPool._help_stuff_finishc Cstjdt|_t|_tjd|j||t||jsit|dksitt|_|jdtjdt j |k r|j |rt |ddrtjdx'|D]} | j dkr| jqWtjdt j |k r!|j tjdt j |k rJ|j |rt |ddrtjd x8|D]0} | jrwtjd | j| j qwWdS) Nzfinalizing poolz&helping task handler/workers to finishrzjoining worker handlerrzterminating workerszjoining task handlerzjoining result handlerzjoining pool workerszcleaning up worker %d)rr5rrPrrorr-r.r\rrr0rprpid) clsrr9r:rZworker_handlerrZresult_handlerrrr r r rh1s8    $             zPool._terminate_poolcCs|S)Nr )rr r r __enter___szPool.__enter__cCs|jdS)N)r)rexc_typeZexc_valZexc_tbr r r __exit__bsz Pool.__exit__)#rrrr*rrrGrrqr[rwrJr{r rrrrrrzrr| staticmethodr]rarerr"r1rrr classmethodrhrrr r r r rsF   8        .<     . c@s^eZdZddZddZddZddd Zdd d Zd d ZdS)rcCsJtj|_tt|_||_||_||_|||j s<             * &%@__pycache__/context.cpython-35.opt-2.pyc000064400000027506147554447510014057 0ustar00 ])@sWddlZddlZddlZddlmZgZGdddeZGdddeZGdd d eZ Gd d d eZ Gd d d e Z Gdddej ZGddde ZeddeeDe_ejdkrGdddej ZGdddej ZGdddej ZGddde ZGddde ZGdd d e Zd!ed"ed#eiZeed!ZnNGd$ddej ZGd%dde Zd"eiZeed"Zd&d'ZejZd(d)Zd*d+Zd,d-Z dS).N)processc@seZdZdS) ProcessErrorN)__name__ __module__ __qualname__rr,/opt/alt/python35/lib64/python3.5/context.pyr s rc@seZdZdS)BufferTooShortN)rrrrrrr r s r c@seZdZdS) TimeoutErrorN)rrrrrrr r s r c@seZdZdS)AuthenticationErrorN)rrrrrrr r s r c@seZdZeZeZeZeZeej Z eej Z ddZ ddZ dddZ dd Zd d Zd d dZdddZdddZddZd d ddZdddZdddZddZd d fd dd Zd!d"Zd#d$Zd%dd&d'Zd%dd(d)Zd*d+Zd,d-Zd d.d/Zd0d1Z d2d3Z!d4d5Z"d d6d7Z#d8d9d:Z$d8d;d<Z%d=d>Z&d S)? BaseContextcCs/tj}|dkr'tdn|SdS)Nzcannot determine number of cpus)os cpu_countNotImplementedError)selfnumrrr r's  zBaseContext.cpu_countcCs3ddlm}|d|j}|j|S)Nr) SyncManagerctx)managersr get_contextstart)rrmrrr Manager/s zBaseContext.ManagerTcCsddlm}||S)Nr)Pipe) connectionr)rduplexrrrr r:szBaseContext.PipecCs#ddlm}|d|jS)Nr)Lockr) synchronizerr)rrrrr r?szBaseContext.LockcCs#ddlm}|d|jS)Nr)RLockr)rrr)rrrrr rDszBaseContext.RLockNcCs&ddlm}||d|jS)Nr) Conditionr)rr r)rlockr rrr r IszBaseContext.ConditionrcCs&ddlm}||d|jS)Nr) Semaphorer)rr"r)rvaluer"rrr r"NszBaseContext.SemaphorecCs&ddlm}||d|jS)Nr)BoundedSemaphorer)rr$r)rr#r$rrr r$SszBaseContext.BoundedSemaphorecCs#ddlm}|d|jS)Nr)Eventr)rr%r)rr%rrr r%XszBaseContext.EventcCs,ddlm}||||d|jS)Nr)Barrierr)rr&r)rpartiesactiontimeoutr&rrr r&]szBaseContext.BarrierrcCs&ddlm}||d|jS)Nr)Queuer)queuesr*r)rmaxsizer*rrr r*bszBaseContext.QueuecCs&ddlm}||d|jS)Nr) JoinableQueuer)r+r-r)rr,r-rrr r-gszBaseContext.JoinableQueuecCs#ddlm}|d|jS)Nr) SimpleQueuer)r+r.r)rr.rrr r.lszBaseContext.SimpleQueuecCs/ddlm}|||||d|jS)Nr)Poolcontext)poolr/r)r processes initializerinitargsmaxtasksperchildr/rrr r/qszBaseContext.PoolcGsddlm}|||S)Nr)RawValue) sharedctypesr6)rtypecode_or_typeargsr6rrr r6xszBaseContext.RawValuecCsddlm}|||S)Nr)RawArray)r7r:)rr8size_or_initializerr:rrr r:}szBaseContext.RawArrayr!cGs/ddlm}|||d|d|jS)Nr)Valuer!r)r7r<r)rr8r!r9r<rrr r<szBaseContext.ValuecCs/ddlm}|||d|d|jS)Nr)Arrayr!r)r7r=r)rr8r;r!r=rrr r=szBaseContext.ArraycCs<tjdkr8ttddr8ddlm}|dS)Nwin32frozenFr)freeze_support)sysplatformgetattrspawnr@)rr@rrr r@s!zBaseContext.freeze_supportcCsddlm}|S)Nr) get_logger)utilrE)rrErrr rEszBaseContext.get_loggercCsddlm}||S)Nr) log_to_stderr)rFrG)rlevelrGrrr rGszBaseContext.log_to_stderrcCsddlm}dS)Nr)r)r)rrrrr allow_connection_picklingsz%BaseContext.allow_connection_picklingcCsddlm}||dS)Nr)set_executable)rDrK)r executablerKrrr rKszBaseContext.set_executablecCsddlm}||dS)Nr)set_forkserver_preload) forkserverrM)r module_namesrMrrr rMsz"BaseContext.set_forkserver_preloadc CsQ|dkr|Syt|}Wn"tk rBtd|YnX|j|S)Nzcannot find context for %r)_concrete_contextsKeyError ValueError_check_available)rmethodrrrr rs   zBaseContext.get_contextFcCs|jS)N)_name)r allow_nonerrr get_start_methodszBaseContext.get_start_methodcCstddS)Nz+cannot set start method of concrete context)rR)rrTforcerrr set_start_methodszBaseContext.set_start_methodcCsdS)Nr)rrrr rSszBaseContext._check_available)'rrrrr r r staticmethodrcurrent_processactive_childrenrrrrrr r"r$r%r&r*r-r.r/r6r:r<r=r@rErGrJrKrMrrWrYrSrrrr r sF                r c@s(eZdZdZeddZdS)ProcessNcCstjjj|S)N)_default_contextrr]_Popen) process_objrrr r_szProcess._Popen)rrr _start_methodrZr_rrrr r]s r]csaeZdZeZddZdfddZdddZdd d Zd d ZS) DefaultContextcCs||_d|_dS)N)r^_actual_context)rr0rrr __init__s zDefaultContext.__init__NcsB|dkr.|jdkr'|j|_|jStj|SdS)N)rcr^superr)rrT) __class__rr rs   zDefaultContext.get_contextFcCsW|jdk r"| r"td|dkrA|rAd|_dS|j||_dS)Nzcontext has already been set)rc RuntimeErrorr)rrTrXrrr rYs   zDefaultContext.set_start_methodcCs/|jdkr%|rdS|j|_|jjS)N)rcr^rU)rrVrrr rWs  zDefaultContext.get_start_methodcCsJtjdkrdgSddlm}|jr<dddgSddgSdS)Nr>rDr) reductionforkrN)rArBrIrhHAVE_SEND_HANDLE)rrhrrr get_all_start_methodss   z$DefaultContext.get_all_start_methods) rrrr]rdrrYrWrkrr)rfr rbs  rbccs%|]}|ddkr|VqdS)r_Nr).0xrrr sror>c@s(eZdZdZeddZdS) ForkProcessricCsddlm}||S)Nr)Popen) popen_forkrq)r`rqrrr r_szForkProcess._PopenN)rrrrarZr_rrrr rps rpc@s(eZdZdZeddZdS) SpawnProcessrDcCsddlm}||S)Nr)rq)popen_spawn_posixrq)r`rqrrr r_szSpawnProcess._PopenN)rrrrarZr_rrrr rs s rsc@s(eZdZdZeddZdS)ForkServerProcessrNcCsddlm}||S)Nr)rq)popen_forkserverrq)r`rqrrr r_szForkServerProcess._PopenN)rrrrarZr_rrrr rus ruc@seZdZdZeZdS) ForkContextriN)rrrrUrpr]rrrr rws rwc@seZdZdZeZdS) SpawnContextrDN)rrrrUrsr]rrrr rxs rxc@s(eZdZdZeZddZdS)ForkServerContextrNcCs)ddlm}|js%tddS)Nr)rhz%forkserver start method not available)rIrhrjrR)rrhrrr rS&s z"ForkServerContext._check_availableN)rrrrUrur]rSrrrr ry#s ryrirDrNc@s(eZdZdZeddZdS)rsrDcCsddlm}||S)Nr)rq)Zpopen_spawn_win32rq)r`rqrrr r_6szSpawnProcess._PopenN)rrrrarZr_rrrr rs4s c@seZdZdZeZdS)rxrDN)rrrrUrsr]rrrr rx;s cCst|t_dS)N)rPr^rc)rTrrr _force_start_methodHsrzcCsttddS)Nspawning_popen)rC_tlsrrrr get_spawning_popenQsr}cCs |t_dS)N)r|r{)popenrrr set_spawning_popenTsrcCs,tdkr(tdt|jdS)NzF%s objects should only be shared between processes through inheritance)r}rgtyper)objrrr assert_spawningWsr)!rrA threadingrIr__all__ Exceptionrr r r objectr BaseProcessr]rblistdirrBrprsrurwrxryrPr^rzlocalr|r}rrrrrr s@   ("      __pycache__/spawn.cpython-35.pyc000064400000015614147554447510012560 0ustar00 Yf"@sddlZddlZddlZddlZddlZddlmZmZddlmZddlm Z dddd d d d gZ ej d krdZ dZ n9ej d koeeddZ ejjjdZ e rejjejdan ejaddZdd ZddZddZdd ZddddZddZddZdd ZgZddZ d d!Z!d"d#Z"d$d Z#dS)%N)get_start_methodset_start_method)process)util_mainfreeze_supportset_executableget_executableget_preparation_dataget_command_lineimport_main_pathwin32Ffrozenzpythonservice.exez python.execCs |adS)N) _python_exe)Zexer:/opt/alt/python35/lib64/python3.5/multiprocessing/spawn.pyr )scCstS)N)rrrrrr -scCs.t|dkr&|ddkr&dSdSdS)z= Return whether commandline indicates we are forking rz--multiprocessing-forkTFN)len)argvrrr is_forking4s"rcCsttjri}xYtjddD]D}|jd\}}|dkr]d||s   cKsttddr6tjdgdd|jDSd}|djdd |jD;}tj}tg|d |dgSd S) zJ Returns prefix of command line used for spawning a child process rFz--multiprocessing-forkcSsg|]}d|qS)z%s=%rr).0itemrrr Ts z$get_command_line..zWsz#get_command_line..z-cN)getattrr executableitemsjoinrZ_args_from_interpreter_flagsr)rprogZoptsrrrr Ns & c Csttjsttjdkrgddl}ddlm}|||}|j|t j }n"ddl m }||j _|}t|}tj|dS)z7 Run code specified by data received over pipe rrNr) steal_handle)semaphore_tracker)rrrAssertionErrorplatformmsvcrtZ reductionr+Zopen_osfhandleosO_RDONLYr,Z_semaphore_trackerZ_fdrr) Z pipe_handleZ parent_pidZ tracker_fdr/r+Z new_handlefdr,Zexitcoderrrr\s   rcCswtj|dddR}dtj_z,tj|}t|tj|}Wdtj`XWdQRX|jS)NrbclosefdT) r0fdopenrcurrent_process _inheritingpickleloadprepare _bootstrap)r3Z from_parentZpreparation_dataselfrrrrns cCs(ttjddr$tddS)Nr8Fa An attempt has been made to start a new process before the current process has finished its bootstrapping phase. This probably means that you are not using fork to start your child processes and you have forgotten to use the proper idiom in the main module: if __name__ == '__main__': freeze_support() ... The "freeze_support()" line can be omitted if the program is not going to be frozen to produce an executable.)r&rr7 RuntimeErrorrrrr_check_not_importing_mainzs r?cCsttdtjdtjj}tjdk rJtjj|d            cCsDd|kr|dtj_d|kr>|dtj_d|kr^|dr^tjd|krtjj|dd|kr|dt_ d|kr|dt_ d|krt j |dd|kr|dt_ d |kr t|d d d d |kr&t|d nd |kr@t|d dS)zE Try to get current process ready to unpickle process object r rAr@rBrCrDrFrErGZforceTrIrKN)rr7r rArr@Z get_loggerZsetLevelrrMrr0chdirrQr_fixup_main_from_name_fixup_main_from_path)datarrrr;s,              r;cCstjd}|dks(|jdr,dSt|jdd|krKdStj|tjd}t j |dddd}|j j ||tjd s>       !       2 &  __pycache__/spawn.cpython-35.opt-2.pyc000064400000014554147554447510013522 0ustar00 ]"@sddlZddlZddlZddlZddlZddlmZmZddlmZddlm Z dddd d d d gZ ej d krdZ dZ n9ej d koeeddZ ejjjdZ e rejjejdan ejaddZdd ZddZddZdd ZddddZddZddZdd ZgZddZ d d!Z!d"d#Z"d$d Z#dS)%N)get_start_methodset_start_method)process)util_mainfreeze_supportset_executableget_executableget_preparation_dataget_command_lineimport_main_pathwin32Ffrozenzpythonservice.exez python.execCs |adS)N) _python_exe)Zexer*/opt/alt/python35/lib64/python3.5/spawn.pyr )scCstS)N)rrrrrr -scCs.t|dkr&|ddkr&dSdSdS)Nrz--multiprocessing-forkTF)len)argvrrr is_forking4s"rcCsttjri}xYtjddD]D}|jd\}}|dkr]d||s   cKsttddr6tjdgdd|jDSd}|djdd |jD;}tj}tg|d |dgSdS) NrFz--multiprocessing-forkcSsg|]}d|qS)z%s=%rr).0itemrrr Ts z$get_command_line..zWsz#get_command_line..z-c)getattrr executableitemsjoinr_args_from_interpreter_flagsr)rprogZoptsrrrr Ns & c CstjdkrRddl}ddlm}|||}|j|tj}n"ddlm }||j _ |}t |}tj |dS)Nrrr) steal_handle)semaphore_tracker)rplatformmsvcrt reductionr,open_osfhandleosO_RDONLYr-Z_semaphore_trackerZ_fdrr) Z pipe_handleZ parent_pidZ tracker_fdr/r,Z new_handlefdr-exitcoderrrr\s   rcCswtj|dddR}dtj_z,tj|}t|tj|}Wdtj`XWdQRX|jS)NrbclosefdT) r2fdopenrcurrent_process _inheritingpickleloadprepare _bootstrap)r5Z from_parentZpreparation_dataselfrrrrns cCs(ttjddr$tddS)Nr;Fa An attempt has been made to start a new process before the current process has finished its bootstrapping phase. This probably means that you are not using fork to start your child processes and you have forgotten to use the proper idiom in the main module: if __name__ == '__main__': freeze_support() ... The "freeze_support()" line can be omitted if the program is not going to be frozen to produce an executable.)r&rr: RuntimeErrorrrrr_check_not_importing_mainzs rBcCsttdtjdtjj}tjdk rJtjj|d            cCsDd|kr|dtj_d|kr>|dtj_d|kr^|dr^tjd|krtjj|dd|kr|dt_ d|kr|dt_ d|krt j |dd|kr|dt_ d |kr t|d d d d |kr&t|d nd |kr@t|d dS)Nr rDrCrErFrGrIrHrJforceTrLrN)rr:r rDrrC get_loggersetLevelrrSrr2chdirrWr_fixup_main_from_name_fixup_main_from_path)datarrrr>s,              r>cCstjd}|dks(|jdr,dSt|jdd|krKdStj|tjd}t j |dddd}|j j ||tjdrhrir rrrr s>       !       2 &  __pycache__/popen_spawn_win32.cpython-35.pyc000064400000005764147554447510015010 0ustar00 Yf @sddlZddlZddlZddlZddlZddlmZddlmZddlmZddlm Z dgZ dZ ej d koe ed d Zejjjd ZGd ddeZdS)N)context)spawn) reduction)utilPopeniwin32frozenFzpythonservice.exec@s[eZdZdZdZddZddZddd Zd d Zd d Z dS)rz@ Start a subprocess to run the code of a process object rc Cstj|j}tjdd\}}tj|d}tjdtj d|}dj dd|D}t |ddd }yJtj tj |ddd dddd \}} } } tj| Wntj|YnX| |_d|_||_t||_tj|tj|jftj|z$tj||tj||WdtjdXWdQRXdS) NrZ parent_pidZ pipe_handle css|]}d|VqdS)z"%s"N).0xr r F/opt/alt/python35/lib64/python3.5/multiprocessing/popen_spawn_win32.py *sz!Popen.__init__..wbclosefdTF)rZget_preparation_data_name_winapiZ CreatePipemsvcrtZopen_osfhandleZget_command_lineosgetpidjoinopenZ CreateProcessZget_executableZ CloseHandlepid returncode_handleintsentinelrZFinalizerZset_spawning_popenrdump) selfZ process_objZ prep_dataZrhandleZwhandleZwfdcmdZto_childZhpZhtrtidr r r__init__!s2  '     zPopen.__init__cCs+|tjksttj||jS)N)rZget_spawning_popenAssertionErrorrZ duplicater)rZhandler r rduplicate_for_childFszPopen.duplicate_for_childNcCs|jdkr|dkr'tj}ntdt|dd}tjt|j|}|tjkrtj|j}|t krt j }||_|jS)Nrig?) rrZINFINITEmaxrZWaitForSingleObjectrZ WAIT_OBJECT_0ZGetExitCodeProcess TERMINATEsignalSIGTERM)rtimeoutZmsecsrescoder r rwaitJs     z Popen.waitcCs|jddS)Nr)r)r,)rr r rpollZsz Popen.pollc Cs`|jdkr\ytjt|jtWn-tk r[|jdddkrWYnXdS)Nr)g?)rrZTerminateProcessrrr&OSErrorr,)rr r r terminate]s  zPopen.terminate) __name__ __module__ __qualname____doc__methodr"r$r,r-r/r r r rrs  %  )rrr'sysrrrrr__all__r&platformgetattrZWINEXE executablelowerendswithZ WINSERVICEobjectrr r r rs      !__pycache__/util.cpython-35.opt-2.pyc000064400000022470147554447510013343 0ustar00 ]y-@sTddlZddlZddlZddlZddlZddlZddlmZddlm Z ddddd d d d d ddddddgZ dZ dZ dZ dZdZdZdZdadaddZddZddZddZdd Zdd d Zd!d ZejZejZd"d#Zd$d Z iZ!ejZ"Gd%dde#Z$dd&d'Z%d(d Z&da'eee%e j(e j)d)d*Z*ej+e*Gd+dde#Z,Gd,ddej-Z.yej/d-Z0Wne1k r+d.Z0YnXd/dZ2d0d1Z3d2d3Z4dS)4N)_args_from_interpreter_flags)process sub_debugdebuginfo sub_warning get_logger log_to_stderr get_temp_dirregister_after_fork is_exitingFinalizeForkAwareThreadLockForkAwareLocalclose_all_fds_exceptSUBDEBUG SUBWARNING multiprocessingz+[%(levelname)s/%(processName)s] %(message)sFcGstrtjt||dS)N)_loggerlogr)msgargsr)/opt/alt/python35/lib64/python3.5/util.pyr,scGstrtjt||dS)N)rrDEBUG)rrrrrr0scGstrtjt||dS)N)rrINFO)rrrrrr4scGstrtjt||dS)N)rrr)rrrrrr8sc Csddl}|jzts|jtadt_ttdrctjt tj t n2tj j t fiftj j t fifWd|jXtS)Nr unregister)logging _acquireLockr getLogger LOGGER_NAME propagatehasattratexitr!_exit_functionregister _exithandlersremoveappend _releaseLock)r"rrrr <s     cCsgddl}t}|jt}|j}|j||j||r]|j|dat S)NrT) r"r FormatterDEFAULT_LOGGING_FORMAT StreamHandler setFormatter addHandlersetLevel_log_to_stderrr)levelr"logger formatterhandlerrrrr Ws      cCstjjjd}|dkrddl}ddl}|jdd}td|td|j d|gdd |tjjd<|S) Ntempdirrprefixzpymp-zcreated temp directory %sr exitprioritydi) rcurrent_process_configgetshutiltempfilemkdtemprrrmtree)r:rArBrrrr ms  cCsttj}|jx`|D]X\\}}}}y||Wq#tk rz}ztd|WYdd}~Xq#Xq#WdS)Nz after forker raised exception %s)list_afterfork_registryitemssort Exceptionr)rGindexidentfuncobjerrr_run_after_forkerss rOcCs#|tttt||fz<%s object, callback=%s__name__z, args=z , kwargs=rz, exitprority=>) rUAttributeError TypeError __class__rigetattrrVrWstrrXrZ)r_rMxrrr__repr__s      zFinalize.__repr__) ri __module__ __qualname__rbr^rr[r\rfrgrhrqrrrrrs  c stdkrdSdkr+ddnfddfddttD}|jddxl|D]d}tj|}|dk rstd|y |Wqstk rd dl}|jYqsXqsWdkrtjdS) NcSs|ddk S)Nrr)prrrsz!_run_finalizers..cs|ddk o|dkS)Nrr)rt) minpriorityrrruscs"g|]}|r|qSrr).0key)frr s z#_run_finalizers..reverseTz calling %sr) r^rErHr@rrI traceback print_excclear)rvkeysrx finalizerr|r)ryrvr_run_finalizerss$         rcCstptdkS)N)_exitingrrrrr scCstsda|d|d|d|dk rx7|D],}|jrC|d|j|jjqCWx+|D] }|d|j|jq}W|d|dS)NTzprocess shutting downz2running all "atexit" finalizers with priority >= 0rz!calling terminate() for daemon %szcalling join() for process %sz)running the remaining "atexit" finalizers)rdaemonname_popen terminatejoin)rrractive_childrenr>rtrrrr)s      r)c@s@eZdZddZddZddZddZd S) rcCs|jt|tjdS)N)_resetr r)r_rrrrbKs zForkAwareThreadLock.__init__cCs1tj|_|jj|_|jj|_dS)N) threadingLock_lockacquirerelease)r_rrrrOszForkAwareThreadLock._resetcCs |jjS)N)r __enter__)r_rrrrTszForkAwareThreadLock.__enter__cGs|jj|S)N)r__exit__)r_rrrrrWszForkAwareThreadLock.__exit__N)rirrrsrbrrrrrrrrJs    c@s(eZdZddZddZdS)rcCst|dddS)NcSs |jjS)N)__dict__r~)rMrrrru]sz)ForkAwareLocal.__init__..)r )r_rrrrb\szForkAwareLocal.__init__cCst|ffS)N)type)r_rrr __reduce__^szForkAwareLocal.__reduce__N)rirrrsrbrrrrrr[s   SC_OPEN_MAXcCset|dtg}|jx>tt|dD]&}tj||d||dq7WdS)Nr)rEMAXFDrHrangelenr[ closerange)fdsirrrrjs cCstjdkrdSytjjWnttfk r>YnXyPtjtjtj}yt|ddt_Wntj|YnXWnttfk rYnXdS)NclosefdF) sysstdincloseOSError ValueErrorr[opendevnullO_RDONLY)fdrrr _close_stdints  rcCsddl}tttt|}tj\}}zM|j|tj|gd|ddddddd d ||dddSWdtj |tj |XdS) NrTrFrrrrrr) _posixsubprocesstuplesortedmapintr[pipe fork_execfsencoder)pathrpassfdsr errpipe_read errpipe_writerrrspawnv_passfdss  r)5r[ itertoolsrrSr(r subprocessrr__all__NOTSETrrr rr%r0rr5rrrrr r r WeakValueDictionaryrFcountrQrOr r^rYobjectrrr rrr>r)r*rlocalrsysconfrrIrrrrrrr sd                  S,  (     __pycache__/popen_forkserver.cpython-35.pyc000064400000004760147554447510015021 0ustar00 Yf@sddlZddlZddlmZejs=edddlmZddlmZddlmZddlm Z dd lm Z d gZ Gd d d e Z Gd d d ejZdS)N) reductionz,No support for sending fds between processes)context) forkserver) popen_fork)spawn)utilPopenc@s(eZdZddZddZdS)_DupFdcCs ||_dS)N)ind)selfr r E/opt/alt/python35/lib64/python3.5/multiprocessing/popen_forkserver.py__init__sz_DupFd.__init__cCstj|jS)N)rZget_inherited_fdsr )r r r rdetachsz _DupFd.detachN)__name__ __module__ __qualname__rrr r r rr s  r csXeZdZdZeZfddZddZddZe j dd Z S) r rcsg|_tj|dS)N)_fdssuperr)r process_obj) __class__r rr"s zPopen.__init__cCs!|jj|t|jdS)Nr)rappendlen)r fdr r rduplicate_for_child&szPopen.duplicate_for_childcCstj|j}tj}tj|z$tj||tj||WdtjdXt j |j \|_ }t j|tj|j ft|ddd}|j|jWdQRXt j|j |_dS)NwbclosefdT)rZget_preparation_data_nameioBytesIOrZset_spawning_popenrdumprZconnect_to_new_processrsentinelrZFinalizeoscloseopenwrite getbuffer read_unsignedpid)r rZ prep_dataZbufwfr r r_launch*s  z Popen._launchc Cs|jdkrddlm}|tjkr4dnd}||jg|sSdSytj|j|_Wn!tt fk rd|_YnX|jS)Nr)wait) returncodeZmultiprocessing.connectionr-r#WNOHANGr"rr(OSErrorEOFError)r Zflagr-Ztimeoutr r rpoll:sz Popen.poll) rrrmethodr ZDupFdrrr,r#r0r3r r )rrr s   )rr#rZHAVE_SEND_HANDLE ImportErrorrrrrr__all__objectr r r r r rs      __pycache__/heap.cpython-35.pyc000064400000015157147554447510012347 0ustar00 Yf @s#ddlZddlZddlZddlZddlZddlZddlmZddlmZddlm Z dgZ ej dkrddl Z Gdd d e Zn>Gd d d e Zd d Zd dZejeeGddde ZGddde ZdS)N)context) reduction)util BufferWrapperwin32c@s@eZdZejZddZddZddZdS)ArenacCs||_xttdD]Z}dtjt|jf}tjd|d|}tjdkrfP|j qWt d||_ ||_ |j|j f|_ dS)Ndz pym-%d-%srtagnamerzCannot find name for new mmap)sizerangeosgetpidnext_randmmap_winapiZ GetLastErrorcloseFileExistsErrornamebuffer_state)selfr irZbufr9/opt/alt/python35/lib64/python3.5/multiprocessing/heap.py__init__#s    zArena.__init__cCstj||jS)N)rZassert_spawningr)rrrr __getstate__2s zArena.__getstate__cCs>|\|_|_|_tjd|jd|j|_dS)Nrr r )r rrrr)rstaterrr __setstate__6szArena.__setstate__N) __name__ __module__ __qualname__tempfileZ_RandomNameSequencerrrr rrrrrs    rc@seZdZdddZdS)rrc Cs-||_||_|d krtjddtjdtj\|_}tj|tj |tj |jft |jddd{}d }||krd |}x%t ||D]}|j |qW~|j d |||j|kstWdQRXtj|j|j|_dS) Nrprefixzpym-%d-dirwbclosefdFisr i)r fdr$ZmkstemprrrZ get_temp_dirunlinkFinalizeropenr writetellAssertionErrorrr)rr r)rfZbsZzeros_rrrrAs"    (   zArena.__init__Nr )r!r"r#rrrrrr?s cCs:|jdkrtdt|jtj|jffS)NrzDArena is unpicklable because forking was enabled when it was createdr )r) ValueError rebuild_arenar rZDupFd)arrr reduce_arenaTs r5cCst||jS)N)rdetach)r Zdupfdrrrr3Zsr3c@seZdZdZejddZeddZddZ dd Z d d Z d d Z ddZ ddZdS)HeapcCsmtj|_tj|_||_g|_i|_i|_ i|_ t |_ g|_ g|_dS)N)rr_lastpid threadingZLock_lock_size_lengths _len_to_seq_start_to_block_stop_to_blockset_allocated_blocks_arenas_pending_free_blocks)rr rrrrgs       z Heap.__init__cCs|d}|||@S)Nrr)nZ alignmentmaskrrr_roundupts z Heap._roundupc Cstj|j|}|t|jkr|jt|j|tj}|jd9_t j d|t |}|j j ||d|fS|j|}|j|}|j}|s|j|=|j|=|\}}}|j||f=|j||f=|S)Nz"allocating a new mmap of length %dr)bisectZ bisect_leftr=lenrGmaxr<rPAGESIZErinforrCappendr>popr?r@) rr rlengtharenaseqblockstartstoprrr_malloczs"!     z Heap._mallocc Cs$|\}}}y|j||f}Wntk r:YnX|j|\}}y|j||f}Wntk r{YnX|j|\}}|||f}||}y|j|j|Wn5tk r|g|j|rNrIZinsortr=) rrSrQrTrUZ prev_blockr1Z next_blockrPrrr_frees(    z Heap._freecCs}|\}}}|j||f=|j||f=||}|j|}|j||ss|j|=|jj|||fS)N)r?r@r>remover=)rrSrQrTrUrPrRrrrrXs    z Heap._absorbc CsQxJy|jj}Wntk r+PYnX|jj||j|qWdS)N)rDrO IndexErrorrBrZrY)rrSrrr_free_pending_blockss zHeap._free_pending_blocksc Cstj|jkst|jjds@|jj|n<z+|j|j j ||j |Wd|jj XdS)NF) rrr9r/r;acquirerDrNr\rBrZrYrelease)rrSrrrfrees  z Heap.freec Csd|kotjkns%ttj|jkrD|j|j|j|j t |d|j }|j |\}}}||}||kr|j |||f|||f}|jj||SWdQRXdS)Nrr)sysmaxsizer/rrr9rr;r\rGrK _alignmentrVrYrBadd)rr rQrTrUZnew_stoprSrrrmallocs%     z Heap.mallocN)r!r"r#rbrrLr staticmethodrGrVrYrXr\r_rdrrrrr7cs      r7c@s1eZdZeZddZddZdS)rcCsid|kotjkns%ttjj|}||f|_tj|tjj d|fdS)Nrargs) r`rar/r_heaprdrrr+r_)rr rSrrrrs%zBufferWrapper.__init__cCs3|j\\}}}}t|j|||S)N)r memoryviewr)rrQrTrUr rrrcreate_memoryviewszBufferWrapper.create_memoryviewN)r!r"r#r7rgrrirrrrrs   )rIrrr`r$r:rrr__all__platformrobjectrr5r3registerr7rrrrr s$           __pycache__/popen_fork.cpython-35.pyc000064400000004515147554447510013570 0ustar00 Yf @sWddlZddlZddlZddlmZdgZGdddeZdS)N)utilPopenc@sgeZdZdZddZddZejddZdd d Z d d Z d dZ dS)rforkcCs4tjjtjjd|_|j|dS)N)sysstdoutflushstderr returncode_launch)self process_objr?/opt/alt/python35/lib64/python3.5/multiprocessing/popen_fork.py__init__s   zPopen.__init__cCs|S)Nr)r fdrrrduplicate_for_childszPopen.duplicate_for_childcCs|jdkrxPytj|j|\}}Wn)tk r\}z dSWYdd}~XqXPqW||jkrtj|rtj| |_n'tj|sttj ||_|jS)N) r oswaitpidpidOSError WIFSIGNALEDWTERMSIG WIFEXITEDAssertionError WEXITSTATUS)r Zflagrstserrrpollsz Popen.pollNcCsm|jdkrf|dk rDddlm}||jg|sDdS|j|dkr_tjndS|jS)Nr)waitg)r Zmultiprocessing.connectionrsentinelrrWNOHANG)r timeoutrrrrr,s "z Popen.waitc Csn|jdkrjytj|jtjWn>tk r=Yn-tk ri|jdddkreYnXdS)Nr"g?) r rkillrsignalSIGTERMProcessLookupErrorrr)r rrr terminate6s  zPopen.terminatec Csd}tj\}}tj|_|jdkrzBtj|dtjkrkddl}|j|j }Wdtj |Xn/tj|t j |tj|f||_ dS)Nrrrandom)rpiperrclosermodulesr(Zseed _bootstrap_exitrZFinalizer )r r codeZparent_rZchild_wr(rrrr @s    z Popen._launch) __name__ __module__ __qualname__methodrrrr!rrr'r rrrrr s    )rrr$r__all__objectrrrrrs    __pycache__/process.cpython-35.opt-1.pyc000064400000017637147554447510014054 0ustar00 Yf# @svdddgZddlZddlZddlZddlZddlmZyejjej Z Wne k rdZ YnXddZ ddZ dd ZGd ddeZGd d d eZGd ddeZeaejdaea[iZxPeejjD]9\ZZedddkr,dekr,eee Ssz'BaseProcess.__init__..)next_process_counterr _identity_configcopyosgetpid _parent_pidr _targettuple_argsdict_kwargstype__name__join_namer _danglingadd)rgrouptargetnameargskwargsrcountrrr__init__Gs   #  zBaseProcess.__init__cCs#|jr|j|j|jdS)zQ Method to be run in sub-process; can be overridden in sub-class N)r"r$r&)rrrrrunXs zBaseProcess.runcCsKt|j||_|jj|_|`|`|`tj |dS)z% Start child process N) r rr sentinel _sentinelr"r$r&r r,)rrrrstart_s zBaseProcess.startcCs|jjdS)zT Terminate process; sends SIGTERM signal or uses TerminateProcess() N)r terminate)rrrrr8pszBaseProcess.terminatecCs/|jj|}|dk r+tj|dS)z5 Wait until child process terminates N)r waitr r)rZtimeoutresrrrr)vs zBaseProcess.joincCs@|tkrdS|jdkr#dS|jj|jjdkS)z1 Return whether process is alive TNF)rr r returncode)rrrris_alives   zBaseProcess.is_alivecCs|jS)N)r*)rrrrr/szBaseProcess.namecCs ||_dS)N)r*)rr/rrrr/scCs|jjddS)z4 Return whether process is a daemon rF)rget)rrrrrszBaseProcess.daemoncCs||jdszBaseProcess.authkeycCst||jdN)AuthenticationStringr)rr>rrrr>scCs#|jdkr|jS|jjS)zM Return exit code of process or `None` if it has yet to stop N)r r )rrrrexitcodeszBaseProcess.exitcodecCs-|tkrtjS|jo(|jjSdS)zU Return identifier (PID) of process or `None` if it has yet to start N)rrr r pid)rrrridents  zBaseProcess.identc Cs0y |jSWntk r+tdYnXdS)z{ Return a file descriptor (Unix) or handle (Windows) suitable for waiting for process termination. zprocess not startedN)r6AttributeError ValueError)rrrrr5s  zBaseProcess.sentinelcCs|tkrd}n]|jtjkr3d}n?|jdkrKd}n'|jjdk rl|j}nd}t|tkr|dkrd}ndt j ||}dt|j |j ||j rdpd fS) NZstartedunknowninitialrZstoppedz stopped[%s]z<%s(%s, %s%s)>z daemon)rr!rr r r r@r'int_exitcode_to_namer=r(r*r)rZstatusrrr__repr__s       zBaseProcess.__repr__c Csddlm}m}zgy|jdk r;|j|jtjdata |j t }|a z|j j |jWd~X|jdz|jd}Wd|jXWntk rA}zd|jsd}nMt|jdtr|jd}n'tjjt|jddd}WYdd}~Xn;d}ddl}tjjd|j|jYnXWd|jd|tjjtjjX|S)N)utilcontextz child process calling self.run()r z Process %s: z process exiting with exitcode %d)rGrLrMZ _start_methodZ_force_start_method itertoolsr2rsetr Z _close_stdinrZ_finalizer_registryclearZ_run_after_forkersinfor4Z_exit_function SystemExitr0 isinstancerHsysstderrwriter tracebackr/ print_excstdoutflush)rrLrMZ old_processr@erXrrr _bootstrapsD        !  zBaseProcess._bootstrap)r( __module__ __qualname____doc__rr3r4r7r8r)r<propertyr/setterrr>r@rBrAr5rJr]rrrrr>s*         c@seZdZddZdS)r?cCs>ddlm}|dkr+tdtt|ffS)NrK)get_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)rMrc TypeErrorr?bytes)rrcrrr __reduce__s  zAuthenticationString.__reduce__N)r(r^r_rfrrrrr?s r?c@seZdZddZdS) _MainProcesscCsLf|_d|_d|_d|_dttjdddi|_dS)NZ MainProcessr> Z semprefixz/mp)rr*r!r r?rurandomr)rrrrr3(s     z_MainProcess.__init__N)r(r^r_r3rrrrrg&s rgrKZSIG_) __all__rrUsignalrO _weakrefsetrpathabspathgetcwdZ ORIGINAL_DIROSErrorrrr objectrrer?rgrr2rrPr rIr __dict__itemsr/Zsignumr+rrrr s0          ""__pycache__/connection.cpython-35.opt-1.pyc000064400000064274147554447510014534 0ustar00 Yfx @sIddddgZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z dd l m Z mZdd l mZy2ddlZdd lmZmZmZmZWn*ek r"ejd krdZYnXd ZdZejZdZdgZeedrldZedg7Zejd krdZedg7ZeddZddZddZ ddZ!ddZ"GdddZ#erGddde#Z$Gd d!d!e#Z%Gd"dde&Z'ddd#dZ(ejd kr[d$d%dZ)nd$d&dZ)Gd'd(d(e&Z*d)d*Z+ejd krGd+d,d,e&Z,d-d.Z-d/Z.d0Z/d1Z0d2Z1d3d4Z2d5d6Z3Gd7d8d8e&Z4d9d:Z5d;d<Z6Gd=d>d>e'Z7d?d@Z8ejd kr|dAdBZ9ej:ej;hZ<ddCdZ=n?ddl>Z>ee>dDre>j?Z@n e>jAZ@ddEdZ=ejd krdFdGZBdHdIZCe jDe%eBdJdKZEdLdMZFe jDe$eEn(dNdGZBdOdIZCe jDe%eBdS)PClientListenerPipewaitN) reduction)util)AuthenticationErrorBufferTooShort)ForkingPickler) WAIT_OBJECT_0WAIT_ABANDONED_0 WAIT_TIMEOUTINFINITEwin32i g4@AF_INETAF_UNIXAF_PIPEcCstj|S)N)time)timeoutr?/opt/alt/python35/lib64/python3.5/multiprocessing/connection.py _init_timeout;srcCstj|kS)N)r)trrr_check_timeout>srcCs|dkrd S|dkr8tjdddtjS|dkrptjdd tjttfdd Std d S)z? Return an arbitrary free address for the given family r localhostrrprefixz listener-dirrz\\.\pipe\pyc-%d-%d-zunrecognized familyN)rr) tempfileZmktemprZ get_temp_dirosgetpidnext _mmap_counter ValueError)familyrrrarbitrary_addressEs     r&cCsitjdkr+|dkr+td|tjdkre|dkrett|setd|dS)zD Checks if the family is valid for the current environment. rrzFamily %s is not recognized.rN)sysplatformr$hasattrsocket)r%rrr_validate_familySs r+cCset|tkrdSt|tkr;|jdr;dSt|tkrQdStd|dS)z] Return the types of the address This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE' rz\\rrzaddress type of %r unrecognizedN)typetuplestr startswithr$)addressrrr address_type_s!r1c@s!eZdZdZddddZddZddZd d Zd d Zd dZ e ddZ e ddZ e ddZ ddZddZddddZddZdddZdd d!Zd"d#Zd$d%d&Zd'd(Zd)d*ZdS)+_ConnectionBaseNTcCs]|j}|dkr$td| r>| r>td||_||_||_dS)Nrzinvalid handlez6at least one of `readable` and `writable` must be True) __index__r$_handle _readable _writable)selfhandlereadablewritablerrr__init__us      z_ConnectionBase.__init__cCs|jdk r|jdS)N)r4_close)r7rrr__del__sz_ConnectionBase.__del__cCs|jdkrtddS)Nzhandle is closed)r4OSError)r7rrr _check_closedsz_ConnectionBase._check_closedcCs|jstddS)Nzconnection is write-only)r5r>)r7rrr_check_readables z_ConnectionBase._check_readablecCs|jstddS)Nzconnection is read-only)r6r>)r7rrr_check_writables z_ConnectionBase._check_writablecCs/|jrd|_n |jtddS)NFzbad message length)r6r5closer>)r7rrr_bad_message_lengths   z#_ConnectionBase._bad_message_lengthcCs |jdkS)z True if the connection is closedN)r4)r7rrrclosedsz_ConnectionBase.closedcCs|jS)z"True if the connection is readable)r5)r7rrrr9sz_ConnectionBase.readablecCs|jS)z"True if the connection is writable)r6)r7rrrr:sz_ConnectionBase.writablecCs|j|jS)z+File descriptor or handle of the connection)r?r4)r7rrrfilenos z_ConnectionBase.filenoc Cs.|jdk r*z|jWdd|_XdS)zClose the connectionN)r4r<)r7rrrrBsz_ConnectionBase.closercCs|j|jt|}|jdkrAtt|}t|}|dkretd||kr}td|dkr||}n7|dkrtdn|||krtd|j||||dS)z,Send the bytes data from a bytes-like objectrrzoffset is negativezbuffer length < offsetNzsize is negativezbuffer length < offset + size)r?rA memoryviewitemsizebyteslenr$ _send_bytes)r7bufoffsetsizemnrrr send_bytess"            z_ConnectionBase.send_bytescCs.|j|j|jtj|dS)zSend a (picklable) objectN)r?rArJr dumps)r7objrrrsends  z_ConnectionBase.sendcCsg|j|j|dk r8|dkr8td|j|}|dkr]|j|jS)z7 Receive bytes data as a bytes object. Nrznegative maxlength)r?r@r$ _recv_bytesrCgetvalue)r7Z maxlengthrKrrr recv_bytess     z_ConnectionBase.recv_bytesc Cs|j|jt|}|j}|t|}|dkrWtdn||krotd|j}|j}|||krt|j |j d|j |||||||SWdQRXdS)zq Receive bytes data into a writeable bytes-like object. Return the number of bytes read. rznegative offsetzoffset too largeN) r?r@rFrGrIr$rTtellr rUseekreadinto)r7rKrLrNrGZbytesizeresultrMrrrrecv_bytes_intos"         z_ConnectionBase.recv_bytes_intocCs3|j|j|j}tj|jS)zReceive a (picklable) object)r?r@rTr loads getbuffer)r7rKrrrrecvs   z_ConnectionBase.recvgcCs!|j|j|j|S)z/Whether there is any input available to be read)r?r@_poll)r7rrrrpolls  z_ConnectionBase.pollcCs|S)Nr)r7rrr __enter__sz_ConnectionBase.__enter__cCs|jdS)N)rB)r7exc_type exc_valueexc_tbrrr__exit__sz_ConnectionBase.__exit__)__name__ __module__ __qualname__r4r;r=r?r@rArCpropertyrDr9r:rErBrPrSrVr[r^r`rarerrrrr2rs(            r2c@saeZdZdZdZejddZddZddd Z d d Z d d Z dS)PipeConnectionz Connection class based on a Windows named pipe. Overlapped I/O is used, so the handles must have been created with FILE_FLAG_OVERLAPPED. FcCs||jdS)N)r4)r7Z _CloseHandlerrrr<szPipeConnection._closecCstj|j|dd\}}zJy.|tjkrQtj|jgdt}Wn|jYnXWd|jd\}}XdS)N overlappedTF) _winapiZ WriteFiler4ERROR_IO_PENDINGWaitForMultipleObjectseventrcancelGetOverlappedResult)r7rKoverrwaitresZnwrittenrrrrJs!  zPipeConnection._send_bytesNc Csi|jrd|_tjS|dkr.dn t|d}ytj|j|dd\}}zJy.|tjkrtj|j gdt }Wn|j YnXWd|j d\}}|dkrtj}|j |j|S|tjkr|j||SXWnCtk rX}z#|jtjkrCtnWYdd}~XnXtddS)NFrkTrz.shouldn't get here; expected KeyboardInterrupt)_got_empty_messageioBytesIOminrlReadFiler4rmrnrorrprqwriter]ZERROR_MORE_DATA_get_more_datar>winerrorERROR_BROKEN_PIPEEOFError RuntimeError) r7maxsizeZbsizerrrsrtZnreadferrrrT&s6   !     zPipeConnection._recv_bytescCs?|js%tj|jddkr)dStt|g|S)NrT)rvrl PeekNamedPiper4boolr)r7rrrrr_Fs zPipeConnection._pollcCs|j}tj}|j|tj|jd}|dk rgt|||krg|jtj |j|dd\}}|j d\}}|j|j|S)NrrkT) r]rwrxr{rlrr4rIrCrzrq)r7rrrrKrleftrsZrbytesrrrr|Ls   " !zPipeConnection._get_more_data) rfrgrh__doc__rvrl CloseHandler<rJrTr_r|rrrrrj s   rjc@seZdZdZer?ejddZejZ ej Z n$e j ddZe jZ e jZ e ddZe ddZd d Zd d d ZddZd S) Connectionzo Connection class based on an arbitrary file descriptor (Unix only), or a socket handle (Windows). cCs||jdS)N)r4)r7r<rrrr<cszConnection._closecCs||jdS)N)r4)r7r<rrrr<hscCsPt|}x=||j|}||8}|dkr8P||d}qWdS)Nr)rIr4)r7rKr{ remainingrOrrr_sendms   zConnection._sendcCstj}|j}|}xo|dkr|||}t|}|dkrr||krftn td|j|||8}qW|S)Nrzgot end of file during message)rwrxr4rIrr>r{)r7rMreadrKr8rchunkrOrrr_recvvs        zConnection._recvcCs\t|}tjd|}|dkrG|j||j|n|j||dS)Nz!ii@)rIstructZpackr)r7rKrOheaderrrrrJs    zConnection._send_bytesNcCsS|jd}tjd|j\}|dk rF||krFdS|j|S)Nz!i)rrZunpackrU)r7rrKrMrrrrTs zConnection._recv_bytescCst|g|}t|S)N)rr)r7rrrrrr_szConnection._poll)rfrgrhrrl_multiprocessingZ closesocketr<rSZ_writer^Z_readr rBr{rrrrJrTr_rrrrr\s       rc@seZdZdZddddddZddZdd Zed d Zed d Z d dZ ddZ dS)rz Returns a listener object. This is a wrapper for a bound socket which is 'listening' for connections, or for a Windows named pipe. NrcCs|p|rt|pt}|p-t|}t||dkr[t|||_nt||||_|dk rt|t rt d||_ dS)Nrzauthkey should be a byte string) r1default_familyr&r+ PipeListener _listenerSocketListener isinstancerH TypeError_authkey)r7r0r%backlogauthkeyrrrr;s   zListener.__init__cCsW|jdkrtd|jj}|jrSt||jt||j|S)zz Accept a connection on the bound socket or named pipe of `self`. Returns a `Connection` object. Nzlistener is closed)rr>acceptrdeliver_challengeanswer_challenge)r7crrrrs  zListener.acceptcCs,|j}|dk r(d|_|jdS)zA Close the bound socket or named pipe of `self`. N)rrB)r7ZlistenerrrrrBs   zListener.closecCs |jjS)N)r_address)r7rrrszListener.cCs |jjS)N)r_last_accepted)r7rrrrscCs|S)Nr)r7rrrraszListener.__enter__cCs|jdS)N)rB)r7rbrcrdrrrreszListener.__exit__) rfrgrhrr;rrBrir0Z last_acceptedrarerrrrrs    cCs|pt|}t||dkr7t|}n t|}|dk rkt|t rktd|dk rt||t|||S)z= Returns a connection to the address of a `Listener` rNzauthkey should be a byte string) r1r+ PipeClient SocketClientrrHrrr)r0r%rrrrrrs       TcCs|rYtj\}}|jd|jdt|j}t|j}n6tj\}}t|dd}t|dd}||fS)zL Returns pair of connection objects at either end of a pipe Tr:Fr9)r*Z socketpair setblockingrdetachr pipe)duplexs1s2c1c2Zfd1Zfd2rrrrs  c CsAtd}|r;tj}tjtjB}tt}}ntj}tj}dt}}tj||tjBtj Btj tj Btj Bd||tj tj}tj||dtjtjtjtj}tj|tj ddtj|dd}|jd\} } t|d|} t|d|} | | fS) zL Returns pair of connection objects at either end of a pipe rrrNrkTr:r9)r&rlPIPE_ACCESS_DUPLEX GENERIC_READ GENERIC_WRITEBUFSIZEZPIPE_ACCESS_INBOUNDCreateNamedPipeFILE_FLAG_OVERLAPPEDFILE_FLAG_FIRST_PIPE_INSTANCEPIPE_TYPE_MESSAGEPIPE_READMODE_MESSAGE PIPE_WAITNMPWAIT_WAIT_FOREVERNULL CreateFile OPEN_EXISTINGSetNamedPipeHandleStateConnectNamedPiperqrj) rr0ZopenmodeaccessZobsizeZibsizeZh1Zh2rk_rsrrrrrrs2        c@s=eZdZdZdddZddZddZd S) rzO Representation of a socket which is bound to an address and listening rcCstjtt||_yqtjdkrI|jjtjtjd|jjd|jj ||jj ||jj |_ Wn"t k r|jjYnX||_d|_|dkrtj|tjd|fdd|_n d|_dS)NposixrTrargs exitpriorityr)r*getattr_socketr nameZ setsockoptZ SOL_SOCKETZ SO_REUSEADDRrZbindZlistenZ getsocknamerr>rBZ_familyrrFinalizeunlink_unlink)r7r0r%rrrrr;8s$      $zSocketListener.__init__cCs5|jj\}|_|jdt|jS)NT)rrrrrr)r7srrrrPs zSocketListener.acceptc Cs>z|jjWd|j}|dk r9d|_|XdS)N)rrBr)r7rrrrrBUs    zSocketListener.closeN)rfrgrhrr;rrBrrrrr4s  rc Cs\t|}tjtt|1}|jd|j|t|jSWdQRXdS)zO Return a connection object connected to the socket given by `address` TN)r1r*rrZconnectrr)r0r%rrrrr_s    rc@sReZdZdZdddZdddZdd Zed d ZdS) rz0 Representation of a named pipe NcCsq||_|jddg|_d|_tjd|jtj|tjd|j|jfdd|_ dS)NfirstTz listener created with address=%rrrr) r _new_handle _handle_queuerr sub_debugrr_finalize_pipe_listenerrB)r7r0rrrrr;ss   zPipeListener.__init__Fc CsbtjtjB}|r#|tjO}tj|j|tjtjBtjBtj t t tj tj S)N) rlrrrrrrrrZPIPE_UNLIMITED_INSTANCESrrr)r7rflagsrrrr~s    zPipeListener._new_handlecCs|jj|j|jjd}ytj|dd}Wn:tk r}}z|jtjkrkWYdd}~XnbXzHytj |j gdt }Wn"|j tj |YnXWd|jd\}}Xt|S)NrrkTF)rappendrpoprlrr>r}Z ERROR_NO_DATArnrorrprrqrj)r7r8rrrresrrsrrrrs"   zPipeListener.acceptcCs2tjd|x|D]}tj|qWdS)Nz closing listener with address=%r)rrrlr)Zqueuer0r8rrrrs z$PipeListener._finalize_pipe_listener) rfrgrhrr;rr staticmethodrrrrrros   rcCst}xyKtj|dtj|tjtjBdtjtjtjtj}WnOt k r}z/|j tj tj fkst |rWYdd}~Xq XPq Wtj|tjddt|S)zU Return a connection object connected to the pipe given by `address` irN)rrlZ WaitNamedPiperrrrrrr>r}ZERROR_SEM_TIMEOUTZERROR_PIPE_BUSYrrrrj)r0rhrrrrrs"  rs #CHALLENGE#s #WELCOME#s #FAILURE#cCsddl}tjt}|jt||j||dj}|jd}||krr|jt n|jt t ddS)Nrmd5zdigest received was wrong) hmacr urandomMESSAGE_LENGTHrP CHALLENGEnewdigestrVWELCOMEFAILUREr ) connectionrrmessagerresponserrrrs   rcCsddl}|jd}|ttd}|j||dj}|j||jd}|tkrtddS)Nrrrzdigest sent was rejected) rrVrIrrrrPrr )rrrrrrrrrrs   rc@s4eZdZddZddZddZdS)ConnectionWrappercCsO||_||_||_x-dD]%}t||}t|||q"WdS)NrErBr`rVrP)rErBr`rVrP)_conn_dumps_loadsrsetattr)r7connrQr\attrrRrrrr;s     zConnectionWrapper.__init__cCs#|j|}|jj|dS)N)rrrP)r7rRrrrrrSszConnectionWrapper.sendcCs|jj}|j|S)N)rrVr)r7rrrrr^szConnectionWrapper.recvN)rfrgrhr;rSr^rrrrrs   rcCs%tj|fddddjdS)Nrzutf-8) xmlrpclibrQencode)rRrrr _xml_dumpssrcCs%tj|jd\\}}|S)Nzutf-8)rr\decode)rrRmethodrrr _xml_loadss!rc@seZdZddZdS) XmlListenercCs.ddljatj|}t|ttS)Nr) xmlrpc.clientclientrrrrrr)r7rRrrrrszXmlListener.acceptN)rfrgrhrrrrrrs rcOs(ddljatt||ttS)Nr)rrrrrrr)rkwdsrrr XmlClientsrcCst|}g}x|rtj|d|}|tkr@Pnrt|koatt|knrs|t8}n?t|kott|knr|t8}n td|j||||dd}d}qW|S)NFzShould not get hererr) listrlrnrr rIr rr)ZhandlesrLreadyrrrr_exhaustive_waits   & &   rc .s |dkrt}n)|dkr*d}nt|dd}t|}ig}tt}zxy|D]q}yt|d}Wn"tk r||jrszwait..cs"g|]}|kr|qSrr)ro) ready_objectsrr ss zwait..)rr)rintrsetrAttributeErrorr3rlrzr>r} _ready_errorsrmrror'Zgetwindowsversionrqr)rvaddrkeysrpZERROR_OPERATION_ABORTEDupdate) object_listrZov_listZ ready_handlesrrErrrsrrr)rrrr'sh         "  "            PollSelectorc Cst}x!|D]}|j|tjqW|dk rLtj|}xV|j|}|rudd|DS|dk rO|tj}|dkrO|SqOWWdQRXdS)z Wait till an object in object_list is ready/readable. Returns list of those objects in object_list which are ready/readable. NcSsg|]\}}|jqSr)Zfileobj)rkeyZeventsrrrrs zwait..r) _WaitSelectorregister selectorsZ EVENT_READrZselect)rrZselectorrRZdeadlinerrrrrs     c Csm|j}tj|tjtj?}ddlm}|j|}t||j |j ffSWdQRXdS)Nr)resource_sharer) rEr*ZfromfdrZ SOCK_STREAMrrZ DupSocketrebuild_connectionr9r:)rr8rrdsrrrreduce_connections  rcCs"|j}t|j||S)N)rr)rr9r:Zsockrrrrs rcCs_|jrtjnd|jr'tjndB}tj|j|}t||j|jffS)Nr) r9rlZFILE_GENERIC_READr:ZFILE_GENERIC_WRITErZ DupHandlerErebuild_pipe_connection)rrdhrrrreduce_pipe_connectionsrcCs|j}t|||S)N)rrj)rr9r:r8rrrrs rcCs.tj|j}t||j|jffS)N)rZDupFdrErr9r:)rdfrrrrscCs|j}t|||S)N)rr)rr9r:fdrrrrs )G__all__rwr r'r*rrr itertoolsrrrrr r r rlr r rr ImportErrorr(rZCONNECTION_TIMEOUTcountr#rZfamiliesr)rrr&r+r1r2rjrobjectrrrrrrrrrrrrrrrrrrrr~ZERROR_NETNAME_DELETEDrrr r r ZSelectSelectorrrr rrrrrr s          &         PJ8,+ 8      P         __pycache__/popen_forkserver.cpython-35.opt-1.pyc000064400000004760147554447510015760 0ustar00 Yf@sddlZddlZddlmZejs=edddlmZddlmZddlmZddlm Z dd lm Z d gZ Gd d d e Z Gd d d ejZdS)N) reductionz,No support for sending fds between processes)context) forkserver) popen_fork)spawn)utilPopenc@s(eZdZddZddZdS)_DupFdcCs ||_dS)N)ind)selfr r E/opt/alt/python35/lib64/python3.5/multiprocessing/popen_forkserver.py__init__sz_DupFd.__init__cCstj|jS)N)rZget_inherited_fdsr )r r r rdetachsz _DupFd.detachN)__name__ __module__ __qualname__rrr r r rr s  r csXeZdZdZeZfddZddZddZe j dd Z S) r rcsg|_tj|dS)N)_fdssuperr)r process_obj) __class__r rr"s zPopen.__init__cCs!|jj|t|jdS)Nr)rappendlen)r fdr r rduplicate_for_child&szPopen.duplicate_for_childcCstj|j}tj}tj|z$tj||tj||WdtjdXt j |j \|_ }t j|tj|j ft|ddd}|j|jWdQRXt j|j |_dS)NwbclosefdT)rZget_preparation_data_nameioBytesIOrZset_spawning_popenrdumprZconnect_to_new_processrsentinelrZFinalizeoscloseopenwrite getbuffer read_unsignedpid)r rZ prep_dataZbufwfr r r_launch*s  z Popen._launchc Cs|jdkrddlm}|tjkr4dnd}||jg|sSdSytj|j|_Wn!tt fk rd|_YnX|jS)Nr)wait) returncodeZmultiprocessing.connectionr-r#WNOHANGr"rr(OSErrorEOFError)r Zflagr-Ztimeoutr r rpoll:sz Popen.poll) rrrmethodr ZDupFdrrr,r#r0r3r r )rrr s   )rr#rZHAVE_SEND_HANDLE ImportErrorrrrrr__all__objectr r r r r rs      __pycache__/popen_forkserver.cpython-35.opt-2.pyc000064400000004740147554447510015757 0ustar00 ]@sddlZddlZddlmZejs=edddlmZddlmZddlmZddlm Z dd lm Z d gZ Gd d d e Z Gd d d ejZdS)N) reductionz,No support for sending fds between processes)context) forkserver) popen_fork)spawn)utilPopenc@s(eZdZddZddZdS)_DupFdcCs ||_dS)N)ind)selfr r 5/opt/alt/python35/lib64/python3.5/popen_forkserver.py__init__sz_DupFd.__init__cCstj|jS)N)rZget_inherited_fdsr )r r r rdetachsz _DupFd.detachN)__name__ __module__ __qualname__rrr r r rr s  r csXeZdZdZeZfddZddZddZe j dd Z S) r rcsg|_tj|dS)N)_fdssuperr)r process_obj) __class__r rr"s zPopen.__init__cCs!|jj|t|jdS)Nr)rappendlen)r fdr r rduplicate_for_child&szPopen.duplicate_for_childcCstj|j}tj}tj|z$tj||tj||WdtjdXt j |j \|_ }t j|tj|j ft|ddd}|j|jWdQRXt j|j |_dS)NwbclosefdT)rZget_preparation_data_nameioBytesIOrset_spawning_popenrdumprZconnect_to_new_processrsentinelrFinalizeoscloseopenwrite getbuffer read_unsignedpid)r rZ prep_databufwfr r r_launch*s  z Popen._launchc Cs|jdkrddlm}|tjkr4dnd}||jg|sSdSytj|j|_Wn!tt fk rd|_YnX|jS)Nr)wait) returncodemultiprocessing.connectionr0r%WNOHANGr#rr*OSErrorEOFError)r flagr0timeoutr r rpoll:sz Popen.poll) rrrmethodr DupFdrrr/r%r4r9r r )rrr s   )rr%rHAVE_SEND_HANDLE ImportErrorrrrrr__all__objectr r r r r rs      __pycache__/pool.cpython-35.opt-1.pyc000064400000053612147554447510013340 0ustar00 Yfd@sddgZddlZddlZddlZddlZddlZddlZddlZddlm Z ddlm Z m Z dZ dZ dZejZdd Zd d ZGd d d eZGdddZddZGdddeZdfddddZddZGdddeZGdddeZeZGdddeZGdddeZGd d!d!eZ Gd"ddeZ!dS)#Pool ThreadPoolN)util) get_context TimeoutErrorcCstt|S)N)listmap)argsr 9/opt/alt/python35/lib64/python3.5/multiprocessing/pool.pymapstar+srcCsttj|d|dS)Nrr)r itertoolsstarmap)r r r r starmapstar.src@s(eZdZddZddZdS)RemoteTracebackcCs ||_dS)N)tb)selfrr r r __init__6szRemoteTraceback.__init__cCs|jS)N)r)rr r r __str__8szRemoteTraceback.__str__N)__name__ __module__ __qualname__rrr r r r r5s  rc@s(eZdZddZddZdS)ExceptionWithTracebackcCsDtjt|||}dj|}||_d||_dS)Nz """ %s""") tracebackformat_exceptiontypejoinexcr)rr rr r r r<s zExceptionWithTraceback.__init__cCst|j|jffS)N) rebuild_excr r)rr r r __reduce__Asz!ExceptionWithTraceback.__reduce__N)rrrrr"r r r r r;s  rcCst||_|S)N)r __cause__)r rr r r r!Dsr!cs@eZdZdZfddZddZddZS)MaybeEncodingErrorzVWraps possible unpickleable errors, so they can be safely sent through the socket.csAt||_t||_tt|j|j|jdS)N)reprr valuesuperr$r)rr r&) __class__r r rPszMaybeEncodingError.__init__cCsd|j|jfS)Nz(Error sending result: '%s'. Reason: '%s')r&r )rr r r rUs zMaybeEncodingError.__str__cCsd|jj|fS)Nz<%s: %s>)r(r)rr r r __repr__YszMaybeEncodingError.__repr__)rrr__doc__rrr)r r )r(r r$Ls  r$Fc'Cs|j}|j}t|dr;|jj|jj|dk rQ||d}x|dksx|r||kry |} Wn&ttfk rtj dPYnX| dkrtj dP| \} } } } }yd| | |f}WnUt k rM}z5|r/| t k r/t ||j }d|f}WYdd}~XnXy|| | |fWnbt k r}zBt||d}tj d||| | d|ffWYdd}~XnXd} } }} } }|d7}qZWtj d |dS) N_writerrz)worker got EOFError or OSError -- exitingzworker got sentinel -- exitingTFrz0Possible encoding error while sending result: %szworker exiting after %d tasks)putgethasattrr+close_readerEOFErrorOSErrorrdebug Exception_helper_reraises_exceptionr __traceback__r$)inqueueoutqueue initializerinitargsZmaxtasksZwrap_exceptionr,r-Z completedtaskjobifuncr kwdsresultewrappedr r r worker]sD      !     ,rCcCs |dS)z@Pickle-able helper function for use by _guarded_task_generation.Nr )Zexr r r r5sr5c@seZdZdZdZddZddfddddZdd Zd d Zd d Z ddZ fiddZ dddZ dddZ dddddZddZdddZdddZfidddd Zdddd!d"Zdddd#d$Zed%d&Zed'd(Zed)d*Zed+d,Zd-d.Zd/d0Zd1d2Zd3d4Zed5d6Zed7d8Z d9d:Z!d;d<Z"dS)=rzS Class which supports an async version of applying functions to arguments. TcOs|jj||S)N)_ctxProcess)rr r?r r r rEsz Pool.ProcessNc Cs#|p t|_|jtj|_i|_t|_||_ ||_ ||_ |dkrvt j psd}|dkrtd|dk rt| rtd||_g|_|jtjdtjd|f|_d|j_t|j_|jjtjdtjd|j|j|j|j|jf|_d|j_t|j_|jjtjdtjd|j|j |jf|_!d|j!_t|j!_|j!jt"j#||j$d|j|j%|j|j|j|j|j!|jfdd|_&dS) Nrz&Number of processes must be at least 1zinitializer must be a callabletargetr TZ exitpriority)'rrD _setup_queuesqueueQueue _taskqueue_cacheRUN_state_maxtasksperchild _initializer _initargsos cpu_count ValueErrorcallable TypeError _processes_pool_repopulate_pool threadingZThreadr_handle_workers_worker_handlerdaemonstart _handle_tasks _quick_put _outqueue _task_handler_handle_results _quick_get_result_handlerrZFinalize_terminate_pool_inqueue _terminate)r processesr9r:Zmaxtasksperchildcontextr r r rsT                              z Pool.__init__cCswd}xjttt|jD]M}|j|}|jdk r"tjd||jd}|j|=q"W|S)zCleanup after any worker processes which have exited due to reaching their specified lifetime. Returns True if any workers were cleaned up. FNzcleaning up worker %dT)reversedrangelenrXexitcoderr3r)rZcleanedr=rCr r r _join_exited_workerss"  zPool._join_exited_workersc Csxt|jt|jD]}|jdtd|j|j|j|j |j |j f}|jj ||j jdd|_ d|_|jtjdqWdS)zBring the number of pool processes up to the specified number, for use after reaping workers which have exited. rFr rEZ PoolWorkerTz added workerN)rlrWrmrXrErCrgrarPrQrO_wrap_exceptionappendnamereplacer]r^rr3)rr=wr r r rYs#    zPool._repopulate_poolcCs|jr|jdS)zEClean up any exited workers and start replacements for them. N)rorY)rr r r _maintain_pools zPool._maintain_poolcCsL|jj|_|jj|_|jjj|_|jjj|_ dS)N) rDZ SimpleQueuergrar+sendr`r0recvrd)rr r r rHszPool._setup_queuescCs|j|||jS)z6 Equivalent of `func(*args, **kwds)`. ) apply_asyncr-)rr>r r?r r r applysz Pool.applycCs|j||t|jS)zx Apply `func` to each element in `iterable`, collecting the results in a list that is returned. ) _map_asyncrr-)rr>iterable chunksizer r r r szPool.mapcCs|j||t|jS)z Like `map()` method but the elements of the `iterable` are expected to be iterables as well and will be unpacked as arguments. Hence `func` and (a, b) becomes func(a, b). )rzrr-)rr>r{r|r r r r sz Pool.starmapcCs|j||t|||S)z= Asynchronous version of `starmap()` method. )rzr)rr>r{r|callbackerror_callbackr r r starmap_asyncszPool.starmap_asyncccsy>d}x1t|D]#\}}||||fifVqWWn@tk r}z ||dt|fifVWYdd}~XnXdS)zProvides a generator of tasks for imap and imap_unordered with appropriate handling for iterables which throw exceptions during iteration.rN) enumerater4r5)rZ result_jobr>r{r=xrAr r r _guarded_task_generations zPool._guarded_task_generationrcCs|jtkrtd|dkret|j}|jj|j|j|||j f|St j |||}t|j}|jj|j|jt ||j fdd|DSdS)zP Equivalent of `map()` -- can be MUCH slower than `Pool.map()`. zPool not runningrcss"|]}|D] }|Vq qdS)Nr ).0chunkitemr r r @szPool.imap..N) rNrMrT IMapIteratorrLrKr,r_job _set_lengthr _get_tasksr)rr>r{r|r@ task_batchesr r r imap's        z Pool.imapcCs|jtkrtd|dkret|j}|jj|j|j|||j f|St j |||}t|j}|jj|j|jt ||j fdd|DSdS)zL Like `imap()` method but ordering of results is arbitrary. zPool not runningrcss"|]}|D] }|Vq qdS)Nr )rrrr r r r[sz&Pool.imap_unordered..N) rNrMrTIMapUnorderedIteratorrLrKr,rrrrrr)rr>r{r|r@rr r r imap_unorderedBs        zPool.imap_unorderedcCs_|jtkrtdt|j||}|jj|jd|||fgdf|S)z; Asynchronous version of `apply()` method. zPool not runningrN)rNrMrT ApplyResultrLrKr,r)rr>r r?r}r~r@r r r rx]s  +zPool.apply_asynccCs|j||t|||S)z9 Asynchronous version of `map()` method. )rzr)rr>r{r|r}r~r r r map_asynchszPool.map_asyncc Cs|jtkrtdt|ds6t|}|dkrztt|t|jd\}}|rz|d7}t|dkrd}tj |||}t |j |t||d|} |j j |j| j||df| S)zY Helper function to implement map, starmap and their async counterparts. zPool not running__len__Nrrr~)rNrMrTr.r divmodrmrXrr MapResultrLrKr,rr) rr>r{Zmapperr|r}r~Zextrarr@r r r rzps&   (     zPool._map_asynccCsrtj}xB|jtks6|jrP|jtkrP|jtjdqW|j j dt j ddS)Ng?zworker handler exiting) rZcurrent_threadrNrMrL TERMINATErutimesleeprKr,rr3)poolthreadr r r r[s  * zPool._handle_workersc Cstj}x+t|jdD] \}}d}zx|D]}|jrXtjdPy||Wq;tk r} zN|dd\} } y|| j| d| fWnt k rYnXWYdd} ~ Xq;Xq;W|rtjd|r|dnd } || dwPWdd}}} XqWtjdyFtjd|j dtjdx|D]} |dqkWWnt k rtjd YnXtjd dS) Nz'task handler found thread._state != RUNrFzdoing set_length()rztask handler got sentinelz/task handler sending sentinel to result handlerz(task handler sending sentinel to workersz/task handler got OSError when sending sentinelsztask handler exitingr) rZriterr-rNrr3r4_setKeyErrorr,r2) taskqueuer,r8rcacherZtaskseqZ set_lengthr;rAr<idxpr r r r_sB            zPool._handle_taskscCs tj}xy |}Wn)ttfk rGtjddSYnX|jr_tjdP|dkrytjdP|\}}}y||j||Wntk rYnXd}}}qWx|r|jt kry |}Wn)ttfk rtjddSYnX|dkr4tjdq|\}}}y||j||Wntk roYnXd}}}qWt |drtjdy2x+t dD]}|j j sP|qWWnttfk rYnXtjdt||jdS) Nz.result handler got EOFError/OSError -- exitingz,result handler found thread._state=TERMINATEzresult handler got sentinelz&result handler ignoring extra sentinelr0z"ensuring that outqueue is not full z7result handler exiting: len(cache)=%s, thread._state=%s)rZrr2r1rr3rNrrrr.rlr0pollrm)r8r-rrr;r<r=objr r r rcsZ                 zPool._handle_resultsccsDt|}x1ttj||}|s1dS||fVqWdS)N)rtuplerislice)r>itsizerr r r rs  zPool._get_taskscCstddS)Nz:pool objects cannot be passed between processes or pickled)NotImplementedError)rr r r r"szPool.__reduce__cCs5tjd|jtkr1t|_t|j_dS)Nz closing pool)rr3rNrMCLOSEr\)rr r r r/s  z Pool.closecCs0tjdt|_t|j_|jdS)Nzterminating pool)rr3rrNr\rh)rr r r terminates   zPool.terminatecCsVtjd|jj|jj|jjx|jD]}|jq>WdS)Nz joining pool)rr3r\rrbrerX)rrr r r rs     z Pool.joincCsZtjd|jjx9|jrU|jjrU|jjtj dqWdS)Nz7removing tasks from inqueue until task handler finishedr) rr3Z_rlockacquireis_aliver0rrwrr)r7 task_handlerrr r r _help_stuff_finish(s    zPool._help_stuff_finishc Cstjdt|_t|_tjd|j||t|t|_|jdtjdtj|k r|j |rt |ddrtjdx'|D]} | j dkr| j qWtjdtj|k r|j tjdtj|k r&|j |rt |ddrtjd x8|D]0} | j rStjd | j| j qSWdS) Nzfinalizing poolz&helping task handler/workers to finishzjoining worker handlerrrzterminating workerszjoining task handlerzjoining result handlerzjoining pool workerszcleaning up worker %d)rr3rrNrrmr,rZrrr.rnrrpid) clsrr7r8rZworker_handlerrZresult_handlerrrr r r rf1s6                 zPool._terminate_poolcCs|S)Nr )rr r r __enter___szPool.__enter__cCs|jdS)N)r)rexc_typeZexc_valZexc_tbr r r __exit__bsz Pool.__exit__)#rrrr*rprErrorYrurHryr rrrrrrxrrz staticmethodr[r_rcrr"r/rrr classmethodrfrrr r r r rsF   8        .<     . c@s^eZdZddZddZddZddd Zdd d Zd d ZdS)rcCsJtj|_tt|_||_||_||_|||j s<             * &%@__pycache__/semaphore_tracker.cpython-35.opt-2.pyc000064400000006440147554447510016063 0ustar00 ]@sddlZddlZddlZddlZddlZddlZddlmZddlmZdddgZ Gdd d e Z e Z e j Z e jZe jZe jZd d ZdS) N)spawn)utilensure_runningregister unregisterc@sXeZdZddZddZddZddZd d Zd d Zd S)SemaphoreTrackercCstj|_d|_dS)N) threadingLock_lock_fd)selfr6/opt/alt/python35/lib64/python3.5/semaphore_tracker.py__init__szSemaphoreTracker.__init__cCs|j|jS)N)rr )r rrrgetfd!s zSemaphoreTracker.getfdcCs|j|jdk rdSg}y|jtjjWntk rQYnXd}tj\}}zyW|j|t j }|gt j }|d||g7}t j |||Wntj|Yn X||_Wdtj|XWdQRXdS)Nz;from multiprocessing.semaphore_tracker import main;main(%d)z-c)r r appendsysstderrfileno ExceptionospiperZget_executabler_args_from_interpreter_flagsspawnv_passfdsclose)r Z fds_to_passcmdrwZexeargsrrrr%s*      zSemaphoreTracker.ensure_runningcCs|jd|dS)NZREGISTER)_send)r namerrrrCszSemaphoreTracker.registercCs|jd|dS)NZ UNREGISTER)r )r r!rrrrGszSemaphoreTracker.unregistercCs\|jdj||jd}t|dkrCtdtj|j|}dS)Nz{0}:{1} asciiiz name too long)rformatencodelen ValueErrorrwriter )r rr!msgnbytesrrrr Ks   zSemaphoreTracker._sendN) __name__ __module__ __qualname__rrrrrr rrrrrs      rc-Cstjtjtjtjtjtjx=tjtjfD])}y|jWq?tk rgYq?Xq?Wt }zt |d}x|D]}yg|j j d\}}|dkr|j |n,|dkr|j|ntd|Wqtk r4ytjtjWnYnXYqXqWWdQRXWd|rzytjdt|Wntk ryYnXxu|D]m}zc|jd}ytj|Wn<tk r}ztjd||fWYdd}~XnXWdXqWXdS) Nrb:sREGISTERs UNREGISTERzunrecognized command %rzRsemaphore_tracker: There appear to be %d leaked semaphores to clean up at shutdownr"zsemaphore_tracker: %r: %s)signalSIGINTSIG_IGNSIGTERMrstdinstdoutrrsetopenstripsplitaddremove RuntimeError excepthookexc_infowarningswarnr%decode_multiprocessing sem_unlink)fdfcachelinerr!errrmain]sJ          .rH)rr/rr r>rArr__all__objectrZ_semaphore_trackerrrrrrHrrrrs      ;     __pycache__/popen_fork.cpython-35.opt-2.pyc000064400000004413147554447510014525 0ustar00 ] @sWddlZddlZddlZddlmZdgZGdddeZdS)N)utilPopenc@sgeZdZdZddZddZejddZdd d Z d d Z d dZ dS)rforkcCs4tjjtjjd|_|j|dS)N)sysstdoutflushstderr returncode_launch)self process_objr//opt/alt/python35/lib64/python3.5/popen_fork.py__init__s   zPopen.__init__cCs|S)Nr)r fdrrrduplicate_for_childszPopen.duplicate_for_childcCs|jdkrxPytj|j|\}}Wn)tk r\}z dSWYdd}~XqXPqW||jkrtj|rtj| |_ntj||_|jS)N)r oswaitpidpidOSError WIFSIGNALEDWTERMSIG WEXITSTATUS)r flagrstserrrpollsz Popen.pollNcCsm|jdkrf|dk rDddlm}||jg|sDdS|j|dkr_tjndS|jS)Nr)waitg)r multiprocessing.connectionrsentinelrrWNOHANG)r timeoutrrrrr,s "z Popen.waitc Csn|jdkrjytj|jtjWn>tk r=Yn-tk ri|jdddkreYnXdS)Nr"g?) r rkillrsignalSIGTERMProcessLookupErrorrr)r rrr terminate6s  zPopen.terminatec Csd}tj\}}tj|_|jdkrzBtj|dtjkrkddl}|j|j }Wdtj |Xn/tj|t j |tj|f||_ dS)Nrrrandom)rpiperrclosermodulesr(seed _bootstrap_exitrFinalizer )r r codeZparent_rZchild_wr(rrrr @s    z Popen._launch) __name__ __module__ __qualname__methodrrrr!rrr'r rrrrr s    )rrr$r__all__objectrrrrrs    __pycache__/util.cpython-35.opt-1.pyc000064400000024010147554447510013332 0ustar00 Yfy-@sTddlZddlZddlZddlZddlZddlZddlmZddlm Z ddddd d d d d ddddddgZ dZ dZ dZ dZdZdZdZdadaddZddZddZddZdd Zdd d Zd!d ZejZejZd"d#Zd$d Z iZ!ejZ"Gd%dde#Z$dd&d'Z%d(d Z&da'eee%e j(e j)d)d*Z*ej+e*Gd+dde#Z,Gd,ddej-Z.yej/d-Z0Wne1k r+d.Z0YnXd/dZ2d0d1Z3d2d3Z4dS)4N)_args_from_interpreter_flags)process sub_debugdebuginfo sub_warning get_logger log_to_stderr get_temp_dirregister_after_fork is_exitingFinalizeForkAwareThreadLockForkAwareLocalclose_all_fds_exceptSUBDEBUG SUBWARNING Zmultiprocessingz+[%(levelname)s/%(processName)s] %(message)sFcGstrtjt||dS)N)_loggerlogr)msgargsr9/opt/alt/python35/lib64/python3.5/multiprocessing/util.pyr,scGstrtjt||dS)N)rrDEBUG)rrrrrr0scGstrtjt||dS)N)rrINFO)rrrrrr4scGstrtjt||dS)N)rrr)rrrrrr8sc Csddl}|jzts|jtadt_ttdrctjt tj t n2tj j t fiftj j t fifWd|jXtS)z0 Returns logger used by multiprocessing rN unregister)loggingZ _acquireLockrZ getLogger LOGGER_NAMEZ propagatehasattratexitr _exit_functionregisterZ _exithandlersremoveappendZ _releaseLock)r!rrrr <s     cCsgddl}t}|jt}|j}|j||j||r]|j|dat S)zB Turn on logging and add a handler which prints to stderr rNT) r!r Z FormatterDEFAULT_LOGGING_FORMATZ StreamHandlerZ setFormatterZ addHandlerZsetLevel_log_to_stderrr)levelr!ZloggerZ formatterZhandlerrrrr Ws      cCstjjjd}|dkrddl}ddl}|jdd}td|td|j d|gdd |tjjd<|S) Ntempdirrprefixzpymp-zcreated temp directory %sr exitprioritydi) rcurrent_processZ_configgetshutiltempfileZmkdtemprrZrmtree)r,r2r3rrrr ms  cCsttj}|jx`|D]X\\}}}}y||Wq#tk rz}ztd|WYdd}~Xq#Xq#WdS)Nz after forker raised exception %s)list_afterfork_registryitemssort Exceptionr)r6indexZidentfuncobjerrr_run_after_forkerss r=cCs#|tttt||f_finalizer_counter_keyosgetpid_pid_finalizer_registry)selfr;callbackrkwargsr.rrr__init__s   zFinalize.__init__c Csy||j=Wntk r,|dYnX|j|krR|dd}n4|d|j|j|j|j|j|j}d|_|_|_|_|_|SdS)zQ Run the callback unless it has already been called or cancelled zfinalizer no longer registeredz+finalizer ignored because different processNz/finalizer calling %s with args %s and kwargs %s)rHKeyErrorrKrDrErFrC)rMwrrLrrJresrrr__call__s   %zFinalize.__call__c CsLyt|j=Wntk r"Yn&Xd|_|_|_|_|_dS)z3 Cancel finalization of the object N)rLrHrQrCrDrErF)rMrrrcancels  zFinalize.cancelcCs |jtkS)zS Return whether this finalizer is still waiting to invoke callback )rHrL)rMrrr still_activeszFinalize.still_activecCsy|j}Wnttfk r0d}YnX|dkrKd|jjSd|jjt|jd|jf}|jr|dt|j7}|j r|dt|j 7}|j ddk r|dt|j d7}|dS) Nz<%s object, dead>z<%s object, callback=%s__name__z, args=z , kwargs=rz, exitprority=>) rCAttributeError TypeError __class__rWgetattrrDrEstrrFrH)rMr;xrrr__repr__s      zFinalize.__repr__) rW __module__ __qualname____doc__rPrLrrIrJrTrUrVr_rrrrrs  c stdkrdSdkr+ddnfddfddttD}|jddxl|D]d}tj|}|dk rstd |y |Wqstk rd dl}|jYqsXqsWdkrtjdS) z Run all finalizers whose exit priority is not None and at least minpriority Finalizers with highest priority are called first; finalizers with the same priority will be called in reverse order of creation. NcSs|ddk S)Nrr)prrrsz!_run_finalizers..cs|ddk o|dkS)Nrr)rc) minpriorityrrrdscs"g|]}|r|qSrr).0key)frr s z#_run_finalizers..reverseTz calling %sr) rLr4r7r1rr8 traceback print_excclear)rekeysrgZ finalizerrkr)rhrer_run_finalizerss$         rocCstptdkS)z6 Returns true if the process is shutting down N)_exitingrrrrr scCstsda|d|d|d|dk rx7|D],}|jrC|d|j|jjqCWx+|D] }|d|j|jq}W|d|dS)NTzprocess shutting downz2running all "atexit" finalizers with priority >= 0rz!calling terminate() for daemon %szcalling join() for process %sz)running the remaining "atexit" finalizers)rpZdaemonnameZ_popenZ terminatejoin)rrroactive_childrenr0rcrrrr%s      r%c@s@eZdZddZddZddZddZd S) rcCs|jt|tjdS)N)_resetr r)rMrrrrPKs zForkAwareThreadLock.__init__cCs1tj|_|jj|_|jj|_dS)N) threadingZLock_lockacquirerelease)rMrrrrtOszForkAwareThreadLock._resetcCs |jjS)N)rv __enter__)rMrrrryTszForkAwareThreadLock.__enter__cGs|jj|S)N)rv__exit__)rMrrrrrzWszForkAwareThreadLock.__exit__N)rWr`rarPrtryrzrrrrrJs    c@s(eZdZddZddZdS)rcCst|dddS)NcSs |jjS)N)__dict__rm)r;rrrrd]sz)ForkAwareLocal.__init__..)r )rMrrrrP\szForkAwareLocal.__init__cCst|ffS)N)type)rMrrr __reduce__^szForkAwareLocal.__reduce__N)rWr`rarPr}rrrrr[s   SC_OPEN_MAXcCset|dtg}|jx>tt|dD]&}tj||d||dq7WdS)Nr)r4MAXFDr7rangelenrI closerange)Zfdsirrrrjs cCstjdkrdSytjjWnttfk r>YnXyPtjtjtj}yt|ddt_Wntj|YnXWnttfk rYnXdS)NclosefdF) sysstdincloseOSError ValueErrorrIopendevnullO_RDONLY)fdrrr _close_stdints  rcCsddl}tttt|}tj\}}zM|j|tj|gd|ddddddd d ||dddSWdtj |tj |XdS) NrTrFrrrrrr) _posixsubprocesstuplesortedmapintrIpipeZ fork_execfsencoder)pathrZpassfdsrZ errpipe_readZ errpipe_writerrrspawnv_passfdss  r)5rI itertoolsrrAr$ru subprocessrr__all__ZNOTSETrrrrr"r)rr*rrrrr r r WeakValueDictionaryr5countr?r=r rLrGobjectrror rprsr0r%r&rZlocalrsysconfrr8rrrrrrr sd                  S,  (     __pycache__/connection.cpython-35.pyc000064400000065063147554447510013572 0ustar00 Yfx @sIddddgZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z dd l m Z mZdd l mZy2ddlZdd lmZmZmZmZWn*ek r"ejd krdZYnXd ZdZejZdZdgZeedrldZedg7Zejd krdZedg7ZeddZddZddZ ddZ!ddZ"GdddZ#erGddde#Z$Gd d!d!e#Z%Gd"dde&Z'ddd#dZ(ejd kr[d$d%dZ)nd$d&dZ)Gd'd(d(e&Z*d)d*Z+ejd krGd+d,d,e&Z,d-d.Z-d/Z.d0Z/d1Z0d2Z1d3d4Z2d5d6Z3Gd7d8d8e&Z4d9d:Z5d;d<Z6Gd=d>d>e'Z7d?d@Z8ejd kr|dAdBZ9ej:ej;hZ<ddCdZ=n?ddl>Z>ee>dDre>j?Z@n e>jAZ@ddEdZ=ejd krdFdGZBdHdIZCe jDe%eBdJdKZEdLdMZFe jDe$eEn(dNdGZBdOdIZCe jDe%eBdS)PClientListenerPipewaitN) reduction)util)AuthenticationErrorBufferTooShort)ForkingPickler) WAIT_OBJECT_0WAIT_ABANDONED_0 WAIT_TIMEOUTINFINITEwin32i g4@AF_INETAF_UNIXAF_PIPEcCstj|S)N)time)timeoutr?/opt/alt/python35/lib64/python3.5/multiprocessing/connection.py _init_timeout;srcCstj|kS)N)r)trrr_check_timeout>srcCs|dkrd S|dkr8tjdddtjS|dkrptjdd tjttfdd Std d S)z? Return an arbitrary free address for the given family r localhostrrprefixz listener-dirrz\\.\pipe\pyc-%d-%d-zunrecognized familyN)rr) tempfileZmktemprZ get_temp_dirosgetpidnext _mmap_counter ValueError)familyrrrarbitrary_addressEs     r&cCsitjdkr+|dkr+td|tjdkre|dkrett|setd|dS)zD Checks if the family is valid for the current environment. rrzFamily %s is not recognized.rN)sysplatformr$hasattrsocket)r%rrr_validate_familySs r+cCset|tkrdSt|tkr;|jdr;dSt|tkrQdStd|dS)z] Return the types of the address This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE' rz\\rrzaddress type of %r unrecognizedN)typetuplestr startswithr$)addressrrr address_type_s!r1c@s!eZdZdZddddZddZddZd d Zd d Zd dZ e ddZ e ddZ e ddZ ddZddZddddZddZdddZdd d!Zd"d#Zd$d%d&Zd'd(Zd)d*ZdS)+_ConnectionBaseNTcCs]|j}|dkr$td| r>| r>td||_||_||_dS)Nrzinvalid handlez6at least one of `readable` and `writable` must be True) __index__r$_handle _readable _writable)selfhandlereadablewritablerrr__init__us      z_ConnectionBase.__init__cCs|jdk r|jdS)N)r4_close)r7rrr__del__sz_ConnectionBase.__del__cCs|jdkrtddS)Nzhandle is closed)r4OSError)r7rrr _check_closedsz_ConnectionBase._check_closedcCs|jstddS)Nzconnection is write-only)r5r>)r7rrr_check_readables z_ConnectionBase._check_readablecCs|jstddS)Nzconnection is read-only)r6r>)r7rrr_check_writables z_ConnectionBase._check_writablecCs/|jrd|_n |jtddS)NFzbad message length)r6r5closer>)r7rrr_bad_message_lengths   z#_ConnectionBase._bad_message_lengthcCs |jdkS)z True if the connection is closedN)r4)r7rrrclosedsz_ConnectionBase.closedcCs|jS)z"True if the connection is readable)r5)r7rrrr9sz_ConnectionBase.readablecCs|jS)z"True if the connection is writable)r6)r7rrrr:sz_ConnectionBase.writablecCs|j|jS)z+File descriptor or handle of the connection)r?r4)r7rrrfilenos z_ConnectionBase.filenoc Cs.|jdk r*z|jWdd|_XdS)zClose the connectionN)r4r<)r7rrrrBsz_ConnectionBase.closercCs|j|jt|}|jdkrAtt|}t|}|dkretd||kr}td|dkr||}n7|dkrtdn|||krtd|j||||dS)z,Send the bytes data from a bytes-like objectrrzoffset is negativezbuffer length < offsetNzsize is negativezbuffer length < offset + size)r?rA memoryviewitemsizebyteslenr$ _send_bytes)r7bufoffsetsizemnrrr send_bytess"            z_ConnectionBase.send_bytescCs.|j|j|jtj|dS)zSend a (picklable) objectN)r?rArJr dumps)r7objrrrsends  z_ConnectionBase.sendcCsg|j|j|dk r8|dkr8td|j|}|dkr]|j|jS)z7 Receive bytes data as a bytes object. Nrznegative maxlength)r?r@r$ _recv_bytesrCgetvalue)r7Z maxlengthrKrrr recv_bytess     z_ConnectionBase.recv_bytesc Cs|j|jt|}|j}|t|}|dkrWtdn||krotd|j}|j}|||krt|j |j d|j |||||||SWdQRXdS)zq Receive bytes data into a writeable bytes-like object. Return the number of bytes read. rznegative offsetzoffset too largeN) r?r@rFrGrIr$rTtellr rUseekreadinto)r7rKrLrNrGZbytesizeresultrMrrrrecv_bytes_intos"         z_ConnectionBase.recv_bytes_intocCs3|j|j|j}tj|jS)zReceive a (picklable) object)r?r@rTr loads getbuffer)r7rKrrrrecvs   z_ConnectionBase.recvgcCs!|j|j|j|S)z/Whether there is any input available to be read)r?r@_poll)r7rrrrpolls  z_ConnectionBase.pollcCs|S)Nr)r7rrr __enter__sz_ConnectionBase.__enter__cCs|jdS)N)rB)r7exc_type exc_valueexc_tbrrr__exit__sz_ConnectionBase.__exit__)__name__ __module__ __qualname__r4r;r=r?r@rArCpropertyrDr9r:rErBrPrSrVr[r^r`rarerrrrr2rs(            r2c@saeZdZdZdZejddZddZddd Z d d Z d d Z dS)PipeConnectionz Connection class based on a Windows named pipe. Overlapped I/O is used, so the handles must have been created with FILE_FLAG_OVERLAPPED. FcCs||jdS)N)r4)r7Z _CloseHandlerrrr<szPipeConnection._closecCstj|j|dd\}}z\y@|tjkrctj|jgdt}|tksctWn|j YnXWd|j d\}}X|dkst|t |kstdS)N overlappedTFr) _winapiZ WriteFiler4ERROR_IO_PENDINGWaitForMultipleObjectseventrr AssertionErrorcancelGetOverlappedResultrI)r7rKoverrwaitresZnwrittenrrrrJs!  zPipeConnection._send_bytesNc Cs{|jrd|_tjS|dkr.dn t|d}ytj|j|dd\}}z\y@|tjkrtj|j gdt }|t kst Wn|j YnXWd|jd\}}|dkrtj}|j|j|S|tjkr#|j||SXWnCtk rj}z#|jtjkrUtnWYdd}~XnXtddS)NFrkTrz.shouldn't get here; expected KeyboardInterrupt)_got_empty_messageioBytesIOminrlReadFiler4rmrnrorr rprqrrwriter]ZERROR_MORE_DATA_get_more_datar>winerrorERROR_BROKEN_PIPEEOFError RuntimeError) r7maxsizeZbsizersrtruZnreadferrrrT&s6   !     zPipeConnection._recv_bytescCs?|js%tj|jddkr)dStt|g|S)NrT)rwrl PeekNamedPiper4boolr)r7rrrrr_Fs zPipeConnection._pollcCs|j}tj}|j|tj|jd}|dksMt|dk ryt|||kry|j tj |j|dd\}}|j d\}}|dkst||kst|j|j|S)NrrrkT) r]rxryr|rlrr4rprIrCr{rr)r7rsrrKrleftrtZrbytesrrrr}Ls   " !zPipeConnection._get_more_data) rfrgrh__doc__rwrl CloseHandler<rJrTr_r}rrrrrj s   rjc@seZdZdZer?ejddZejZ ej Z n$e j ddZe jZ e jZ e ddZe ddZd d Zd d d ZddZd S) Connectionzo Connection class based on an arbitrary file descriptor (Unix only), or a socket handle (Windows). cCs||jdS)N)r4)r7r<rrrr<cszConnection._closecCs||jdS)N)r4)r7r<rrrr<hscCsPt|}x=||j|}||8}|dkr8P||d}qWdS)Nr)rIr4)r7rKr| remainingrOrrr_sendms   zConnection._sendcCstj}|j}|}xo|dkr|||}t|}|dkrr||krftn td|j|||8}qW|S)Nrzgot end of file during message)rxryr4rIrr>r|)r7rMreadrKr8rchunkrOrrr_recvvs        zConnection._recvcCs\t|}tjd|}|dkrG|j||j|n|j||dS)Nz!ii@)rIstructZpackr)r7rKrOheaderrrrrJs    zConnection._send_bytesNcCsS|jd}tjd|j\}|dk rF||krFdS|j|S)Nz!i)rrZunpackrU)r7rrKrMrrrrTs zConnection._recv_bytescCst|g|}t|S)N)rr)r7rrrrrr_szConnection._poll)rfrgrhrrl_multiprocessingZ closesocketr<rSZ_writer^Z_readr rBr|rrrrJrTr_rrrrr\s       rc@seZdZdZddddddZddZdd Zed d Zed d Z d dZ ddZ dS)rz Returns a listener object. This is a wrapper for a bound socket which is 'listening' for connections, or for a Windows named pipe. NrcCs|p|rt|pt}|p-t|}t||dkr[t|||_nt||||_|dk rt|t rt d||_ dS)Nrzauthkey should be a byte string) r1default_familyr&r+ PipeListener _listenerSocketListener isinstancerH TypeError_authkey)r7r0r%backlogauthkeyrrrr;s   zListener.__init__cCsW|jdkrtd|jj}|jrSt||jt||j|S)zz Accept a connection on the bound socket or named pipe of `self`. Returns a `Connection` object. Nzlistener is closed)rr>acceptrdeliver_challengeanswer_challenge)r7crrrrs  zListener.acceptcCs,|j}|dk r(d|_|jdS)zA Close the bound socket or named pipe of `self`. N)rrB)r7ZlistenerrrrrBs   zListener.closecCs |jjS)N)r_address)r7rrrszListener.cCs |jjS)N)r_last_accepted)r7rrrrscCs|S)Nr)r7rrrraszListener.__enter__cCs|jdS)N)rB)r7rbrcrdrrrreszListener.__exit__) rfrgrhrr;rrBrir0Z last_acceptedrarerrrrrs    cCs|pt|}t||dkr7t|}n t|}|dk rkt|t rktd|dk rt||t|||S)z= Returns a connection to the address of a `Listener` rNzauthkey should be a byte string) r1r+ PipeClient SocketClientrrHrrr)r0r%rrrrrrs       TcCs|rYtj\}}|jd|jdt|j}t|j}n6tj\}}t|dd}t|dd}||fS)zL Returns pair of connection objects at either end of a pipe Tr:Fr9)r*Z socketpair setblockingrdetachr pipe)duplexs1s2c1c2Zfd1Zfd2rrrrs  c CsStd}|r;tj}tjtjB}tt}}ntj}tj}dt}}tj||tjBtj Btj tj Btj Bd||tj tj}tj||dtjtjtjtj}tj|tj ddtj|dd}|jd\} } | dks%tt|d|} t|d|} | | fS) zL Returns pair of connection objects at either end of a pipe rrrNrkTr:r9)r&rlPIPE_ACCESS_DUPLEX GENERIC_READ GENERIC_WRITEBUFSIZEZPIPE_ACCESS_INBOUNDCreateNamedPipeFILE_FLAG_OVERLAPPEDFILE_FLAG_FIRST_PIPE_INSTANCEPIPE_TYPE_MESSAGEPIPE_READMODE_MESSAGE PIPE_WAITNMPWAIT_WAIT_FOREVERNULL CreateFile OPEN_EXISTINGSetNamedPipeHandleStateConnectNamedPiperrrprj) rr0ZopenmodeaccessZobsizeZibsizeZh1Zh2rk_rtrrrrrrs4        c@s=eZdZdZdddZddZddZd S) rzO Representation of a socket which is bound to an address and listening rcCstjtt||_yqtjdkrI|jjtjtjd|jjd|jj ||jj ||jj |_ Wn"t k r|jjYnX||_d|_|dkrtj|tjd|fdd|_n d|_dS)NposixrTrargs exitpriorityr)r*getattr_socketr nameZ setsockoptZ SOL_SOCKETZ SO_REUSEADDRrZbindZlistenZ getsocknamerr>rBZ_familyrrFinalizeunlink_unlink)r7r0r%rrrrr;8s$      $zSocketListener.__init__cCs5|jj\}|_|jdt|jS)NT)rrrrrr)r7srrrrPs zSocketListener.acceptc Cs>z|jjWd|j}|dk r9d|_|XdS)N)rrBr)r7rrrrrBUs    zSocketListener.closeN)rfrgrhrr;rrBrrrrr4s  rc Cs\t|}tjtt|1}|jd|j|t|jSWdQRXdS)zO Return a connection object connected to the socket given by `address` TN)r1r*rrZconnectrr)r0r%rrrrr_s    rc@sReZdZdZdddZdddZdd Zed d ZdS) rz0 Representation of a named pipe NcCsq||_|jddg|_d|_tjd|jtj|tjd|j|jfdd|_ dS)NfirstTz listener created with address=%rrrr) r _new_handle _handle_queuerr sub_debugrr_finalize_pipe_listenerrB)r7r0rrrrr;ss   zPipeListener.__init__Fc CsbtjtjB}|r#|tjO}tj|j|tjtjBtjBtj t t tj tj S)N) rlrrrrrrrrZPIPE_UNLIMITED_INSTANCESrrr)r7rflagsrrrr~s    zPipeListener._new_handlecCs|jj|j|jjd}ytj|dd}Wn:tk r}}z|jtjkrkWYdd}~XntXzHytj |j gdt }Wn"|j tj |YnXWd|jd\}}|dkstXt|S)NrrkTF)rappendrpoprlrr>r~Z ERROR_NO_DATArnrorrqrrrrprj)r7r8rsrresrrtrrrrs"   zPipeListener.acceptcCs2tjd|x|D]}tj|qWdS)Nz closing listener with address=%r)rrrlr)Zqueuer0r8rrrrs z$PipeListener._finalize_pipe_listener) rfrgrhrr;rr staticmethodrrrrrros   rcCst}xyKtj|dtj|tjtjBdtjtjtjtj}WnOt k r}z/|j tj tj fkst |rWYdd}~Xq XPq Wtj|tjddt|S)zU Return a connection object connected to the pipe given by `address` irN)rrlZ WaitNamedPiperrrrrrr>r~ZERROR_SEM_TIMEOUTZERROR_PIPE_BUSYrrrrj)r0rhrrrrrs"  rs #CHALLENGE#s #WELCOME#s #FAILURE#cCsddl}t|ts!ttjt}|jt||j ||dj }|j d}||kr|jt n|jt tddS)Nrmd5zdigest received was wrong)hmacrrHrpr urandomMESSAGE_LENGTHrP CHALLENGEnewdigestrVWELCOMEFAILUREr ) connectionrrmessagerresponserrrrs   rcCsddl}t|ts!t|jd}|dtttks\td||ttd}|j||dj}|j ||jd}|t krt ddS)Nrrz message = %rrzdigest sent was rejected) rrrHrprVrIrrrrPrr )rrrrrrrrrrs ,  rc@s4eZdZddZddZddZdS)ConnectionWrappercCsO||_||_||_x-dD]%}t||}t|||q"WdS)NrErBr`rVrP)rErBr`rVrP)_conn_dumps_loadsrsetattr)r7connrQr\attrrRrrrr;s     zConnectionWrapper.__init__cCs#|j|}|jj|dS)N)rrrP)r7rRrrrrrSszConnectionWrapper.sendcCs|jj}|j|S)N)rrVr)r7rrrrr^szConnectionWrapper.recvN)rfrgrhr;rSr^rrrrrs   rcCs%tj|fddddjdS)Nrzutf-8) xmlrpclibrQencode)rRrrr _xml_dumpssrcCs%tj|jd\\}}|S)Nzutf-8)rr\decode)rrRmethodrrr _xml_loadss!rc@seZdZddZdS) XmlListenercCs.ddljatj|}t|ttS)Nr) xmlrpc.clientclientrrrrrr)r7rRrrrrszXmlListener.acceptN)rfrgrhrrrrrrs rcOs(ddljatt||ttS)Nr)rrrrrrr)rkwdsrrr XmlClientsrcCst|}g}x|rtj|d|}|tkr@Pnrt|koatt|knrs|t8}n?t|kott|knr|t8}n td|j||||dd}d}qW|S)NFzShould not get hererr) listrlrnrr rIr rr)ZhandlesrLreadyrrrr_exhaustive_waits   & &   rc .s |dkrt}n)|dkr*d}nt|dd}t|}ig}tt}zxy|D]q}yt|d}Wn"tk r||jrszwait..cs"g|]}|kr|qSrr)ro) ready_objectsrr ss zwait..)rr)rintrsetrAttributeErrorr3rlr{r>r~ _ready_errorsrmrror'Zgetwindowsversionrrr)rwaddrkeysrqZERROR_OPERATION_ABORTEDupdate) object_listrZov_listZ ready_handlesrrErsrtrrr)rrrr'sh         "  "            PollSelectorc Cst}x!|D]}|j|tjqW|dk rLtj|}xV|j|}|rudd|DS|dk rO|tj}|dkrO|SqOWWdQRXdS)z Wait till an object in object_list is ready/readable. Returns list of those objects in object_list which are ready/readable. NcSsg|]\}}|jqSr)Zfileobj)rkeyZeventsrrrrs zwait..r) _WaitSelectorregister selectorsZ EVENT_READrZselect)r rZselectorrRZdeadlinerrrrrs     c Csm|j}tj|tjtj?}ddlm}|j|}t||j |j ffSWdQRXdS)Nr)resource_sharer) rEr*ZfromfdrZ SOCK_STREAMrrZ DupSocketrebuild_connectionr9r:)rr8rrdsrrrreduce_connections  rcCs"|j}t|j||S)N)rr)rr9r:Zsockrrrrs rcCs_|jrtjnd|jr'tjndB}tj|j|}t||j|jffS)Nr) r9rlZFILE_GENERIC_READr:ZFILE_GENERIC_WRITErZ DupHandlerErebuild_pipe_connection)rrdhrrrreduce_pipe_connectionsrcCs|j}t|||S)N)rrj)rr9r:r8rrrrs rcCs.tj|j}t||j|jffS)N)rZDupFdrErr9r:)rdfrrrrscCs|j}t|||S)N)rr)rr9r:fdrrrrs )G__all__rxr r'r*rrr itertoolsrrrrr r r rlr r rr ImportErrorr(rZCONNECTION_TIMEOUTcountr#rZfamiliesr)rrr&r+r1r2rjrobjectrrrrrrrrrrrrrrrrrrrrZERROR_NETNAME_DELETEDrrrr r ZSelectSelectorrrr rrrrrr s          &         PJ8,+ 8      P         __pycache__/synchronize.cpython-35.opt-2.pyc000064400000027242147554447510014743 0ustar00 ]/ @sddddddgZddlZddlZddlZddlZddlmZd d lmZd d lm Z d d lm Z ydd lm Z m Z Wn*e k re ddddYnXeed\ZZej jZGdddeZ Gddde ZGdddeZGddde ZGddde ZGdddeZGdddeZGdddejZdS)LockRLock SemaphoreBoundedSemaphore ConditionEventN)time)context)process)util)SemLock sem_unlinkz*This platform lacks a functioning sem_openz( implementation, therefore, the requiredz+ synchronization primitives needed will notz function, see issue 3770.c@seZdZejZddZeddZddZ ddZ d d Z d d Z d dZ eddZdS)r c CsK|dkrtjj}|j}tjdkp?|dk}xbtdD]H}y,tj||||j |}|_ Wnt k rYqOXPqOWt dt j d|j|jtjdkrdd} t j|| |j jdk rGdd lm} | |j jt j|tj|j jfd d dS) Nwin32forkdzcannot find name for semaphorezcreated semlock with handle %scSs|jjdS)N)_semlock _after_fork)objr0/opt/alt/python35/lib64/python3.5/synchronize.pyrHsz%SemLock.__init__.._after_forkr )register exitpriorityr)r _default_context get_contextget_start_methodsysplatformrange_multiprocessingr _make_namerFileExistsErrorr debughandle _make_methodsregister_after_forknamesemaphore_trackerrFinalize_cleanup) selfkindvaluemaxvaluectxr'Z unlink_nowislrrrrr__init__3s.      zSemLock.__init__cCs(ddlm}t|||dS)Nr ) unregister)r(r3r)r'r3rrrr*Us zSemLock._cleanupcCs"|jj|_|jj|_dS)N)racquirerelease)r+rrrr%[szSemLock._make_methodscCs |jjS)N)r __enter__)r+rrrr6_szSemLock.__enter__cGs|jj|S)N)r__exit__)r+argsrrrr7bszSemLock.__exit__cCsbtj||j}tjdkr@tjj|j}n |j}||j|j |j fS)Nr) r assert_spawningrrrget_spawning_popenduplicate_for_childr$r,r.r')r+r1hrrr __getstate__es    zSemLock.__getstate__cCs8tjj||_tjd|d|jdS)Nz recreated blocker with handle %rr)r r _rebuildrr r#r%)r+staterrr __setstate__nszSemLock.__setstate__cCs$dtjjdttjfS)Nz%s-%s semprefix)r current_process_confignextr _randrrrrr!sszSemLock._make_nameN)__name__ __module__ __qualname__tempfile_RandomNameSequencerEr2 staticmethodr*r%r6r7r=r@r!rrrrr /s   "    r c@s7eZdZdddZddZddZdS) rr cCs tj|t|td|dS)Nr/)r r2 SEMAPHORE SEM_VALUE_MAX)r+r-r/rrrr2~szSemaphore.__init__cCs |jjS)N)r _get_value)r+rrr get_valueszSemaphore.get_valuec CsBy|jj}Wntk r-d}YnXd|jj|fS)Nunknownz<%s(value=%s)>)rrN Exception __class__rF)r+r-rrr__repr__s   zSemaphore.__repr__N)rFrGrHr2rOrSrrrrr|s  c@s+eZdZdddZddZdS)rr cCs tj|t||d|dS)Nr/)r r2rL)r+r-r/rrrr2szBoundedSemaphore.__init__c CsKy|jj}Wntk r-d}YnXd|jj||jjfS)NrPz<%s(value=%s, maxvalue=%s)>)rrNrQrRrFr.)r+r-rrrrSs   zBoundedSemaphore.__repr__N)rFrGrHr2rSrrrrrs c@s(eZdZddZddZdS)rcCs tj|tddd|dS)Nr r/)r r2rL)r+r/rrrr2sz Lock.__init__c Csy|jjrPtjj}tjjdkr|dtjj7}nB|jjdkrnd}n$|jjdkrd}nd}Wnt k rd}YnXd |j j |fS) N MainThread|r NonerSomeOtherThreadSomeOtherProcessrPz<%s(owner=%s)>) r_is_miner rBr' threadingcurrent_threadrN_countrQrRrF)r+r'rrrrSs     z Lock.__repr__N)rFrGrHr2rSrrrrrs  c@s(eZdZddZddZdS)rcCs tj|tddd|dS)Nr r/)r r2RECURSIVE_MUTEX)r+r/rrrr2szRLock.__init__c Csy|jjr_tjj}tjjdkrM|dtjj7}|jj}nT|jjdkrd \}}n0|jjdkrd \}}n d \}}Wnt k rd\}}YnXd |j j ||fS)NrTrUr rVrrWnonzerorXrPz <%s(%s, %s)>)rVr)rWr^)rXr^)rPrP) rrYr rBr'rZr[r\rNrQrRrF)r+r'countrrrrSs zRLock.__repr__N)rFrGrHr2rSrrrrrs  c@seZdZdddZddZddZdd Zd d Zd d ZddZ dddZ ddZ ddZ dddZ dS)rNcCsY|p|j|_|jd|_|jd|_|jd|_|jdS)Nr)r_lockr_sleeping_count _woken_count_wait_semaphorer%)r+lockr/rrrr2s zCondition.__init__cCs)tj||j|j|j|jfS)N)r r9r`rarbrc)r+rrrr=s  zCondition.__getstate__cCs,|\|_|_|_|_|jdS)N)r`rarbrcr%)r+r?rrrr@szCondition.__setstate__cCs |jjS)N)r`r6)r+rrrr6szCondition.__enter__cGs|jj|S)N)r`r7)r+r8rrrr7szCondition.__exit__cCs"|jj|_|jj|_dS)N)r`r4r5)r+rrrr%szCondition._make_methodsc Cs[y&|jjj|jjj}Wntk r@d}YnXd|jj|j|fS)NrPz <%s(%s, %s)>)rarrNrbrQrRrFr`)r+Z num_waitersrrrrSs   zCondition.__repr__c Cs|jj|jjj}x!t|D]}|jjq,Wz|jjd|SWd|jjx!t|D]}|jjqwWXdS)NT) rar5r`rr\rrcr4rb)r+timeoutr_r0rrrwaits  zCondition.waitcCskx(|jjdr*|jjd}qW|jjdrg|jj|jj|jjddS)NF)rbr4rarcr5)r+resrrrnotifys  zCondition.notifycCsx(|jjdr*|jjd}qWd}x-|jjdr`|jj|d7}q4W|rx!t|D]}|jjqtWx|jjdrqWdS)NFrr )rbr4rarcr5r)r+rgZsleepersr0rrr notify_all s zCondition.notify_allcCs|}|r|S|dk r/t|}n d}d}xF|s|dk rj|t}|dkrjP|j||}q>W|S)Nr)_timerf)r+ predicatereresultendtimewaittimerrrwait_for7s        zCondition.wait_for)rFrGrHr2r=r@r6r7r%rSrfrhrirorrrrrs         c@sOeZdZddZddZddZddZd d d Zd S) rcCs.|j|j|_|jd|_dS)Nr)rr_condr_flag)r+r/rrrr2OszEvent.__init__c Cs<|j,|jjdr-|jjdSdSWdQRXdS)NFT)rprqr4r5)r+rrris_setSs   z Event.is_setc Cs?|j/|jjd|jj|jjWdQRXdS)NF)rprqr4r5ri)r+rrrsetZs  z Event.setc Cs%|j|jjdWdQRXdS)NF)rprqr4)r+rrrclear`s z Event.clearNc Csn|j^|jjdr,|jjn|jj||jjdr_|jjdSdSWdQRXdS)NFT)rprqr4r5rf)r+rerrrrfds  z Event.wait)rFrGrHr2rrrsrtrfrrrrrMs     c@seZdZddddZddZddZedd Zejd d Zed d Z e jd d Z dS)BarrierNc Cssddl}ddlm}||jdd}|j}|j|||||fd|_d|_dS)Nrr ) BufferWrapperr0r)structheaprvcalcsizerr@_stater\) r+partiesactionrer/rwrvwrapperZcondrrrr2vs   zBarrier.__init__cCsC|\|_|_|_|_|_|jjjd|_dS)Nr0)_parties_action_timeoutrp_wrapperZcreate_memoryviewcast_array)r+r?rrrr@s$zBarrier.__setstate__cCs"|j|j|j|j|jfS)N)r~rrrpr)r+rrrr=szBarrier.__getstate__cCs |jdS)Nr)r)r+rrrrzszBarrier._statecCs||jd s0       Mz'__pycache__/queues.cpython-35.opt-1.pyc000064400000022760147554447510013676 0ustar00 Yf)@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}||_tjdd\|_|_|j|_t j |_ t j dkr|d|_n|j|_|j||_d|_|jt j dkrt|tjdS)Nrr) SEM_VALUE_MAXduplexFwin32)Z synchronizer_maxsizerPipe_reader_writerLock_rlockosgetpid_opidsysplatform_wlockZBoundedSemaphore_sem _ignore_epipe _after_forkr r)selfmaxsizectxr%;/opt/alt/python35/lib64/python3.5/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 Csf|jj||st|j;|jdkr>|j|jj||jjWdQRXdS)N) racquirerr.r2 _start_threadr1appendnotify)r"objblocktimeoutr%r%r&putPs  z Queue.putc Cs|r?|dkr?|j|j}WdQRX|jjn|rUtj|}|jj||sptzj|r|tj}|dks|j| rtn|jst|j}|jjWd|jjXtj |S)Nr) rr:rreleasetimer=rr<rloads)r"rBrCresZdeadliner%r%r&get[s&    z Queue.getcCs|j|jjjS)N)rr_semlockZ _get_value)r"r%r%r&qsizessz Queue.qsizecCs |j S)N)r<)r"r%r%r&emptywsz Queue.emptycCs|jjjS)N)rrJ_is_zero)r"r%r%r&fullzsz Queue.fullcCs |jdS)NF)rI)r"r%r%r& get_nowait}szQueue.get_nowaitcCs|j|dS)NF)rD)r"rAr%r%r& put_nowaitszQueue.put_nowaitc CsAd|_z|jjWd|j}|r<d|_|XdS)NT)r5rcloser6)r"rQr%r%r&rQs   z Queue.closecCs!td|jr|jdS)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|jst|j tjtj|j gd d |_t|tj|j|jgd d |_dS) NzQueue._start_thread()targetargsnameZQueueFeederThreadTzdoing self._thread.start()z... done self._thread.start()Z exitpriority )r r1clearr,ZThreadr_feedr.r8rrrQr r2Zdaemonstartr4r _finalize_joinweakrefrefr3_finalize_closer6)r"r%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 Cs3td||jt|jWdQRXdS)Nztelling queue thread to quit)r r? _sentinelr@)buffernotemptyr%r%r&ras  zQueue._finalize_closecCstd|j}|j}|j}|j} t} tjdkrX|j} |j} nd} x:y|z|s{|Wd|Xy}xv| } | | krtd|dStj | } | dkr|| q| z|| Wd| XqWWnt k rYnXWqat k r}zZ|rTt |ddt jkrTdStrntd|dSddl}|jWYdd}~XqaXqaWdS)Nz$starting thread to feed data to piperz%feeder thread got sentinel -- exitingerrnorzerror in queue thread: %s)r r=rEwaitpopleftrcrrrdumps IndexError ExceptiongetattrrfZEPIPErr traceback print_exc)rdrer7Z writelockrQZ ignore_epipeZnacquireZnreleaseZnwaitZbpopleftsentinelZwacquireZwreleaserAermr%r%r&r\sR               !   z Queue._feed)__name__ __module__ __qualname__r'r)r+r!rDrIrKrLrNrOrPrQrRrTr> 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__TNcCs|jj||st|jY|jH|jdkrH|j|jj||j j |jj WdQRXWdQRXdS)N) rr=rr.rvr2r>r1r?rurEr@)r"rArBrCr%r%r&rDs  zJoinableQueue.putc CsR|jB|jjds(td|jjjrG|jjWdQRXdS)NFz!task_done() called too many times)rvrur= ValueErrorrJrMZ notify_all)r"r%r%r& task_done's   zJoinableQueue.task_donec Cs4|j$|jjjs)|jjWdQRXdS)N)rvrurJrMrg)r"r%r%r&rb.s zJoinableQueue.join) rqrrrsr'r)r+rDrzrbr%r%r%r&r s    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'9s  zSimpleQueue.__init__cCs |j S)N)r<)r"r%r%r&rLBszSimpleQueue.emptycCs)tj||j|j|j|jfS)N)r r(rrrr)r"r%r%r&r)Es zSimpleQueue.__getstate__cCs1|\|_|_|_|_|jj|_dS)N)rrrrr;r<)r"r*r%r%r&r+IszSimpleQueue.__setstate__c Cs-|j|jj}WdQRXtj|S)N)rrr9rrG)r"rHr%r%r&rIMs zSimpleQueue.getc CsVtj|}|jdkr1|jj|n!|j|jj|WdQRXdS)N)rrirrr7)r"rAr%r%r&rDSs  zSimpleQueue.putN) rqrrrsr'rLr)r+rIrDr%r%r%r&r7s     )__all__rrr,r/rFr_rfZqueuerrZ_multiprocessingrr utilr r r r rZ reductionrobjectrrcrrr%r%r%r& s"        ( *__pycache__/process.cpython-35.pyc000064400000021173147554447510013103 0ustar00 Yf# @svdddgZddlZddlZddlZddlZddlmZyejjej Z Wne k rdZ YnXddZ ddZ dd ZGd ddeZGd d d eZGd ddeZeaejdaea[iZxPeejjD]9\ZZedddkr,dekr,eee Ssz'BaseProcess.__init__..)AssertionErrornext_process_counterr _identity_configcopyosgetpid _parent_pidr _targettuple_argsdict_kwargstype__name__join_namer _danglingadd)rgrouptargetnameargskwargsrcountrrr__init__Gs   #  zBaseProcess.__init__cCs#|jr|j|j|jdS)zQ Method to be run in sub-process; can be overridden in sub-class N)r#r%r')rrrrrunXs zBaseProcess.runcCs|jdkstd|jtjks<tdtjjd s[tdt|j ||_|jj |_ |` |` |`tj|dS)z% Start child process Nzcannot start a process twicez:can only start a process object created by current processrz3daemonic processes are not allowed to have children)r rr"r r!rrgetr rsentinel _sentinelr#r%r'r r-)rrrrstart_s  zBaseProcess.startcCs|jjdS)zT Terminate process; sends SIGTERM signal or uses TerminateProcess() N)r terminate)rrrrr:pszBaseProcess.terminatecCsk|jtjks!td|jdk s<td|jj|}|dk rgtj|dS)z5 Wait until child process terminates zcan only join a child processNzcan only join a started process)r"r r!rr waitr r)rZtimeoutresrrrr*vs ! zBaseProcess.joincCsa|tkrdS|jtjks1td|jdkrDdS|jj|jjdkS)z1 Return whether process is alive Tzcan only test a child processNF)rr"r r!rr r returncode)rrrris_alives ! zBaseProcess.is_alivecCs|jS)N)r+)rrrrr0szBaseProcess.namecCs(t|tstd||_dS)Nzname must be a string) isinstancerrr+)rr0rrrr0scCs|jjddS)z4 Return whether process is a daemon rF)rr6)rrrrrszBaseProcess.daemoncCs,|jdkstd||jdz daemon)rr"r r!r r rBr(int_exitcode_to_namer6r)r+r)rZstatusrrr__repr__s       zBaseProcess.__repr__c Csddlm}m}zgy|jdk r;|j|jtjdata |j t }|a z|j j |jWd~X|jdz|jd}Wd|jXWntk rA}zd|jsd}nMt|jdtr|jd}n'tjjt|jddd}WYdd}~Xn;d}ddl}tjjd|j|jYnXWd|jd|tjjtjjX|S)N)utilcontextz child process calling self.run()r z Process %s: z process exiting with exitcode %d)rIrNrOZ _start_methodZ_force_start_method itertoolsr3rsetr Z _close_stdinrZ_finalizer_registryclearZ_run_after_forkersinfor5Z_exit_function SystemExitr1r?rJsysstderrwriter tracebackr0 print_excstdoutflush)rrNrOZ old_processrBerYrrr _bootstrapsD        !  zBaseProcess._bootstrap)r) __module__ __qualname____doc__rr4r5r9r:r*r>propertyr0setterrr@rBrDrCr7rLr^rrrrr>s*         c@seZdZddZdS)rAcCs>ddlm}|dkr+tdtt|ffS)NrM)get_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)rOrd TypeErrorrAbytes)rrdrrr __reduce__s  zAuthenticationString.__reduce__N)r)r_r`rgrrrrrAs rAc@seZdZddZdS) _MainProcesscCsLf|_d|_d|_d|_dttjdddi|_dS)NZ MainProcessr@ Z semprefixz/mp)rr+r"r rAr urandomr)rrrrr4(s     z_MainProcess.__init__N)r)r_r`r4rrrrrh&s rhrMZSIG_) __all__r rVsignalrQ _weakrefsetrpathabspathgetcwdZ ORIGINAL_DIROSErrorrrr objectrrfrArhrr3rrRr rKr __dict__itemsr0Zsignumr,rrrr s0          ""__pycache__/__init__.cpython-35.pyc000064400000001063147554447510013160 0ustar00 Yf@s~ddlZddlmZejddejjDejjZdZdZdej krzej dej d sr __main__Z __mp_main__) sysrglobalsupdater__all__ZSUBDEBUGZ SUBWARNINGmodulesrrrr s  __pycache__/managers.cpython-35.opt-1.pyc000064400000103724147554447510014164 0ustar00 Yf{@sddddgZddlZddlZddlZddlZddlmZddlmZdd l m Z dd l m Z dd l m Z dd l m Z dd l mZddl mZddl mZddZejejedddddfDZedek rJddZxeD]Zejeeq0WGdddeZfiddZddZGdddeZd d!Zd"d#ZGd$d%d%eZGd&d'd'eZ d(e j!e j"fd)e j#e j$fiZ%Gd*ddeZ&Gd+d,d,e'Z(Gd-ddeZ)d.d/Z*id0d1Z+dddd2d3d4Z,Gd5d6d6eZ-Gd7d8d8eZ.d2d9d:Z/Gd;d<d<e)Z0Gd=d>d>e)Z1Gd?d@d@e1Z2GdAdBdBe)Z3GdCdDdDe)Z4GdEdFdFe)Z5GdGdHdHe)Z6e+dIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\fZ7Gd]d^d^e7Z8e+d_dKdLdMdNdRd`dadbdcdddXdddedfdfZ9e+dgdNdMdRfZ:e+dhdidjdkdldmdndodpdqdrdsf Z;djdtdpdtdrdtdldudmduie;_<Gdvdhdhe;Z=Gdwdde&Z>e>jdxej?e>jdyej?e>jdzej@e3e>jd{ejAe1e>jd|ejBe1e>jd}ejCe1e>jd~ejDe1e>jdejEe2e>jdejFe4e>jde jGe=e>jdee8e>jdeHe9e>jd8e.e6e>jd:e/e:e>jd6e-e5e>jdude0dde>jdtdddS) BaseManager SyncManager BaseProxyTokenN)time) format_exc) connection)context)pool)process) reduction)util) get_contextcCstj|j|jffS)N)arraytypecodetobytes)ar=/opt/alt/python35/lib64/python3.5/multiprocessing/managers.py reduce_array%srcCs(g|]}tti|qSr)typegetattr).0namerrr )s ritemskeysvaluescCstt|ffS)N)list)objrrrrebuild_as_list+sr!c@sLeZdZdZdZddZddZd d Zd d Zd S)rz4 Type to uniquely indentify a shared object typeidaddressidcCs!||||_|_|_dS)N)r"r#r$)selfr"r#r$rrr__init__:szToken.__init__cCs|j|j|jfS)N)r"r#r$)r%rrr __getstate__=szToken.__getstate__cCs|\|_|_|_dS)N)r"r#r$)r%staterrr __setstate__@szToken.__setstate__cCs#d|jj|j|j|jfS)Nz %s(typeid=%r, address=%r, id=%r)) __class____name__r"r#r$)r%rrr__repr__CszToken.__repr__N)r"r#r$) r+ __module__ __qualname____doc__ __slots__r&r'r)r,rrrrr4s    cCsN|j||||f|j\}}|dkr;|St||dS)zL Send a message to manager using connection `c` and return response z#RETURNN)sendrecvconvert_to_error)cr$ methodnameargskwdskindresultrrrdispatchKs  r:cCsN|dkr|S|dkr&t|S|dkr@td|StdSdS)Nz#ERRORz #TRACEBACKz#UNSERIALIZABLEzUnserializable message: %s zUnrecognized message type) RemoteError ValueError)r8r9rrrr3Us    r3c@seZdZddZdS)r;cCs)ddddt|jdddS)N -Kr)strr6)r%rrr__str__bszRemoteError.__str__N)r+r-r.rArrrrr;as r;cCsIg}x<t|D].}t||}t|r|j|qW|S)z4 Return a list of names of methods of `obj` )dirrcallableappend)r temprfuncrrr all_methodsis  rGcCsddt|DS)zP Return a list of names of methods of `obj` which do not start with '_' cSs&g|]}|ddkr|qS)r_r)rrrrrrxs z"public_methods..)rG)r rrrpublic_methodstsrIc @seZdZdZdddddddd d g Zd d Zd dZddZddZddZ ddZ ddZ ddZ de de de iZ ddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0S)1ServerzM Server class which runs in a process controlled by a manager object shutdowncreateaccept_connection get_methods debug_infonumber_of_objectsdummyincrefdecrefcCs||_tj||_t|\}}|d|dd|_|jj|_ddffi|_i|_t j |_ dS)Nr#Zbacklog0) registryr AuthenticationStringauthkeylistener_clientlistenerr# id_to_objid_to_refcount threadingRLockmutex)r%rVr#rX serializerListenerClientrrrr&s  zServer.__init__cCstj|_|tj_zqtjd|j}d|_|j y*x#|jj sq|jj dqOWWnt t fk rYnXWdtjtjkrtjdtjt_tjt_tjdXdS)z( Run the server forever targetTrNzresetting stdout, stderrr)r]Event stop_eventr current_process_manager_serverThreadaccepterdaemonstartis_setwaitKeyboardInterrupt SystemExitsysstdout __stdout__rdebug __stderr__stderrexit)r%rirrr serve_forevers       zServer.serve_foreverc Csgx`y|jj}Wntk r-wYnXtjd|jd|f}d|_|jqWdS)Nrcr6T)rZZacceptOSErrorr]rhhandle_requestrjrk)r%r4trrrris  zServer.accepterc 'Csud}}}yWtj||jtj||j|j}|\}}}}t||}Wn!tk rdtf} YnGXy||||}Wn!tk rdtf} Yn Xd|f} y|j| Wntk rf} zdy|jdtfWntk r#YnXt j d| t j d|t j d| WYdd} ~ XnX|j dS)z) Handle a new connection Nz #TRACEBACKz#RETURNzFailure to send message: %rz ... request was %rz ... exception was %r) r Zdeliver_challengerXZanswer_challenger2r Exceptionrr1rinfoclose) r%r4funcnamer9requestignorer6r7rFmsgerrrrys2     #zServer.handle_requestc*Cs%tjdtjj|j}|j}|j}x|jj s y,d}}|}|\}}} } ||\}} } || krt d|t || ft ||} y| | | }Wn1t k r}zd|f}WYdd}~XnpX| o| j|d}|re|j|||\}}t||j|}d||ff}n d|f}Wnt k r|dkrdtf}n\y8|j|}|||||| | }d|f}Wn!t k rdtf}YnXYnXtk r7tjdtjjtjd Yn!t k rWdtf}YnXyMy||Wn8t k r}z|d tfWYdd}~XnXWq7t k r}zUtjd tjjtjd |tjd ||jtjdWYdd}~Xq7Xq7WdS)zQ Handle requests from the proxies in a particular process/thread z$starting server thread to service %rNz+method %r of %r object is not in exposed=%rz#ERRORz#PROXYz#RETURNz #TRACEBACKz$got EOF -- exiting thread serving %rrz#UNSERIALIZABLEzexception in thread serving %rz ... message was %rz ... exception was %rr)rrsr]current_threadrr2r1r[rerlAttributeErrorrrr{getrLrr#rfallback_mappingEOFErrorrprvr|r})r%connr2r1r[r5r ridentr6r7exposedZ gettypeidZfunctionresrrr"ZridentZrexposedtokenZ fallback_funcr9rrr serve_clientsl              *  zServer.serve_clientcCs|S)Nr)r%rrr rrrfallback_getvalueszServer.fallback_getvaluecCs t|S)N)r@)r%rrr rrr fallback_str"szServer.fallback_strcCs t|S)N)repr)r%rrr rrr fallback_repr%szServer.fallback_reprrAr,z #GETVALUEcCsdS)Nr)r%r4rrrrQ.sz Server.dummycCs|jg}t|jj}|jxV|D]N}|dkr6|jd||j|t|j|dddfq6Wdj|SWdQRXdS)zO Return some info --- useful to spot problems with refcounting rUz %s: refcount=%s %srNr?r=) r_rr[rsortrDr\r@join)r%r4r9rrrrrrO1s      *zServer.debug_infocCst|jdS)z* Number of shared objects r)lenr[)r%r4rrrrP@szServer.number_of_objectscCsXzCytjd|jdWnddl}|jYnXWd|jjXdS)z' Shutdown this process z!manager received shutdown message#RETURNNr)rN)rrsr1 traceback print_excreset)r%r4rrrrrKFs  zServer.shutdownc Os |j|j|\}}}}|dkr<|d} n|||} |dkrct| }|dk rt|t|}dt| } tjd|| | t||f|j| <| |j krd|j | <|j || | t |fSWdQRXdS)z> Create a new shared object and return its id Nrz%xz&%r callable returned object with id %r) r_rVrIrr$rrsrr[r\rRtuple) r%r4r"r6r7rCrmethod_to_typeid proxytyper rrrrrLSs        z Server.createcCst|j|jdS)zL Return the methods of the shared object indicated by token r)rr[r$)r%r4rrrrrNvszServer.get_methodscCs-|tj_|jd|j|dS)z= Spawn a new thread to serve this connection #RETURNN)rN)r]rrr1r)r%r4rrrrrM|s zServer.accept_connectionc Cs&|j|j|d7 Connect manager object to the server process rXNrQ) rYrrrr:rrrr)r%rarbrrrrconnectszBaseManager.connectc CsO|dk r%t| r%tdtjdd\}}|jjdt|jd|j|j |j |j |||f|_ dj dd |j jD}t|jd ||j _|j j|j|j|_ |jtj|j_tj|t|jd|j |j |j |j|jfd d |_dS) z@ Spawn a server process for this manager object Nzinitializer must be a callableZduplexFrcr6:css|]}t|VqdS)N)r@)rirrr sz$BaseManager.start..r> exitpriorityr)rC TypeErrorr ZPiperZProcessr _run_serverrrrr_processrZ _identityr+rrkr}r2rrrrrFinalize_finalize_managerrrK)r% initializerinitargsreaderwriterrrrrrks&  "   zBaseManager.startc Csi|dk r|||j||||}|j|j|jtjd|j|jdS)z@ Create a server, report its address and run it Nzmanager serving at %r)_Serverr1r#r}rr|rw) clsrVr#rXr`rrrserverrrrrs   zBaseManager._run_serverc Osk|j|jd|j}z)t|dd|f||\}}Wd|jXt||j||fS)zP Create a new shared object; return the token and exposed tuple rXNrL)rrrr:r}r)r%r"r6r7rr$rrrr_creates ) zBaseManager._createcCs;|jdk r7|jj||jjs7d|_dS)zC Join the manager process (if it has been spawned) N)rris_alive)r%timeoutrrrrszBaseManager.joinc CsA|j|jd|j}zt|ddSWd|jXdS)zS Return some info about the servers shared objects and connections rXNrO)rrrr:r})r%rrrr _debug_infoszBaseManager._debug_infoc CsA|j|jd|j}zt|ddSWd|jXdS)z5 Return the number of shared objects rXNrP)rrrr:r})r%rrrr_number_of_objects"szBaseManager._number_of_objectscCs#|jjtjkr|j|S)N)rrrrrk)r%rrr __enter__,s zBaseManager.__enter__cCs|jdS)N)rK)r%exc_typeexc_valexc_tbrrr__exit__2szBaseManager.__exit__cCs|jrtjdy8||d|}zt|ddWd|jXWntk reYnX|jdd|jrtjdt|drtjd |j|jdd |jrtjd t j |_ yt j |=Wntk r YnXdS) zQ Shutdown the manager process; will be registered as a finalizer z#sending shutdown message to managerrXNrKrg?zmanager still alive terminatez'trying to `terminate()` manager processg?z#manager still alive after terminate)rrr|r:r}r{rhasattrrrrrr_address_to_localKeyError)r r#rXr(rrrrrr5s.           zBaseManager._finalize_managercCs|jS)N)r)r%rrrUszBaseManager.Tc sd|jkr!|jj|_dkr3t|pHtdd}|p`tdd}|rx t|jD] \}}q|W|||f|j<|rfdd} | _t|| dS)z9 Register a typeid with the manager type rN _exposed__method_to_typeid_c stjd|j||\}}||jd|d|jd|}|j|jd|j}t|dd|jf|S)Nz)requesting creation of a shared %r objectmanagerrXrrS) rrsrrrrr#r:r$)r%r6r7rZexpproxyr)rr"rrrErsz"BaseManager.register..temp) __dict__rcopy AutoProxyrrrr+setattr) rr"rCrrr create_methodkeyrrEr)rr"rregisterWs  zBaseManager.register)r+r-r.r/rrJrr&rrrk classmethodrrrrrrr staticmethodrpropertyr#rrrrrrs*    $     c@s(eZdZddZddZdS)ProcessLocalSetcCstj|dddS)NcSs |jS)N)clear)r rrrrsz*ProcessLocalSet.__init__..)rregister_after_fork)r%rrrr&szProcessLocalSet.__init__cCst|ffS)N)r)r%rrr __reduce__szProcessLocalSet.__reduce__N)r+r-r.r&rrrrrrs  rc@seZdZdZiZejZddddddZddZ fidd Z d d Z d d Z e ddZddZddZddZddZddZdS)rz. A base for proxies of shared objects NTc Cs*tjNtjj|jd}|dkrStjtf}|tj|j)rr+rr"r$)r%rrrr,%szBaseProxy.__repr__c CsBy|jdSWn*tk r=t|dddSYnXdS)zV Return representation of the referent (or a fall-back if that fails) r,Nrz; '__str__()' failed>r)rr{r)r%rrrrA)s zBaseProxy.__str__)r+r-r.r/rrZForkAwareThreadLockrr&rrrrrrrrrr,rArrrrrs  "      cCsttjdd}|rB|j|jkrB|j|jdS|jddojttjdd }|||d||SdS)z Function used for unpickling proxy objects. If possible the shared object is returned, or otherwise a proxy for it. rgNrrRTZ _inheritingF)rr rfr#r[r$pop)rFrr`r7rrRrrrr6s rc Cst|}y|||fSWntk r2YnXi}x%|D]}td||f|q@Wt|tf|}||_||||f<|S)zB Return a proxy type whose methods are given by `exposed` zLdef %s(self, *args, **kwds): return self._callmethod(%r, args, kwds))rrexecrrr)rr_cacheZdicmeth ProxyTyperrr MakeProxyTypeKs    rTc Cst|d}|dkrY||jd|}zt|dd|f}Wd|jX|dkrz|dk rz|j}|dkrtjj}td|j |}|||d|d|d|} d| _ | S) z* Return an auto-proxy for `token` rNrXrNz AutoProxy[%s]rrRT) rYr#r:r}rr rfrXrr"r) rr`rrXrrRrrrrrrrras      rc@s(eZdZddZddZdS) NamespacecKs|jj|dS)N)rupdate)r%r7rrrr&szNamespace.__init__cCst|jj}g}x:|D]2\}}|jds"|jd||fq"W|jd|jjdj|fS)NrHz%s=%rz%s(%s)z, ) rrr startswithrDrr*r+r)r%rrErrrrrr,s zNamespace.__repr__N)r+r-r.r&r,rrrrr~s  rc@sReZdZdddZddZddZdd ZeeeZd S) ValueTcCs||_||_dS)N) _typecode_value)r%rrlockrrrr&s zValue.__init__cCs|jS)N)r)r%rrrrsz Value.getcCs ||_dS)N)r)r%rrrrrsz Value.setcCs dt|j|j|jfS)Nz %s(%r, %r))rr+rr)r%rrrr,szValue.__repr__N) r+r-r.r&rrr,rrrrrrrs    rcCstj||S)N)r)rZsequencerrrrArraysrc@sReZdZdZddZddZd d Zd d Zd dZdS) IteratorProxy__next__r1throwr}cCs|S)Nr)r%rrr__iter__szIteratorProxy.__iter__cGs|jd|S)Nr)r)r%r6rrrrszIteratorProxy.__next__cGs|jd|S)Nr1)r)r%r6rrrr1szIteratorProxy.sendcGs|jd|S)Nr)r)r%r6rrrrszIteratorProxy.throwcGs|jd|S)Nr})r)r%r6rrrr}szIteratorProxy.closeN)rr1rr}) r+r-r.rrrr1rr}rrrrrs     rc@sLeZdZd ZddddZddZd d Zd d ZdS) AcquirerProxyacquirereleaseTNcCs1|dkr|fn ||f}|jd|S)Nr)r)r%Zblockingrr6rrrrs!zAcquirerProxy.acquirecCs |jdS)Nr)r)r%rrrrszAcquirerProxy.releasecCs |jdS)Nr)r)r%rrrrszAcquirerProxy.__enter__cCs |jdS)Nr)r)r%rrrrrrrszAcquirerProxy.__exit__)rr)r+r-r.rrrrrrrrrrs   rc@sLeZdZdZdddZd d Zd d Zdd dZdS)ConditionProxyrrrmnotify notify_allNcCs|jd|fS)Nrm)r)r%rrrrrmszConditionProxy.waitcCs |jdS)Nr )r)r%rrrr szConditionProxy.notifycCs |jdS)Nr )r)r%rrrr szConditionProxy.notify_allcCs|}|r|S|dk r/t|}n d}d}xF|s|dk rj|t}|dkrjP|j||}q>W|S)Nr)_timerm)r%Z predicaterr9ZendtimeZwaittimerrrwait_fors        zConditionProxy.wait_for)rrrmr r )r+r-r.rrmr r r rrrrrs   rc@sIeZdZdZddZddZd d Zd d d Zd S) EventProxyrlrrrmcCs |jdS)Nrl)r)r%rrrrlszEventProxy.is_setcCs |jdS)Nr)r)r%rrrrszEventProxy.setcCs |jdS)Nr)r)r%rrrrszEventProxy.clearNcCs|jd|fS)Nrm)r)r%rrrrrmszEventProxy.wait)rlrrrm)r+r-r.rrlrrrmrrrrr s    r c@sseZdZdZdddZdd Zd d Zed d ZeddZ eddZ dS) BarrierProxy__getattribute__rmabortresetNcCs|jd|fS)Nrm)r)r%rrrrrmszBarrierProxy.waitcCs |jdS)Nr)r)r%rrrrszBarrierProxy.abortcCs |jdS)Nr)r)r%rrrrszBarrierProxy.resetcCs|jddS)Nrparties)r)r)r%rrrrszBarrierProxy.partiescCs|jddS)Nr n_waiting)r)r)r%rrrrszBarrierProxy.n_waitingcCs|jddS)Nrbroken)r)r)r%rrrrszBarrierProxy.broken)rrmrr) r+r-r.rrmrrrrrrrrrrrs   rc@s:eZdZd ZddZddZdd Zd S) NamespaceProxyr __setattr__ __delattr__cCsB|ddkr tj||Stj|d}|d|fS)NrrHrr)objectr)r%r callmethodrrr __getattr__szNamespaceProxy.__getattr__cCsH|ddkr#tj|||Stj|d}|d||fS)NrrHrr)rrr)r%rrrrrrrszNamespaceProxy.__setattr__cCsB|ddkr tj||Stj|d}|d|fS)NrrHrr)rrr)r%rrrrrrszNamespaceProxy.__delattr__N)rrr)r+r-r.rrrrrrrrrs   rc@s=eZdZdZddZddZeeeZdS) ValueProxyrrcCs |jdS)Nr)r)r%rrrrszValueProxy.getcCs|jd|fS)Nr)r)r%rrrrr szValueProxy.setN)rr)r+r-r.rrrrrrrrrrs   r BaseListProxy__add__ __contains__ __delitem__ __getitem____len____mul__ __reversed____rmul__ __setitem__rDcountextendindexinsertrremovereverser__imul__c@s(eZdZddZddZdS) ListProxycCs|jd|f|S)Nr')r)r%rrrr__iadd__szListProxy.__iadd__cCs|jd|f|S)Nr,)r)r%rrrrr,szListProxy.__imul__N)r+r-r.r.r,rrrrr-s  r- DictProxyrrrZhas_keypopitem setdefaultr ArrayProxy PoolProxyZapplyZ apply_asyncr}ZimapZimap_unorderedrmapZ map_asyncstarmapZ starmap_asyncrZ AsyncResultIteratorc@s(eZdZddZddZdS)r3cCs|S)Nr)r%rrrr5szPoolProxy.__enter__cCs|jdS)N)r)r%rrrrrrr7szPoolProxy.__exit__N)r+r-r.rrrrrrr34s  c@seZdZdZdS)ra( Subclass of `BaseManager` which supports a number of shared object types. The types registered are those intended for the synchronization of threads, plus `dict`, `list` and `Namespace`. The `multiprocessing.Manager()` function creates started instances of this class. N)r+r-r.r/rrrrr>s QueueZ JoinableQueuerdLockr^ SemaphoreBoundedSemaphore ConditionBarrierPoolrdictrrF)I__all__rpr]rZqueuerr rrr r r r r rrrrZ view_typesrr!Z view_typerrr:r3r{r;rGrIrJrrarbZ XmlListenerZ XmlClientrYrrrrrrrrrrrrrr rrrrr-r/r2Z BasePoolProxyrr3rr7rdr8r^r9r:r;r<r=r>rrrr s                      __pycache__/context.cpython-35.pyc000064400000032315147554447510013111 0ustar00 Yf)@sWddlZddlZddlZddlmZgZGdddeZGdddeZGdd d eZ Gd d d eZ Gd d d e Z Gdddej ZGddde ZeddeeDe_ejdkrGdddej ZGdddej ZGdddej ZGddde ZGddde ZGdd d e Zd!ed"ed#eiZeed!ZnNGd$ddej ZGd%dde Zd"eiZeed"Zd&d'ZejZd(d)Zd*d+Zd,d-Z dS).N)processc@seZdZdS) ProcessErrorN)__name__ __module__ __qualname__rrZ&d S)? BaseContextcCs/tj}|dkr'tdn|SdS)z(Returns the number of CPUs in the systemNzcannot determine number of cpus)os cpu_countNotImplementedError)selfZnumrrr r's  zBaseContext.cpu_countcCs3ddlm}|d|j}|j|S)zReturns a manager associated with a running server process The managers methods such as `Lock()`, `Condition()` and `Queue()` can be used to create shared objects. r) SyncManagerctx)Zmanagersr get_contextstart)rrmrrr Manager/s zBaseContext.ManagerTcCsddlm}||S)z1Returns two connection object connected by a piper)Pipe) connectionr)rZduplexrrrr r:szBaseContext.PipecCs#ddlm}|d|jS)z#Returns a non-recursive lock objectr)Lockr) synchronizerr)rrrrr r?szBaseContext.LockcCs#ddlm}|d|jS)zReturns a recursive lock objectr)RLockr)rrr)rrrrr rDszBaseContext.RLockNcCs&ddlm}||d|jS)zReturns a condition objectr) Conditionr)rrr)rlockrrrr rIszBaseContext.ConditionrcCs&ddlm}||d|jS)zReturns a semaphore objectr) Semaphorer)rrr)rvaluerrrr rNszBaseContext.SemaphorecCs&ddlm}||d|jS)z"Returns a bounded semaphore objectr)BoundedSemaphorer)rr!r)rr r!rrr r!SszBaseContext.BoundedSemaphorecCs#ddlm}|d|jS)zReturns an event objectr)Eventr)rr"r)rr"rrr r"XszBaseContext.EventcCs,ddlm}||||d|jS)zReturns a barrier objectr)Barrierr)rr#r)rZpartiesactionZtimeoutr#rrr r#]szBaseContext.BarrierrcCs&ddlm}||d|jS)zReturns a queue objectr)Queuer)queuesr%r)rmaxsizer%rrr r%bszBaseContext.QueuecCs&ddlm}||d|jS)zReturns a queue objectr) JoinableQueuer)r&r(r)rr'r(rrr r(gszBaseContext.JoinableQueuecCs#ddlm}|d|jS)zReturns a queue objectr) SimpleQueuer)r&r)r)rr)rrr r)lszBaseContext.SimpleQueuecCs/ddlm}|||||d|jS)zReturns a process pool objectr)Poolcontext)Zpoolr*r)rZ processesZ initializerZinitargsZmaxtasksperchildr*rrr r*qszBaseContext.PoolcGsddlm}|||S)zReturns a shared objectr)RawValue) sharedctypesr,)rtypecode_or_typeargsr,rrr r,xszBaseContext.RawValuecCsddlm}|||S)zReturns a shared arrayr)RawArray)r-r0)rr.size_or_initializerr0rrr r0}szBaseContext.RawArrayrcGs/ddlm}|||d|d|jS)z$Returns a synchronized shared objectr)Valuerr)r-r2r)rr.rr/r2rrr r2szBaseContext.ValuecCs/ddlm}|||d|d|jS)z#Returns a synchronized shared arrayr)Arrayrr)r-r3r)rr.r1rr3rrr r3szBaseContext.ArraycCs<tjdkr8ttddr8ddlm}|dS)zCheck whether this is a fake forked process in a frozen executable. If so then run code specified by commandline and exit. win32frozenFr)freeze_supportN)sysplatformgetattrspawnr6)rr6rrr r6s!zBaseContext.freeze_supportcCsddlm}|S)zZReturn package logger -- if it does not already exist then it is created. r) get_logger)utilr;)rr;rrr r;szBaseContext.get_loggercCsddlm}||S)z8Turn on logging and add a handler which prints to stderrr) log_to_stderr)r<r=)rlevelr=rrr r=szBaseContext.log_to_stderrcCsddlm}dS)zVInstall support for sending connections and sockets between processes r)rN)r)rrrrr allow_connection_picklingsz%BaseContext.allow_connection_picklingcCsddlm}||dS)zSets the path to a python.exe or pythonw.exe binary used to run child processes instead of sys.executable when using the 'spawn' start method. Useful for people embedding Python. r)set_executableN)r:rA)r executablerArrr rAszBaseContext.set_executablecCsddlm}||dS)zkSet list of module names to try to load in forkserver process. This is really just a hint. r)set_forkserver_preloadN) forkserverrC)rZ module_namesrCrrr rCsz"BaseContext.set_forkserver_preloadc CsQ|dkr|Syt|}Wn"tk rBtd|YnX|j|S)Nzcannot find context for %r)_concrete_contextsKeyError ValueError_check_available)rmethodrrrr rs   zBaseContext.get_contextFcCs|jS)N)_name)r allow_nonerrr get_start_methodszBaseContext.get_start_methodcCstddS)Nz+cannot set start method of concrete context)rG)rrIforcerrr set_start_methodszBaseContext.set_start_methodcCsdS)Nr)rrrr rHszBaseContext._check_available)'rrrrr r r staticmethodrZcurrent_processZactive_childrenrrrrrrrr!r"r#r%r(r)r*r,r0r2r3r6r;r=r@rArCrrLrNrHrrrr r sF                r c@s(eZdZdZeddZdS)ProcessNcCstjjj|S)N)_default_contextrrP_Popen) process_objrrr rRszProcess._Popen)rrr _start_methodrOrRrrrr rPs rPcsaeZdZeZddZdfddZdddZdd d Zd d ZS) DefaultContextcCs||_d|_dS)N)rQ_actual_context)rr+rrr __init__s zDefaultContext.__init__NcsB|dkr.|jdkr'|j|_|jStj|SdS)N)rVrQsuperr)rrI) __class__rr rs   zDefaultContext.get_contextFcCsW|jdk r"| r"td|dkrA|rAd|_dS|j||_dS)Nzcontext has already been set)rV RuntimeErrorr)rrIrMrrr rNs   zDefaultContext.set_start_methodcCs/|jdkr%|rdS|j|_|jjS)N)rVrQrJ)rrKrrr rLs  zDefaultContext.get_start_methodcCsJtjdkrdgSddlm}|jr<dddgSddgSdS)Nr4r:r) reductionforkrD)r7r8r?r[HAVE_SEND_HANDLE)rr[rrr get_all_start_methodss   z$DefaultContext.get_all_start_methods) rrrrPrWrrNrLr^rr)rYr rUs  rUccs%|]}|ddkr|VqdS)r_Nr).0xrrr srbr4c@s(eZdZdZeddZdS) ForkProcessr\cCsddlm}||S)Nr)Popen)Z popen_forkrd)rSrdrrr rRszForkProcess._PopenN)rrrrTrOrRrrrr rcs rcc@s(eZdZdZeddZdS) SpawnProcessr:cCsddlm}||S)Nr)rd)Zpopen_spawn_posixrd)rSrdrrr rRszSpawnProcess._PopenN)rrrrTrOrRrrrr re s rec@s(eZdZdZeddZdS)ForkServerProcessrDcCsddlm}||S)Nr)rd)Zpopen_forkserverrd)rSrdrrr rRszForkServerProcess._PopenN)rrrrTrOrRrrrr rfs rfc@seZdZdZeZdS) ForkContextr\N)rrrrJrcrPrrrr rgs rgc@seZdZdZeZdS) SpawnContextr:N)rrrrJrerPrrrr rhs rhc@s(eZdZdZeZddZdS)ForkServerContextrDcCs)ddlm}|js%tddS)Nr)r[z%forkserver start method not available)r?r[r]rG)rr[rrr rH&s z"ForkServerContext._check_availableN)rrrrJrfrPrHrrrr ri#s rir\r:rDc@s(eZdZdZeddZdS)rer:cCsddlm}||S)Nr)rd)Zpopen_spawn_win32rd)rSrdrrr rR6szSpawnProcess._PopenN)rrrrTrOrRrrrr re4s c@seZdZdZeZdS)rhr:N)rrrrJrerPrrrr rh;s cCst|t_dS)N)rErQrV)rIrrr _force_start_methodHsrjcCsttddS)Nspawning_popen)r9_tlsrrrr get_spawning_popenQsrmcCs |t_dS)N)rlrk)popenrrr set_spawning_popenTsrocCs,tdkr(tdt|jdS)NzF%s objects should only be shared between processes through inheritance)rmrZtyper)objrrr assert_spawningWsrr)!rr7Z threadingr?r__all__ Exceptionrr r r objectr Z BaseProcessrPrUlistdirr8rcrerfrgrhrirErQrjZlocalrlrmrorrrrrr s@   ("      __pycache__/queues.cpython-35.pyc000064400000023116147554447510012733 0ustar00 Yf)@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}||_tjdd\|_|_|j|_t j |_ t j dkr|d|_n|j|_|j||_d|_|jt j dkrt|tjdS)Nrr) SEM_VALUE_MAXduplexFwin32)Z synchronizer_maxsizerPipe_reader_writerLock_rlockosgetpid_opidsysplatform_wlockZBoundedSemaphore_sem _ignore_epipe _after_forkr r)selfmaxsizectxr%;/opt/alt/python35/lib64/python3.5/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 Csv|j st|jj||s+t|j;|jdkrN|j|jj ||jj WdQRXdS)N) r5AssertionErrorracquirerr.r2 _start_threadr1appendnotify)r"objblocktimeoutr%r%r&putPs  z Queue.putc Cs|r?|dkr?|j|j}WdQRX|jjn|rUtj|}|jj||sptzj|r|tj}|dks|j| rtn|jst|j}|jjWd|jjXtj |S)Nr) rr:rreleasetimer>rr<rloads)r"rCrDresZdeadliner%r%r&get[s&    z Queue.getcCs|j|jjjS)N)rr_semlockZ _get_value)r"r%r%r&qsizessz Queue.qsizecCs |j S)N)r<)r"r%r%r&emptywsz Queue.emptycCs|jjjS)N)rrK_is_zero)r"r%r%r&fullzsz Queue.fullcCs |jdS)NF)rJ)r"r%r%r& get_nowait}szQueue.get_nowaitcCs|j|dS)NF)rE)r"rBr%r%r& put_nowaitszQueue.put_nowaitc CsAd|_z|jjWd|j}|r<d|_|XdS)NT)r5rcloser6)r"rRr%r%r&rRs   z Queue.closecCs0td|jst|jr,|jdS)NzQueue.join_thread())r r5r=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|jst|j tjtj|j gd d |_t|tj|j|jgd d |_dS) NzQueue._start_thread()targetargsnameZQueueFeederThreadTzdoing self._thread.start()z... done self._thread.start()Z exitpriority )r r1clearr,ZThreadr_feedr.r8rrrRr r2Zdaemonstartr4r _finalize_joinweakrefrefr3_finalize_closer6)r"r%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 Cs3td||jt|jWdQRXdS)Nztelling queue thread to quit)r r@ _sentinelrA)buffernotemptyr%r%r&rbs  zQueue._finalize_closecCstd|j}|j}|j}|j} t} tjdkrX|j} |j} nd} x:y|z|s{|Wd|Xy}xv| } | | krtd|dStj | } | dkr|| q| z|| Wd| XqWWnt k rYnXWqat k r}zZ|rTt |ddt jkrTdStrntd|dSddl}|jWYdd}~XqaXqaWdS)Nz$starting thread to feed data to piperz%feeder thread got sentinel -- exitingerrnorzerror in queue thread: %s)r r>rFwaitpopleftrdrrrdumps IndexError ExceptiongetattrrgZEPIPErr traceback print_exc)rerfr7Z writelockrRZ ignore_epipeZnacquireZnreleaseZnwaitZbpopleftsentinelZwacquireZwreleaserBernr%r%r&r]sR               !   z Queue._feed)__name__ __module__ __qualname__r'r)r+r!rErJrLrMrOrPrQrRrSrUr? staticmethodr_rbr]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)rwrv)r"r%r%r&r)szJoinableQueue.__getstate__cCs:tj||dd|dd\|_|_dS)Nry)rr+rwrv)r"r*r%r%r&r+szJoinableQueue.__setstate__TNcCs|j st|jj||s+t|jY|jH|jdkrX|j|j j ||j j |jj WdQRXWdQRXdS)N)r5r=rr>rr.rwr2r?r1r@rvrFrA)r"rBrCrDr%r%r&rEs  zJoinableQueue.putc CsR|jB|jjds(td|jjjrG|jjWdQRXdS)NFz!task_done() called too many times)rwrvr> ValueErrorrKrNZ notify_all)r"r%r%r& task_done's   zJoinableQueue.task_donec Cs4|j$|jjjs)|jjWdQRXdS)N)rwrvrKrNrh)r"r%r%r&rc.s zJoinableQueue.join) rrrsrtr'r)r+rEr{rcr%r%r%r&r s    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'9s  zSimpleQueue.__init__cCs |j S)N)r<)r"r%r%r&rMBszSimpleQueue.emptycCs)tj||j|j|j|jfS)N)r r(rrrr)r"r%r%r&r)Es zSimpleQueue.__getstate__cCs1|\|_|_|_|_|jj|_dS)N)rrrrr;r<)r"r*r%r%r&r+IszSimpleQueue.__setstate__c Cs-|j|jj}WdQRXtj|S)N)rrr9rrH)r"rIr%r%r&rJMs zSimpleQueue.getc CsVtj|}|jdkr1|jj|n!|j|jj|WdQRXdS)N)rrjrrr7)r"rBr%r%r&rESs  zSimpleQueue.putN) rrrsrtr'rMr)r+rJrEr%r%r%r&r7s     )__all__rrr,r/rGr`rgZqueuerrZ_multiprocessingrr utilr r r r rZ reductionrobjectrrdrrr%r%r%r& s"        ( *__pycache__/__init__.cpython-35.opt-2.pyc000064400000001043147554447510014116 0ustar00 ]@s~ddlZddlmZejddejjDejjZdZdZdej krzej dej d sr __main__ __mp_main__) sysrglobalsupdater__all__SUBDEBUG SUBWARNINGmodulesrrrr s  __pycache__/sharedctypes.cpython-35.opt-2.pyc000064400000015764147554447510015074 0ustar00 ]T@sddlZddlZddlmZddlmZddlmZddlmZddd d d d gZ d ej dej dej dej dejdejdejdejdejdejdejdeji ZddZddZddZddddd d Zddddd!d Zd"d Zddd#d Zd$d%Zd&d'Zd(d)Z d*Z!iZ"ej#Z$Gd+d,d,e%Z&Gd-d.d.e&Z'Gd/d0d0e&Z(Gd1d2d2e(Z)dS)3N)heap) get_context)assert_spawning)ForkingPicklerRawValueRawArrayValueArraycopy synchronizedcubBhHiIlLfdcCs.tj|}tj|}t||dS)N)ctypessizeofrZ BufferWrapper rebuild_ctype)type_sizewrapperr1/opt/alt/python35/lib64/python3.5/sharedctypes.py _new_value&sr!cGsTtj||}t|}tjtj|dtj||j||S)Nr)typecode_to_typegetr!rmemset addressofr__init__)typecode_or_typeargsrobjrrr r+s  % cCstj||}t|tr`||}t|}tjtj|dtj||S|t |}t|}|j ||SdS)Nr) r"r# isinstanceintr!rr$r%rlenr&)r'size_or_initializerrr)resultrrr r5s  %  lockTctxcGsxt||}|dkr|S|dkrF|p7t}|j}t|dsetd|t||d|S)NFTacquirez'%r' has no method 'acquire'r0)TN)rrRLockhasattrAttributeErrorr )r'r/r0r(r)rrr r Es   cCsxt||}|dkr|S|dkrF|p7t}|j}t|dsetd|t||d|S)NFTr1z'%r' has no method 'acquire'r0)TN)rrr2r3r4r )r'r-r/r0r)rrr r Ss   cCs)tt|}|tj|d<|S)Nr)r!typerZpointer)r)Znew_objrrr r asc Cs|p t}t|tjr1t|||St|tjru|jtjkret|||St |||St |}yt |}Wnkt k rdd|j D}tdd|D}d|j}t |tf|}t |us z synchronized..css!|]}|t|fVqdS)N) make_property)r6namerrr vszsynchronized.. Synchronized)rr*rZ _SimpleCDatar;r _type_c_charSynchronizedStringSynchronizedArrayr5 class_cacheKeyErrorZ_fields_dict__name__SynchronizedBase)r)r/r0clssclsnamesrZ classnamerrr r fs    "cCsXt|t|tjr8t|j|j|jffStt||jdffSdS)N) rr*rr rr<_wrapperZ_length_r5)r)rrr reduce_ctypes rIcCsN|dk r||}tj|t|j}|j|}||_|S)N)rregisterrIZcreate_memoryviewZ from_bufferrH)rrlengthbufr)rrr rs    rc CsYy t|SWnFtk rTi}tt|fd|||t|<||SYnXdS)N) prop_cacherAexectemplate)r9rrrr r8s  r8z def get%s(self): self.acquire() try: return self._obj.%s finally: self.release() def set%s(self, value): self.acquire() try: self._obj.%s = value finally: self.release() %s = property(get%s, set%s) c@sjeZdZddddZddZddZdd Zd d Zd d ZddZ dS)rDNcCsa||_|r||_n$|p-tdd}|j|_|jj|_|jj|_dS)NforceT)_obj_lockrr2r1release)selfr)r/r0rrr r&s  zSynchronizedBase.__init__cCs |jjS)N)rS __enter__)rUrrr rVszSynchronizedBase.__enter__cGs|jj|S)N)rS__exit__)rUr(rrr rWszSynchronizedBase.__exit__cCs t|t|j|jffS)N)rr rRrS)rUrrr __reduce__s zSynchronizedBase.__reduce__cCs|jS)N)rR)rUrrr get_objszSynchronizedBase.get_objcCs|jS)N)rS)rUrrr get_lockszSynchronizedBase.get_lockcCsdt|j|jfS)Nz<%s wrapper for %s>)r5rCrR)rUrrr __repr__szSynchronizedBase.__repr__) rC __module__ __qualname__r&rVrWrXrYrZr[rrrr rDs      rDc@seZdZedZdS)r;valueN)rCr\r]r8r^rrrr r;s r;c@sLeZdZddZddZddZddZd d Zd S) r?cCs t|jS)N)r,rR)rUrrr __len__szSynchronizedArray.__len__c Cs||j|SWdQRXdS)N)rR)rUrrrr __getitem__szSynchronizedArray.__getitem__c Cs|||j|r^rawN)rCr\r]r8r^rgrrrr r>s  r>)*rweakrefrrcontextr reductionr__all__r=Zc_wcharZc_byteZc_ubyteZc_shortZc_ushortZc_intZc_uintZc_longZc_ulongZc_floatZc_doubler"r!rrr r r r rIrr8rPrNWeakKeyDictionaryr@objectrDr;r?r>rrrr  s:         __pycache__/util.cpython-35.pyc000064400000024222147554447510012400 0ustar00 Yfy-@sTddlZddlZddlZddlZddlZddlZddlmZddlm Z ddddd d d d d ddddddgZ dZ dZ dZ dZdZdZdZdadaddZddZddZddZdd Zdd d Zd!d ZejZejZd"d#Zd$d Z iZ!ejZ"Gd%dde#Z$dd&d'Z%d(d Z&da'eee%e j(e j)d)d*Z*ej+e*Gd+dde#Z,Gd,ddej-Z.yej/d-Z0Wne1k r+d.Z0YnXd/dZ2d0d1Z3d2d3Z4dS)4N)_args_from_interpreter_flags)process sub_debugdebuginfo sub_warning get_logger log_to_stderr get_temp_dirregister_after_fork is_exitingFinalizeForkAwareThreadLockForkAwareLocalclose_all_fds_exceptSUBDEBUG SUBWARNING Zmultiprocessingz+[%(levelname)s/%(processName)s] %(message)sFcGstrtjt||dS)N)_loggerlogr)msgargsr9/opt/alt/python35/lib64/python3.5/multiprocessing/util.pyr,scGstrtjt||dS)N)rrDEBUG)rrrrrr0scGstrtjt||dS)N)rrINFO)rrrrrr4scGstrtjt||dS)N)rrr)rrrrrr8sc Csddl}|jzts|jtadt_ttdrctjt tj t n2tj j t fiftj j t fifWd|jXtS)z0 Returns logger used by multiprocessing rN unregister)loggingZ _acquireLockrZ getLogger LOGGER_NAMEZ propagatehasattratexitr _exit_functionregisterZ _exithandlersremoveappendZ _releaseLock)r!rrrr <s     cCsgddl}t}|jt}|j}|j||j||r]|j|dat S)zB Turn on logging and add a handler which prints to stderr rNT) r!r Z FormatterDEFAULT_LOGGING_FORMATZ StreamHandlerZ setFormatterZ addHandlerZsetLevel_log_to_stderrr)levelr!ZloggerZ formatterZhandlerrrrr Ws      cCstjjjd}|dkrddl}ddl}|jdd}td|td|j d|gdd |tjjd<|S) Ntempdirrprefixzpymp-zcreated temp directory %sr exitprioritydi) rcurrent_processZ_configgetshutiltempfileZmkdtemprrZrmtree)r,r2r3rrrr ms  cCsttj}|jx`|D]X\\}}}}y||Wq#tk rz}ztd|WYdd}~Xq#Xq#WdS)Nz after forker raised exception %s)list_afterfork_registryitemssort Exceptionr)r6indexZidentfuncobjerrr_run_after_forkerss r=cCs#|tttt||f_finalizer_counter_keyosgetpid_pid_finalizer_registry)selfr;callbackrkwargsr.rrr__init__s$   zFinalize.__init__c Csy||j=Wntk r,|dYnX|j|krR|dd}n4|d|j|j|j|j|j|j}d|_|_|_|_|_|SdS)zQ Run the callback unless it has already been called or cancelled zfinalizer no longer registeredz+finalizer ignored because different processNz/finalizer calling %s with args %s and kwargs %s)rKKeyErrorrNrGrHrIrF)rPwrrOrrMresrrr__call__s   %zFinalize.__call__c CsLyt|j=Wntk r"Yn&Xd|_|_|_|_|_dS)z3 Cancel finalization of the object N)rOrKrTrFrGrHrI)rPrrrcancels  zFinalize.cancelcCs |jtkS)zS Return whether this finalizer is still waiting to invoke callback )rKrO)rPrrr still_activeszFinalize.still_activecCsy|j}Wnttfk r0d}YnX|dkrKd|jjSd|jjt|jd|jf}|jr|dt|j7}|j r|dt|j 7}|j ddk r|dt|j d7}|dS) Nz<%s object, dead>z<%s object, callback=%s__name__z, args=z , kwargs=rz, exitprority=>) rFAttributeError TypeError __class__rZgetattrrGrHstrrIrK)rPr;xrrr__repr__s      zFinalize.__repr__) rZ __module__ __qualname____doc__rSrOrrLrMrWrXrYrbrrrrrs  c stdkrdSdkr+ddnfddfddttD}|jddxl|D]d}tj|}|dk rstd |y |Wqstk rd dl}|jYqsXqsWdkrtjdS) z Run all finalizers whose exit priority is not None and at least minpriority Finalizers with highest priority are called first; finalizers with the same priority will be called in reverse order of creation. NcSs|ddk S)Nrr)prrrsz!_run_finalizers..cs|ddk o|dkS)Nrr)rf) minpriorityrrrgscs"g|]}|r|qSrr).0key)frr s z#_run_finalizers..reverseTz calling %sr) rOr4r7r1rr8 traceback print_excclear)rhkeysrjZ finalizerrnr)rkrhr_run_finalizerss$         rrcCstptdkS)z6 Returns true if the process is shutting down N)_exitingrrrrr scCstsda|d|d|d|dk rx7|D],}|jrC|d|j|jjqCWx+|D] }|d|j|jq}W|d|dS)NTzprocess shutting downz2running all "atexit" finalizers with priority >= 0rz!calling terminate() for daemon %szcalling join() for process %sz)running the remaining "atexit" finalizers)rsZdaemonnameZ_popenZ terminatejoin)rrrractive_childrenr0rfrrrr%s      r%c@s@eZdZddZddZddZddZd S) rcCs|jt|tjdS)N)_resetr r)rPrrrrSKs zForkAwareThreadLock.__init__cCs1tj|_|jj|_|jj|_dS)N) threadingZLock_lockacquirerelease)rPrrrrwOszForkAwareThreadLock._resetcCs |jjS)N)ry __enter__)rPrrrr|TszForkAwareThreadLock.__enter__cGs|jj|S)N)ry__exit__)rPrrrrr}WszForkAwareThreadLock.__exit__N)rZrcrdrSrwr|r}rrrrrJs    c@s(eZdZddZddZdS)rcCst|dddS)NcSs |jjS)N)__dict__rp)r;rrrrg]sz)ForkAwareLocal.__init__..)r )rPrrrrS\szForkAwareLocal.__init__cCst|ffS)N)rA)rPrrr __reduce__^szForkAwareLocal.__reduce__N)rZrcrdrSrrrrrr[s   SC_OPEN_MAXcCst|dtg}|j|dtks<tdx>tt|dD]&}tj||d||dqSWdS)Nrz fd too larger)r4MAXFDr7rCrangelenrL closerange)Zfdsirrrrjs  cCstjdkrdSytjjWnttfk r>YnXyPtjtjtj}yt|ddt_Wntj|YnXWnttfk rYnXdS)NclosefdF) sysstdincloseOSError ValueErrorrLopendevnullO_RDONLY)fdrrr _close_stdints  rcCsddl}tttt|}tj\}}zM|j|tj|gd|ddddddd d ||dddSWdtj |tj |XdS) NrTrFrrrrrr) _posixsubprocesstuplesortedmaprBrLpipeZ fork_execfsencoder)pathrZpassfdsrZ errpipe_readZ errpipe_writerrrspawnv_passfdss  r)5rL itertoolsrrDr$rx subprocessrr__all__ZNOTSETrrrrr"r)rr*rrrrr r r WeakValueDictionaryr5countr?r=r rOrJobjectrrrr rsrvr0r%r&rZlocalrsysconfrr8rrrrrrr sd                  S,  (     __pycache__/forkserver.cpython-35.opt-1.pyc000064400000015756147554447510014566 0ustar00 Yf @sdddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddlm Z ddlm Z ddlm Z ddlm Z ddlmZd d d d gZd ZejdZGdddeZddddZddZddZddZeZejZejZejZejZdS)N) connection)process) reduction)semaphore_tracker)spawn)utilensure_runningget_inherited_fdsconnect_to_new_processset_forkserver_preloadQc@sLeZdZddZddZddZddZd d Zd S) ForkServercCs:d|_d|_d|_tj|_dg|_dS)N__main__)_forkserver_address_forkserver_alive_fd_inherited_fds threadingZLock_lock_preload_modules)selfr?/opt/alt/python35/lib64/python3.5/multiprocessing/forkserver.py__init__!s    zForkServer.__init__cCs5tdd|jDs(td||_dS)z>Set list of module names to try to load in forkserver process.css!|]}t|tkVqdS)N)typestr).0modrrr *sz4ForkServer.set_forkserver_preload..z&module_names must be a list of stringsN)allr TypeError)rZ modules_namesrrrr (s z!ForkServer.set_forkserver_preloadcCs|jS)zReturn list of fds inherited from parent process. This returns None if the current process was not started by fork server. )r)rrrrr .szForkServer.get_inherited_fdscCs |jt|dtkr,tdtjtj}|j|jtj \}}tj \}}|||j t j g}||7}zJyt j||||fSWn%tj|tj|YnXWdtj|tj|XWdQRXdS)a;Request forkserver to create a child process. Returns a pair of fds (status_r, data_w). The calling process can read the child process's pid and (eventually) its returncode from status_r. The calling process should write to data_w the pickled preparation and process data. z too many fdsN)r lenMAXFDS_TO_SEND ValueErrorsocketAF_UNIXZconnectrospiperrZgetfdrZsendfdsclose)rfdsZclientZparent_rchild_wchild_rZparent_wZallfdsrrrr 6s&        z!ForkServer.connect_to_new_processc s|jtj|jdk r'dSdd}|jr}ddhtjd}tfdd|jD}ni}t j t j  }t j d }|j |tj|d |jtj\}}zyy|j|g}||j||j|f;}tj}|gtj} | d |g7} tj|| |} Wntj|YnXWdtj|X||_||_WdQRXWdQRXdS) zMake sure that a fork server is running. This can be called from any process. Note that usually a child process will just reuse the forkserver started by its parent, so ensure_running() will do nothing. Nz-from multiprocessing.forkserver import main; zmain(%d, %d, %r, **%r) main_pathsys_pathignorec3s-|]#\}}|kr||fVqdS)Nr)rxy) desired_keysrrres z,ForkServer.ensure_running..r'iz-c)rrr rrrZget_preparation_datadictitemsr&r'rZarbitrary_addressZbindr(chmodZlistenr)filenoZget_executablerZ_args_from_interpreter_flagsZspawnv_passfdsr*r) rcmddatalistenerZaddressalive_rZalive_wZ fds_to_passZexeargspidr)r3rr Ss>    (       zForkServer.ensure_runningN)__name__ __module__ __qualname__rr r r r rrrrrs     rc4CsH|rd|krN|dk rNdtj_ztj|Wdtj`Xx1|D])}yt|WqUtk r}YqUXqUWtjt j t j t j t j i}dd|jD}tjtjd|f}tjP} |jt_| j|tj| j|tjxyx$dd| jD} | r+Pq+W|| krat|jd } d } tjd krzPyt| |||Wn2tk rtj tj!tj"j#YnXWdtj$| XWdQRXWq%t%k r1} z| j&t&j'krWYdd} ~ Xq%Xq%WWdQRXWdQRXdS) zRun forkserver.rNTcSs+i|]!\}}tj|||qSr)signal)rsigvalrrr s zmain..r7cSsg|]\}}|jqSr)Zfileobj)rkeyZeventsrrr s zmain..rr)(rZcurrent_processZ _inheritingrZimport_main_path __import__ ImportErrorrZ _close_stdinrASIGCHLDSIG_IGNSIGINTSIG_DFLr5r&r' selectorsZDefaultSelectorZ getsockname _forkserverrregisterZ EVENT_READZselect SystemExitZacceptr(fork _serve_one Exceptionsys excepthookexc_infostderrflush_exitOSErrorerrnoZ ECONNABORTED)Z listener_fdr;Zpreloadr.r/modnamehandlersZ old_handlersr:ZselectorZrfdsscodeerrrmainsR         rac Cs|jtj|x*|jD]\}}tj||q$Wtj|td}|j|^}}t_} t_ | t j _ t |tjdtjkrddl} | jtj|} t || dS)Nrrandomr)r*r(r5rArZrecvfdsr$rNrrrZ_semaphore_trackerZ_fdwrite_unsignedgetpidrTmodulesrbZseedr_main) r^r:r;r]rBrCr+r-r,Zstfdrbr_rrrrRs      rRcCsqd}tj}xNt||kr_tj||t|}|sRtd||7}qWtj|dS)Nzunexpected EOFr)UNSIGNED_STRUCTsizer#r(readEOFErrorZunpack)fdr9Zlengthr^rrr read_unsigneds  rmcCsZtj|}xD|rUtj||}|dkrBtd||d}qWdS)Nrzshould not get here)rhZpackr(write RuntimeError)rlnmsgnbytesrrrrcs    rc)r[r(rMrAr&ZstructrTrrrrrrr__all__r$ZStructrhobjectrrarRrmrcrNr r r r rrrrs6          h= !    __pycache__/synchronize.cpython-35.opt-1.pyc000064400000027262147554447510014744 0ustar00 Yf/ @sddddddgZddlZddlZddlZddlZddlmZd d lmZd d lm Z d d lm Z ydd lm Z m Z Wn*e k re ddddYnXeed\ZZej jZGdddeZ Gddde ZGdddeZGddde ZGddde ZGdddeZGdddeZGdddejZdS)LockRLock SemaphoreBoundedSemaphore ConditionEventN)time)context)process)util)SemLock sem_unlinkz*This platform lacks a functioning sem_openz( implementation, therefore, the requiredz+ synchronization primitives needed will notz function, see issue 3770.c@seZdZejZddZeddZddZ ddZ d d Z d d Z d dZ eddZdS)r c CsK|dkrtjj}|j}tjdkp?|dk}xbtdD]H}y,tj||||j |}|_ Wnt k rYqOXPqOWt dt j d|j|jtjdkrdd} t j|| |j jdk rGdd lm} | |j jt j|tj|j jfd d dS) Nwin32forkdzcannot find name for semaphorezcreated semlock with handle %scSs|jjdS)N)_semlock _after_fork)objr@/opt/alt/python35/lib64/python3.5/multiprocessing/synchronize.pyrHsz%SemLock.__init__.._after_forkr )registerZ exitpriorityr)r Z_default_contextZ get_contextZget_start_methodsysplatformrange_multiprocessingr _make_namerFileExistsErrorr debughandle _make_methodsZregister_after_forknamesemaphore_trackerrZFinalize_cleanup) selfkindvaluemaxvaluectxr"Z unlink_nowislrrrrr__init__3s.      zSemLock.__init__cCs(ddlm}t|||dS)Nr ) unregister)r#r-r)r"r-rrrr$Us zSemLock._cleanupcCs"|jj|_|jj|_dS)N)racquirerelease)r%rrrr![szSemLock._make_methodscCs |jjS)N)r __enter__)r%rrrr0_szSemLock.__enter__cGs|jj|S)N)r__exit__)r%argsrrrr1bszSemLock.__exit__cCsbtj||j}tjdkr@tjj|j}n |j}||j|j |j fS)Nr) r assert_spawningrrrZget_spawning_popenZduplicate_for_childr r&r(r")r%r+hrrr __getstate__es    zSemLock.__getstate__cCs8tjj||_tjd|d|jdS)Nz recreated blocker with handle %rr)rr Z_rebuildrr rr!)r%staterrr __setstate__nszSemLock.__setstate__cCs$dtjjdttjfS)Nz%s-%sZ semprefix)r current_processZ_confignextr _randrrrrrsszSemLock._make_nameN)__name__ __module__ __qualname__tempfileZ_RandomNameSequencer:r, staticmethodr$r!r0r1r5r7rrrrrr /s   "    r c@s7eZdZdddZddZddZdS) rr cCs tj|t|td|dS)Nr))r r, SEMAPHORE SEM_VALUE_MAX)r%r'r)rrrr,~szSemaphore.__init__cCs |jjS)N)r _get_value)r%rrr get_valueszSemaphore.get_valuec CsBy|jj}Wntk r-d}YnXd|jj|fS)Nunknownz<%s(value=%s)>)rrB Exception __class__r;)r%r'rrr__repr__s   zSemaphore.__repr__N)r;r<r=r,rCrGrrrrr|s  c@s+eZdZdddZddZdS)rr cCs tj|t||d|dS)Nr))r r,r@)r%r'r)rrrr,szBoundedSemaphore.__init__c CsKy|jj}Wntk r-d}YnXd|jj||jjfS)NrDz<%s(value=%s, maxvalue=%s)>)rrBrErFr;r()r%r'rrrrGs   zBoundedSemaphore.__repr__N)r;r<r=r,rGrrrrrs c@s(eZdZddZddZdS)rcCs tj|tddd|dS)Nr r))r r,r@)r%r)rrrr,sz Lock.__init__c Csy|jjrPtjj}tjjdkr|dtjj7}nB|jjdkrnd}n$|jjdkrd}nd}Wnt k rd}YnXd |j j |fS) N MainThread|r NonerSomeOtherThreadSomeOtherProcessrDz<%s(owner=%s)>) r_is_miner r8r" threadingcurrent_threadrB_countrErFr;)r%r"rrrrGs     z Lock.__repr__N)r;r<r=r,rGrrrrrs  c@s(eZdZddZddZdS)rcCs tj|tddd|dS)Nr r))r r,RECURSIVE_MUTEX)r%r)rrrr,szRLock.__init__c Csy|jjr_tjj}tjjdkrM|dtjj7}|jj}nT|jjdkrd \}}n0|jjdkrd \}}n d \}}Wnt k rd\}}YnXd |j j ||fS)NrHrIr rJrrKnonzerorLrDz <%s(%s, %s)>)rJr)rKrR)rLrR)rDrD) rrMr r8r"rNrOrPrBrErFr;)r%r"countrrrrGs zRLock.__repr__N)r;r<r=r,rGrrrrrs  c@seZdZdddZddZddZdd Zd d Zd d ZddZ dddZ ddZ ddZ dddZ dS)rNcCsY|p|j|_|jd|_|jd|_|jd|_|jdS)Nr)r_lockr_sleeping_count _woken_count_wait_semaphorer!)r%lockr)rrrr,s zCondition.__init__cCs)tj||j|j|j|jfS)N)r r3rTrUrVrW)r%rrrr5s  zCondition.__getstate__cCs,|\|_|_|_|_|jdS)N)rTrUrVrWr!)r%r6rrrr7szCondition.__setstate__cCs |jjS)N)rTr0)r%rrrr0szCondition.__enter__cGs|jj|S)N)rTr1)r%r2rrrr1szCondition.__exit__cCs"|jj|_|jj|_dS)N)rTr.r/)r%rrrr!szCondition._make_methodsc Cs[y&|jjj|jjj}Wntk r@d}YnXd|jj|j|fS)NrDz <%s(%s, %s)>)rUrrBrVrErFr;rT)r%Z num_waitersrrrrGs   zCondition.__repr__c Cs|jj|jjj}x!t|D]}|jjq,Wz|jjd|SWd|jjx!t|D]}|jjqwWXdS)NT) rUr/rTrrPrrWr.rV)r%timeoutrSr*rrrwaits  zCondition.waitcCskx(|jjdr*|jjd}qW|jjdrg|jj|jj|jjddS)NF)rVr.rUrWr/)r%resrrrnotifys  zCondition.notifycCsx(|jjdr*|jjd}qWd}x-|jjdr`|jj|d7}q4W|rx!t|D]}|jjqtWx|jjdrqWdS)NFrr )rVr.rUrWr/r)r%r[Zsleepersr*rrr notify_all s zCondition.notify_allcCs|}|r|S|dk r/t|}n d}d}xF|s|dk rj|t}|dkrjP|j||}q>W|S)Nr)_timerZ)r%Z predicaterYresultZendtimeZwaittimerrrwait_for7s        zCondition.wait_for)r;r<r=r,r5r7r0r1r!rGrZr\r]r`rrrrrs         c@sOeZdZddZddZddZddZd d d Zd S) rcCs.|j|j|_|jd|_dS)Nr)rr_condr_flag)r%r)rrrr,OszEvent.__init__c Cs<|j,|jjdr-|jjdSdSWdQRXdS)NFT)rarbr.r/)r%rrris_setSs   z Event.is_setc Cs?|j/|jjd|jj|jjWdQRXdS)NF)rarbr.r/r])r%rrrsetZs  z Event.setc Cs%|j|jjdWdQRXdS)NF)rarbr.)r%rrrclear`s z Event.clearNc Csn|j^|jjdr,|jjn|jj||jjdr_|jjdSdSWdQRXdS)NFT)rarbr.r/rZ)r%rYrrrrZds  z Event.wait)r;r<r=r,rcrdrerZrrrrrMs     c@seZdZddddZddZddZedd Zejd d Zed d Z e jd d Z dS)BarrierNc Cssddl}ddlm}||jdd}|j}|j|||||fd|_d|_dS)Nrr ) BufferWrapperr*r)structheaprgZcalcsizerr7_staterP) r%ZpartiesactionrYr)rhrgwrapperZcondrrrr,vs   zBarrier.__init__cCsC|\|_|_|_|_|_|jjjd|_dS)Nr*)_parties_action_timeoutra_wrapperZcreate_memoryviewcast_array)r%r6rrrr7s$zBarrier.__setstate__cCs"|j|j|j|j|jfS)N)rmrnrorarp)r%rrrr5szBarrier.__getstate__cCs |jdS)Nr)rr)r%rrrrjszBarrier._statecCs||jdrrr^r r r r r ImportErrorlistrrQr@rAobjectrrrrrrrfrrrr s0       Mz'__pycache__/sharedctypes.cpython-35.opt-1.pyc000064400000016365147554447510015071 0ustar00 YfT@sddlZddlZddlmZddlmZddlmZddlmZddd d d d gZ d ej dej dej dej dejdejdejdejdejdejdejdeji ZddZddZddZddddd d Zddddd!d Zd"d Zddd#d Zd$d%Zd&d'Zd(d)Z d*Z!iZ"ej#Z$Gd+d,d,e%Z&Gd-d.d.e&Z'Gd/d0d0e&Z(Gd1d2d2e(Z)dS)3N)heap) get_context)assert_spawning)ForkingPicklerRawValueRawArrayValueArraycopy synchronizedcubBhHiIlLfdcCs.tj|}tj|}t||dS)N)ctypessizeofrZ BufferWrapper rebuild_ctype)type_sizewrapperrA/opt/alt/python35/lib64/python3.5/multiprocessing/sharedctypes.py _new_value&sr!cGsTtj||}t|}tjtj|dtj||j||S)z> Returns a ctypes object allocated from shared memory r)typecode_to_typegetr!rmemset addressofr__init__)typecode_or_typeargsrobjrrr r+s  % cCstj||}t|tr`||}t|}tjtj|dtj||S|t |}t|}|j ||SdS)z= Returns a ctypes array allocated from shared memory rN) r"r# isinstanceintr!rr$r%rlenr&)r'size_or_initializerrr)resultrrr r5s  %  lockTctxcGsxt||}|dkr|S|dkrF|p7t}|j}t|dsetd|t||d|S)z6 Return a synchronization wrapper for a Value FTNacquirez'%r' has no method 'acquire'r0)TN)rrRLockhasattrAttributeErrorr )r'r/r0r(r)rrr r Es   cCsxt||}|dkr|S|dkrF|p7t}|j}t|dsetd|t||d|S)z9 Return a synchronization wrapper for a RawArray FTNr1z'%r' has no method 'acquire'r0)TN)rrr2r3r4r )r'r-r/r0r)rrr r Ss   cCs)tt|}|tj|d<|S)Nr)r!typerZpointer)r)Znew_objrrr r asc Cs|p t}t|tjr1t|||St|tjru|jtjkret|||St |||St |}yt |}Wnkt k rdd|j D}tdd|D}d|j}t |tf|}t |us z synchronized..css!|]}|t|fVqdS)N) make_property)r6namerrr vszsynchronized.. Synchronized)rr*rZ _SimpleCDatar;r _type_c_charSynchronizedStringSynchronizedArrayr5 class_cacheKeyErrorZ_fields_dict__name__SynchronizedBase)r)r/r0clssclsnamesrZ classnamerrr r fs    "cCsXt|t|tjr8t|j|j|jffStt||jdffSdS)N) rr*rr rr<_wrapperZ_length_r5)r)rrr reduce_ctypes rIcCsN|dk r||}tj|t|j}|j|}||_|S)N)rregisterrIZcreate_memoryviewZ from_bufferrH)rrZlengthZbufr)rrr rs    rc CsYy t|SWnFtk rTi}tt|fd|||t|<||SYnXdS)N) prop_cacherAexectemplate)r9rrrr r8s  r8z def get%s(self): self.acquire() try: return self._obj.%s finally: self.release() def set%s(self, value): self.acquire() try: self._obj.%s = value finally: self.release() %s = property(get%s, set%s) c@sjeZdZddddZddZddZdd Zd d Zd d ZddZ dS)rDNcCsa||_|r||_n$|p-tdd}|j|_|jj|_|jj|_dS)NZforceT)_obj_lockrr2r1release)selfr)r/r0rrr r&s  zSynchronizedBase.__init__cCs |jjS)N)rP __enter__)rRrrr rSszSynchronizedBase.__enter__cGs|jj|S)N)rP__exit__)rRr(rrr rTszSynchronizedBase.__exit__cCs t|t|j|jffS)N)rr rOrP)rRrrr __reduce__s zSynchronizedBase.__reduce__cCs|jS)N)rO)rRrrr get_objszSynchronizedBase.get_objcCs|jS)N)rP)rRrrr get_lockszSynchronizedBase.get_lockcCsdt|j|jfS)Nz<%s wrapper for %s>)r5rCrO)rRrrr __repr__szSynchronizedBase.__repr__) rC __module__ __qualname__r&rSrTrUrVrWrXrrrr rDs      rDc@seZdZedZdS)r;valueN)rCrYrZr8r[rrrr r;s r;c@sLeZdZddZddZddZddZd d Zd S) r?cCs t|jS)N)r,rO)rRrrr __len__szSynchronizedArray.__len__c Cs||j|SWdQRXdS)N)rO)rRrrrr __getitem__szSynchronizedArray.__getitem__c Cs|||j|r[rawN)rCrYrZr8r[rdrrrr r>s  r>)*rweakrefrrcontextrZ reductionr__all__r=Zc_wcharZc_byteZc_ubyteZc_shortZc_ushortZc_intZc_uintZc_longZc_ulongZc_floatZc_doubler"r!rrr r r r rIrr8rNrLWeakKeyDictionaryr@objectrDr;r?r>rrrr  s:         __pycache__/managers.cpython-35.pyc000064400000105102147554447510013215 0ustar00 Yf{@sddddgZddlZddlZddlZddlZddlmZddlmZdd l m Z dd l m Z dd l m Z dd l m Z dd l mZddl mZddl mZddZejejedddddfDZedek rJddZxeD]Zejeeq0WGdddeZfiddZddZGdddeZd d!Zd"d#ZGd$d%d%eZGd&d'd'eZ d(e j!e j"fd)e j#e j$fiZ%Gd*ddeZ&Gd+d,d,e'Z(Gd-ddeZ)d.d/Z*id0d1Z+dddd2d3d4Z,Gd5d6d6eZ-Gd7d8d8eZ.d2d9d:Z/Gd;d<d<e)Z0Gd=d>d>e)Z1Gd?d@d@e1Z2GdAdBdBe)Z3GdCdDdDe)Z4GdEdFdFe)Z5GdGdHdHe)Z6e+dIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\fZ7Gd]d^d^e7Z8e+d_dKdLdMdNdRd`dadbdcdddXdddedfdfZ9e+dgdNdMdRfZ:e+dhdidjdkdldmdndodpdqdrdsf Z;djdtdpdtdrdtdldudmduie;_<Gdvdhdhe;Z=Gdwdde&Z>e>jdxej?e>jdyej?e>jdzej@e3e>jd{ejAe1e>jd|ejBe1e>jd}ejCe1e>jd~ejDe1e>jdejEe2e>jdejFe4e>jde jGe=e>jdee8e>jdeHe9e>jd8e.e6e>jd:e/e:e>jd6e-e5e>jdude0dde>jdtdddS) BaseManager SyncManager BaseProxyTokenN)time) format_exc) connection)context)pool)process) reduction)util) get_contextcCstj|j|jffS)N)arraytypecodetobytes)ar=/opt/alt/python35/lib64/python3.5/multiprocessing/managers.py reduce_array%srcCs(g|]}tti|qSr)typegetattr).0namerrr )s ritemskeysvaluescCstt|ffS)N)list)objrrrrebuild_as_list+sr!c@sLeZdZdZdZddZddZd d Zd d Zd S)rz4 Type to uniquely indentify a shared object typeidaddressidcCs!||||_|_|_dS)N)r"r#r$)selfr"r#r$rrr__init__:szToken.__init__cCs|j|j|jfS)N)r"r#r$)r%rrr __getstate__=szToken.__getstate__cCs|\|_|_|_dS)N)r"r#r$)r%staterrr __setstate__@szToken.__setstate__cCs#d|jj|j|j|jfS)Nz %s(typeid=%r, address=%r, id=%r)) __class____name__r"r#r$)r%rrr__repr__CszToken.__repr__N)r"r#r$) r+ __module__ __qualname____doc__ __slots__r&r'r)r,rrrrr4s    cCsN|j||||f|j\}}|dkr;|St||dS)zL Send a message to manager using connection `c` and return response z#RETURNN)sendrecvconvert_to_error)cr$ methodnameargskwdskindresultrrrdispatchKs  r:cCs~|dkr|S|dkr>t|tks4tt|S|dkrpt|tksbttd|StdSdS)Nz#ERRORz #TRACEBACKz#UNSERIALIZABLEzUnserializable message: %s zUnrecognized message type)rstrAssertionError RemoteError ValueError)r8r9rrrr3Us    r3c@seZdZddZdS)r=cCs)ddddt|jdddS)N -Kr)r;r6)r%rrr__str__bszRemoteError.__str__N)r+r-r.rBrrrrr=as r=cCsIg}x<t|D].}t||}t|r|j|qW|S)z4 Return a list of names of methods of `obj` )dirrcallableappend)r temprfuncrrr all_methodsis  rHcCsddt|DS)zP Return a list of names of methods of `obj` which do not start with '_' cSs&g|]}|ddkr|qS)r_r)rrrrrrxs z"public_methods..)rH)r rrrpublic_methodstsrJc @seZdZdZdddddddd d g Zd d Zd dZddZddZddZ ddZ ddZ ddZ de de de iZ ddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0S)1ServerzM Server class which runs in a process controlled by a manager object shutdowncreateaccept_connection get_methods debug_infonumber_of_objectsdummyincrefdecrefcCst|tst||_tj||_t|\}}|d|dd|_|jj |_ ddffi|_ i|_ t j |_dS)Nr#Zbacklog0) isinstancebytesr<registryr AuthenticationStringauthkeylistener_clientlistenerr# id_to_objid_to_refcount threadingRLockmutex)r%rYr#r[ serializerListenerClientrrrr&s  zServer.__init__cCstj|_|tj_zqtjd|j}d|_|j y*x#|jj sq|jj dqOWWnt t fk rYnXWdtjtjkrtjdtjt_tjt_tjdXdS)z( Run the server forever targetTrNzresetting stdout, stderrr)r`Event stop_eventr current_process_manager_serverThreadaccepterdaemonstartis_setwaitKeyboardInterrupt SystemExitsysstdout __stdout__rdebug __stderr__stderrexit)r%rlrrr serve_forevers       zServer.serve_foreverc Csgx`y|jj}Wntk r-wYnXtjd|jd|f}d|_|jqWdS)Nrfr6T)r]ZacceptOSErrorr`rkhandle_requestrmrn)r%r4trrrrls  zServer.accepterc 'Csd}}}yvtj||jtj||j|j}|\}}}}||jksttd|t||}Wn!tk rdt f} YnGXy||||}Wn!tk rdt f} Yn Xd|f} y|j | Wntk r} zdy|j dt fWntk rBYnXt j d| t j d|t j d| WYdd} ~ XnX|j dS)z) Handle a new connection Nz%r unrecognizedz #TRACEBACKz#RETURNzFailure to send message: %rz ... request was %rz ... exception was %r)r Zdeliver_challenger[Zanswer_challenger2publicr<r Exceptionrr1rinfoclose) r%r4funcnamer9requestignorer6r7rGmsgerrrr|s4     #zServer.handle_requestc*Cs%tjdtjj|j}|j}|j}x|jj s y,d}}|}|\}}} } ||\}} } || krt d|t || ft ||} y| | | }Wn1t k r}zd|f}WYdd}~XnpX| o| j|d}|re|j|||\}}t||j|}d||ff}n d|f}Wnt k r|dkrdtf}n\y8|j|}|||||| | }d|f}Wn!t k rdtf}YnXYnXtk r7tjdtjjtjd Yn!t k rWdtf}YnXyMy||Wn8t k r}z|d tfWYdd}~XnXWq7t k r}zUtjd tjjtjd |tjd ||jtjdWYdd}~Xq7Xq7WdS)zQ Handle requests from the proxies in a particular process/thread z$starting server thread to service %rNz+method %r of %r object is not in exposed=%rz#ERRORz#PROXYz#RETURNz #TRACEBACKz$got EOF -- exiting thread serving %rrz#UNSERIALIZABLEzexception in thread serving %rz ... message was %rz ... exception was %rr)rrvr`current_threadrr2r1r^rhroAttributeErrorrrrgetrMrr#rfallback_mappingEOFErrorrsryrr)r%connr2r1r^r5r ridentr6r7exposedZ gettypeidZfunctionresrrr"ZridentZrexposedtokenZ fallback_funcr9rrr serve_clientsl              *  zServer.serve_clientcCs|S)Nr)r%rrr rrrfallback_getvalueszServer.fallback_getvaluecCs t|S)N)r;)r%rrr rrr fallback_str"szServer.fallback_strcCs t|S)N)repr)r%rrr rrr fallback_repr%szServer.fallback_reprrBr,z #GETVALUEcCsdS)Nr)r%r4rrrrR.sz Server.dummycCs|jg}t|jj}|jxV|D]N}|dkr6|jd||j|t|j|dddfq6Wdj|SWdQRXdS)zO Return some info --- useful to spot problems with refcounting rVz %s: refcount=%s %srNrAr?) rbrr^rsortrEr_r;join)r%r4r9rrrrrrP1s      *zServer.debug_infocCst|jdS)z* Number of shared objects r)lenr^)r%r4rrrrQ@szServer.number_of_objectscCsXzCytjd|jdWnddl}|jYnXWd|jjXdS)z' Shutdown this process z!manager received shutdown message#RETURNNr)rN)rrvr1 traceback print_excrhset)r%r4rrrrrLFs  zServer.shutdownc OsB|j2|j|\}}}}|dkr[t|dkrH| sNt|d} n|||} |dkrt| }|dk rt|tkstt|t|}dt| } t j d|| | t ||f|j | <| |j krd|j | <|j|| | t|fSWdQRXdS)z> Create a new shared object and return its id Nrrz%xz&%r callable returned object with id %r)rbrYrr<rJrdictrr$rrvrr^r_rStuple) r%r4r"r6r7rDrmethod_to_typeid proxytyper rrrrrMSs$       z Server.createcCst|j|jdS)zL Return the methods of the shared object indicated by token r)rr^r$)r%r4rrrrrOvszServer.get_methodscCs-|tj_|jd|j|dS)z= Spawn a new thread to serve this connection #RETURNN)rN)r`rrr1r)r%r4rrrrrN|s zServer.accept_connectionc Cs&|j|j|d7 Connect manager object to the server process r[NrR) r\rrrr:rrrr)r%rdrerrrrconnectszBaseManager.connectc Csj|jjtjkst|dk r@t| r@tdtjdd\}}|j j dt |j d|j |j|j|j|||f|_djdd |jjD}t |jd ||j_|jj|j|j|_|jtj|j_tj|t |jd|j|j|j|j|jfd d |_dS) z@ Spawn a server process for this manager object Nzinitializer must be a callableZduplexFrfr6:css|]}t|VqdS)N)r;)rirrr sz$BaseManager.start..r@ exitpriorityr)rrrrr<rD TypeErrorr ZPiperZProcessr _run_serverrrrr_processrZ _identityr+rrnrr2rrFinalize_finalize_managerrrL)r% initializerinitargsreaderwriterrrrrrns(  "   zBaseManager.startc Csi|dk r|||j||||}|j|j|jtjd|j|jdS)z@ Create a server, report its address and run it Nzmanager serving at %r)_Serverr1r#rrrrz) clsrYr#r[rcrrrserverrrrrs   zBaseManager._run_serverc Os|jjtjks!td|j|jd|j}z)t|dd|f||\}}Wd|j Xt ||j||fS)zP Create a new shared object; return the token and exposed tuple zserver not yet startedr[NrM) rrrrr<rrrr:rr)r%r"r6r7rr$rrrr_creates !) zBaseManager._createcCs;|jdk r7|jj||jjs7d|_dS)zC Join the manager process (if it has been spawned) N)rris_alive)r%timeoutrrrrszBaseManager.joinc CsA|j|jd|j}zt|ddSWd|jXdS)zS Return some info about the servers shared objects and connections r[NrP)rrrr:r)r%rrrr _debug_infoszBaseManager._debug_infoc CsA|j|jd|j}zt|ddSWd|jXdS)z5 Return the number of shared objects r[NrQ)rrrr:r)r%rrrr_number_of_objects"szBaseManager._number_of_objectscCs>|jjtjkr|j|jjtjks:t|S)N)rrrrrnrr<)r%rrr __enter__,s zBaseManager.__enter__cCs|jdS)N)rL)r%exc_typeexc_valexc_tbrrr__exit__2szBaseManager.__exit__cCs|jrtjdy8||d|}zt|ddWd|jXWntk reYnX|jdd|jrtjdt|drtjd |j|jdd |jrtjd t j |_ yt j |=Wntk r YnXdS) zQ Shutdown the manager process; will be registered as a finalizer z#sending shutdown message to managerr[NrLrg?zmanager still alive terminatez'trying to `terminate()` manager processg?z#manager still alive after terminate)rrrr:rrrhasattrrrrrr_address_to_localKeyError)r r#r[r(rrrrrr5s.           zBaseManager._finalize_managercCs|jS)N)r)r%rrrUszBaseManager.Tc s!d|jkr!|jj|_dkr3t|pHtdd}|p`tdd}|rxdt|jD]P\}}t|tkst d|t|tks|t d|q|W|||f|j<|rfdd} | _ t || dS)z9 Register a typeid with the manager type rN _exposed__method_to_typeid_z%r is not a stringc stjd|j||\}}||jd|d|jd|}|j|jd|j}t|dd|jf|S)Nz)requesting creation of a shared %r objectmanagerr[rrT) rrvrrrrr#r:r$)r%r6r7rZexpproxyr)rr"rrrFrsz"BaseManager.register..temp) __dict__rcopy AutoProxyrrrrr;r<r+setattr) rr"rDrrr create_methodkeyrrFr)rr"rregisterWs  "& zBaseManager.register)r+r-r.r/rrKrr&rrrn classmethodrrrrrrr staticmethodrpropertyr#rrrrrrs*    $     c@s(eZdZddZddZdS)ProcessLocalSetcCstj|dddS)NcSs |jS)N)clear)r rrrrsz*ProcessLocalSet.__init__..)rregister_after_fork)r%rrrr&szProcessLocalSet.__init__cCst|ffS)N)r)r%rrr __reduce__szProcessLocalSet.__reduce__N)r+r-r.r&rrrrrrs  rc@seZdZdZiZejZddddddZddZ fidd Z d d Z d d Z e ddZddZddZddZddZddZdS)rz. A base for proxies of shared objects NTc Cs*tjNtjj|jd}|dkrStjtf}|tj|j)rr+rr"r$)r%rrrr,%szBaseProxy.__repr__c CsBy|jdSWn*tk r=t|dddSYnXdS)zV Return representation of the referent (or a fall-back if that fails) r,Nrz; '__str__()' failed>r)rrr)r%rrrrB)s zBaseProxy.__str__)r+r-r.r/rrZForkAwareThreadLockrr&rrrrrrrrrr,rBrrrrrs  "      cCsttjdd}|rB|j|jkrB|j|jdS|jddojttjdd }|||d||SdS)z Function used for unpickling proxy objects. If possible the shared object is returned, or otherwise a proxy for it. rjNrrSTZ _inheritingF)rr rir#r^r$pop)rGrrcr7rrSrrrr6s rc Cst|}y|||fSWntk r2YnXi}x%|D]}td||f|q@Wt|tf|}||_||||f<|S)zB Return a proxy type whose methods are given by `exposed` zLdef %s(self, *args, **kwds): return self._callmethod(%r, args, kwds))rrexecrrr)rr_cacheZdicmeth ProxyTyperrr MakeProxyTypeKs    rTc Cst|d}|dkrY||jd|}zt|dd|f}Wd|jX|dkrz|dk rz|j}|dkrtjj}td|j |}|||d|d|d|} d| _ | S) z* Return an auto-proxy for `token` rNr[rOz AutoProxy[%s]rrST) r\r#r:rrr rir[rr"r) rrcrr[rrSrrrrrrrras      rc@s(eZdZddZddZdS) NamespacecKs|jj|dS)N)rupdate)r%r7rrrr&szNamespace.__init__cCst|jj}g}x:|D]2\}}|jds"|jd||fq"W|jd|jjdj|fS)NrIz%s=%rz%s(%s)z, ) rrr startswithrErr*r+r)r%rrFrrrrrr,s zNamespace.__repr__N)r+r-r.r&r,rrrrr~s  rc@sReZdZdddZddZddZdd ZeeeZd S) ValueTcCs||_||_dS)N) _typecode_value)r%rrlockrrrr&s zValue.__init__cCs|jS)N)r)r%rrrrsz Value.getcCs ||_dS)N)r)r%rrrrrsz Value.setcCs dt|j|j|jfS)Nz %s(%r, %r))rr+rr)r%rrrr,szValue.__repr__N) r+r-r.r&rrr,rrrrrrrs    rcCstj||S)N)r)rZsequencerrrrArraysrc@sReZdZdZddZddZd d Zd d Zd dZdS) IteratorProxy__next__r1throwrcCs|S)Nr)r%rrr__iter__szIteratorProxy.__iter__cGs|jd|S)Nr)r)r%r6rrrrszIteratorProxy.__next__cGs|jd|S)Nr1)r)r%r6rrrr1szIteratorProxy.sendcGs|jd|S)Nr)r)r%r6rrrrszIteratorProxy.throwcGs|jd|S)Nr)r)r%r6rrrrszIteratorProxy.closeN)rr1rr) r+r-r.rr rr1rrrrrrrs     rc@sLeZdZd ZddddZddZd d Zd d ZdS) AcquirerProxyacquirereleaseTNcCs1|dkr|fn ||f}|jd|S)Nr )r)r%Zblockingrr6rrrr s!zAcquirerProxy.acquirecCs |jdS)Nr )r)r%rrrr szAcquirerProxy.releasecCs |jdS)Nr )r)r%rrrrszAcquirerProxy.__enter__cCs |jdS)Nr )r)r%rrrrrrrszAcquirerProxy.__exit__)r r )r+r-r.rr r rrrrrrr s   r c@sLeZdZdZdddZd d Zd d Zdd dZdS)ConditionProxyr r rpnotify notify_allNcCs|jd|fS)Nrp)r)r%rrrrrpszConditionProxy.waitcCs |jdS)Nr)r)r%rrrrszConditionProxy.notifycCs |jdS)Nr)r)r%rrrrszConditionProxy.notify_allcCs|}|r|S|dk r/t|}n d}d}xF|s|dk rj|t}|dkrjP|j||}q>W|S)Nr)_timerp)r%Z predicaterr9ZendtimeZwaittimerrrwait_fors        zConditionProxy.wait_for)r r rprr)r+r-r.rrprrrrrrrr s   r c@sIeZdZdZddZddZd d Zd d d Zd S) EventProxyrorrrpcCs |jdS)Nro)r)r%rrrroszEventProxy.is_setcCs |jdS)Nr)r)r%rrrrszEventProxy.setcCs |jdS)Nr)r)r%rrrrszEventProxy.clearNcCs|jd|fS)Nrp)r)r%rrrrrpszEventProxy.wait)rorrrp)r+r-r.rrorrrprrrrrs    rc@sseZdZdZdddZdd Zd d Zed d ZeddZ eddZ dS) BarrierProxy__getattribute__rpabortresetNcCs|jd|fS)Nrp)r)r%rrrrrpszBarrierProxy.waitcCs |jdS)Nr)r)r%rrrrszBarrierProxy.abortcCs |jdS)Nr)r)r%rrrrszBarrierProxy.resetcCs|jddS)Nrparties)r)r)r%rrrrszBarrierProxy.partiescCs|jddS)Nr n_waiting)r)r)r%rrrrszBarrierProxy.n_waitingcCs|jddS)Nrbroken)r)r)r%rrrrszBarrierProxy.broken)rrprr) r+r-r.rrprrrrrrrrrrrs   rc@s:eZdZd ZddZddZdd Zd S) NamespaceProxyr __setattr__ __delattr__cCsB|ddkr tj||Stj|d}|d|fS)NrrIrr)objectr)r%r callmethodrrr __getattr__szNamespaceProxy.__getattr__cCsH|ddkr#tj|||Stj|d}|d||fS)NrrIrr)rrr)r%rrrrrrrszNamespaceProxy.__setattr__cCsB|ddkr tj||Stj|d}|d|fS)NrrIrr)rrr)r%rrrrrrszNamespaceProxy.__delattr__N)rrr)r+r-r.rrrrrrrrrs   rc@s=eZdZdZddZddZeeeZdS) ValueProxyrrcCs |jdS)Nr)r)r%rrrrszValueProxy.getcCs|jd|fS)Nr)r)r%rrrrr szValueProxy.setN)rr)r+r-r.rrrrrrrrrr s   r  BaseListProxy__add__ __contains__ __delitem__ __getitem____len____mul__ __reversed____rmul__ __setitem__rEcountextendindexinsertrremovereverser__imul__c@s(eZdZddZddZdS) ListProxycCs|jd|f|S)Nr,)r)r%rrrr__iadd__szListProxy.__iadd__cCs|jd|f|S)Nr1)r)r%rrrrr1szListProxy.__imul__N)r+r-r.r3r1rrrrr2s  r2 DictProxyrrrZhas_keypopitem setdefaultr ArrayProxy PoolProxyZapplyZ apply_asyncrZimapZimap_unorderedrmapZ map_asyncstarmapZ starmap_asyncrZ AsyncResultIteratorc@s(eZdZddZddZdS)r8cCs|S)Nr)r%rrrr5szPoolProxy.__enter__cCs|jdS)N)r)r%rrrrrrr7szPoolProxy.__exit__N)r+r-r.rrrrrrr84s  c@seZdZdZdS)ra( Subclass of `BaseManager` which supports a number of shared object types. The types registered are those intended for the synchronization of threads, plus `dict`, `list` and `Namespace`. The `multiprocessing.Manager()` function creates started instances of this class. N)r+r-r.r/rrrrr>s QueueZ JoinableQueuergLockra SemaphoreBoundedSemaphore ConditionBarrierPoolrrrrF)I__all__rsr`rZqueuerrrrr r r r r rrrrZ view_typesrr!Z view_typerrr:r3rr=rHrJrKrrdreZ XmlListenerZ XmlClientr\rrrrrrrrrrrr r rrrr r!r2r4r7Z BasePoolProxyrr8rr<rgr=rar>r?r@rArBrrrrr s                      __pycache__/semaphore_tracker.cpython-35.pyc000064400000007212147554447510015121 0ustar00 Yf@sddlZddlZddlZddlZddlZddlZddlmZddlmZdddgZ Gdd d e Z e Z e j Z e jZe jZe jZd d ZdS) N)spawn)utilensure_runningregister unregisterc@sXeZdZddZddZddZddZd d Zd d Zd S)SemaphoreTrackercCstj|_d|_dS)N) threadingZLock_lock_fd)selfr F/opt/alt/python35/lib64/python3.5/multiprocessing/semaphore_tracker.py__init__szSemaphoreTracker.__init__cCs|j|jS)N)rr )r r r rgetfd!s zSemaphoreTracker.getfdcCs|j|jdk rdSg}y|jtjjWntk rQYnXd}tj\}}zyW|j|t j }|gt j }|d||g7}t j |||Wntj|Yn X||_Wdtj|XWdQRXdS)zMake sure that semaphore tracker process is running. This can be run from any process. Usually a child process will use the semaphore created by its parent.Nz;from multiprocessing.semaphore_tracker import main;main(%d)z-c)r r appendsysstderrfileno ExceptionospiperZget_executablerZ_args_from_interpreter_flagsZspawnv_passfdsclose)r Z fds_to_passcmdrwZexeargsr r rr%s*      zSemaphoreTracker.ensure_runningcCs|jd|dS)z2Register name of semaphore with semaphore tracker.ZREGISTERN)_send)r namer r rrCszSemaphoreTracker.registercCs|jd|dS)z4Unregister name of semaphore with semaphore tracker.Z UNREGISTERN)r)r rr r rrGszSemaphoreTracker.unregistercCst|jdj||jd}t|dkrCtdtj|j|}|t|ksptdS)Nz{0}:{1} asciiiz name too long) rformatencodelen ValueErrorrwriter AssertionError)r rrmsgnbytesr r rrKs   zSemaphoreTracker._sendN) __name__ __module__ __qualname__rrrrrrr r r rrs      rc-Cstjtjtjtjtjtjx=tjtjfD])}y|jWq?tk rgYq?Xq?Wt }zt |d}x|D]}yg|j j d\}}|dkr|j |n,|dkr|j|ntd|Wqtk r4ytjtjWnYnXYqXqWWdQRXWd|rzytjdt|Wntk ryYnXxu|D]m}zc|jd}ytj|Wn<tk r}ztjd ||fWYdd}~XnXWdXqWXdS) zRun semaphore tracker.rb:sREGISTERs UNREGISTERzunrecognized command %rNzRsemaphore_tracker: There appear to be %d leaked semaphores to clean up at shutdownrzsemaphore_tracker: %r: %s)signalSIGINTSIG_IGNSIGTERMrstdinstdoutrrsetopenstripsplitaddremove RuntimeError excepthookexc_infowarningswarnr"decode_multiprocessingZ sem_unlink)fdfcachelinerrer r rmain]sJ          .rE)rr-rr r<r?rr__all__objectrZ_semaphore_trackerrrrrrEr r r rs      ;     __pycache__/semaphore_tracker.cpython-35.opt-1.pyc000064400000007142147554447510016062 0ustar00 Yf@sddlZddlZddlZddlZddlZddlZddlmZddlmZdddgZ Gdd d e Z e Z e j Z e jZe jZe jZd d ZdS) N)spawn)utilensure_runningregister unregisterc@sXeZdZddZddZddZddZd d Zd d Zd S)SemaphoreTrackercCstj|_d|_dS)N) threadingZLock_lock_fd)selfr F/opt/alt/python35/lib64/python3.5/multiprocessing/semaphore_tracker.py__init__szSemaphoreTracker.__init__cCs|j|jS)N)rr )r r r rgetfd!s zSemaphoreTracker.getfdcCs|j|jdk rdSg}y|jtjjWntk rQYnXd}tj\}}zyW|j|t j }|gt j }|d||g7}t j |||Wntj|Yn X||_Wdtj|XWdQRXdS)zMake sure that semaphore tracker process is running. This can be run from any process. Usually a child process will use the semaphore created by its parent.Nz;from multiprocessing.semaphore_tracker import main;main(%d)z-c)r r appendsysstderrfileno ExceptionospiperZget_executablerZ_args_from_interpreter_flagsZspawnv_passfdsclose)r Z fds_to_passcmdrwZexeargsr r rr%s*      zSemaphoreTracker.ensure_runningcCs|jd|dS)z2Register name of semaphore with semaphore tracker.ZREGISTERN)_send)r namer r rrCszSemaphoreTracker.registercCs|jd|dS)z4Unregister name of semaphore with semaphore tracker.Z UNREGISTERN)r)r rr r rrGszSemaphoreTracker.unregistercCs\|jdj||jd}t|dkrCtdtj|j|}dS)Nz{0}:{1} asciiiz name too long)rformatencodelen ValueErrorrwriter )r rrmsgnbytesr r rrKs   zSemaphoreTracker._sendN) __name__ __module__ __qualname__rrrrrrr r r rrs      rc-Cstjtjtjtjtjtjx=tjtjfD])}y|jWq?tk rgYq?Xq?Wt }zt |d}x|D]}yg|j j d\}}|dkr|j |n,|dkr|j|ntd|Wqtk r4ytjtjWnYnXYqXqWWdQRXWd|rzytjdt|Wntk ryYnXxu|D]m}zc|jd}ytj|Wn<tk r}ztjd ||fWYdd}~XnXWdXqWXdS) zRun semaphore tracker.rb:sREGISTERs UNREGISTERzunrecognized command %rNzRsemaphore_tracker: There appear to be %d leaked semaphores to clean up at shutdownrzsemaphore_tracker: %r: %s)signalSIGINTSIG_IGNSIGTERMrstdinstdoutrrsetopenstripsplitaddremove RuntimeError excepthookexc_infowarningswarnr"decode_multiprocessingZ sem_unlink)fdfcachelinerrer r rmain]sJ          .rD)rr,rr r;r>rr__all__objectrZ_semaphore_trackerrrrrrDr r r rs      ;     __pycache__/resource_sharer.cpython-35.pyc000064400000013002147554447510014610 0ustar00 Yf@sddlZddlZddlZddlZddlZddlmZddlmZddlmZdgZ ej dkre dg7Z Gd dde Z n#e d g7Z Gd d d e Z Gd d d e ZeZejZdS)N)process) reduction)utilstopwin32 DupSocketc@s.eZdZdZddZddZdS)rzPicklable wrapper for a socket.cs:|jfdd}tj|j|_dS)Ncs j|}|j|dS)N)shareZ send_bytes)connpidr )new_sockD/opt/alt/python35/lib64/python3.5/multiprocessing/resource_sharer.pysendsz DupSocket.__init__..send)dup_resource_sharerregisterclose_id)selfZsockrr )r r__init__s zDupSocket.__init__c Cs9tj|j }|j}tj|SWdQRXdS)z1Get the socket. This should only be called once.N)rget_connectionrZ recv_bytessocketZ fromshare)rr r r r rdetach$s zDupSocket.detachN)__name__ __module__ __qualname____doc__rrr r r rrs  DupFdc@s.eZdZdZddZddZdS)rz-Wrapper for fd which can be used at any time.csLtj|fdd}fdd}tj|||_dS)Ncstj||dS)N)rZ send_handle)r r )new_fdr rr1szDupFd.__init__..sendcstjdS)N)osrr )rr rr3szDupFd.__init__..close)r rrrr)rfdrrr )rrr/szDupFd.__init__c Cs-tj|j}tj|SWdQRXdS)z-Get the fd. This should only be called once.N)rrrrZ recv_handle)rr r r rr7sz DupFd.detachN)rrrrrrr r r rr-s  c@sseZdZdZddZddZeddZdd d Zd d Z d dZ ddZ dS)_ResourceSharerz-Manager for resouces using background thread.cCs\d|_i|_g|_tj|_d|_d|_d|_t j |t j dS)Nr) _key_cache _old_locks threadingLock_lock _listener_address_threadrZregister_after_forkr" _afterfork)rr r rr?s      z_ResourceSharer.__init__c Csc|jS|jdkr#|j|jd7_||f|j|j<|j|jfSWdQRXdS)z+Register resource, returning an identifier.Nr)r(r*_startr#r$)rrrr r rrIs   z_ResourceSharer.registercCsTddlm}|\}}||dtjj}|j|tjf|S)zs     z_ResourceSharer._serve) rrrrrr staticmethodrrr,r-r>r r r rr"=s     r")r rCrrHr&rrr__all__platformobjectrrr"rrr r r r s        ` __pycache__/heap.cpython-35.opt-2.pyc000064400000014606147554447510013305 0ustar00 ] @s#ddlZddlZddlZddlZddlZddlZddlmZddlmZddlm Z dgZ ej dkrddl Z Gdd d e Zn>Gd d d e Zd d Zd dZejeeGddde ZGddde ZdS)N)context) reduction)util BufferWrapperwin32c@s@eZdZejZddZddZddZdS)ArenacCs||_xttdD]Z}dtjt|jf}tjd|d|}tjdkrfP|j qWt d||_ ||_ |j|j f|_ dS)Ndz pym-%d-%srtagnamerzCannot find name for new mmap)sizerangeosgetpidnext_randmmap_winapiZ GetLastErrorcloseFileExistsErrornamebuffer_state)selfr irbufr)/opt/alt/python35/lib64/python3.5/heap.py__init__#s    zArena.__init__cCstj||jS)N)rassert_spawningr)rrrr __getstate__2s zArena.__getstate__cCs>|\|_|_|_tjd|jd|j|_dS)Nrr r )r rrrr)rstaterrr __setstate__6szArena.__setstate__N) __name__ __module__ __qualname__tempfile_RandomNameSequencerrr r"rrrrrs    rc@seZdZdddZdS)rrc Cs||_||_|d krtjddtjdtj\|_}tj|tj |tj |jft |jdddc}d }||krd |}x%t ||D]}|j |qW~|j d ||WdQRXtj|j|j|_dS) Nrprefixzpym-%d-dirwbclosefdFisr i)r fdr&mkstemprrr get_temp_dirunlinkFinalizeropenr writerr)rr r,rfbsZzeros_rrrrAs"    (   zArena.__init__Nr )r#r$r%rrrrrr?s cCs:|jdkrtdt|jtj|jffS)NrzDArena is unpicklable because forking was enabled when it was createdr )r, ValueError rebuild_arenar rDupFd)arrr reduce_arenaTs r:cCst||jS)N)rdetach)r Zdupfdrrrr7Zsr7c@seZdZdZejddZeddZddZ dd Z d d Z d d Z ddZ ddZdS)HeapcCsmtj|_tj|_||_g|_i|_i|_ i|_ t |_ g|_ g|_dS)N)rr_lastpid threadingLock_lock_size_lengths _len_to_seq_start_to_block_stop_to_blockset_allocated_blocks_arenas_pending_free_blocks)rr rrrrgs       z Heap.__init__cCs|d}|||@S)Nrr)nZ alignmentmaskrrr_roundupts z Heap._roundupc Cstj|j|}|t|jkr|jt|j|tj}|jd9_t j d|t |}|j j ||d|fS|j|}|j|}|j}|s|j|=|j|=|\}}}|j||f=|j||f=|S)Nz"allocating a new mmap of length %dr)bisectZ bisect_leftrClenrMmaxrBrPAGESIZErinforrIappendrDpoprErF) rr rlengtharenaseqblockstartstoprrr_malloczs"!     z Heap._mallocc Cs$|\}}}y|j||f}Wntk r:YnX|j|\}}y|j||f}Wntk r{YnX|j|\}}|||f}||}y|j|j|Wn5tk r|g|j|rrArbrMrQ _alignmentr\r_rHadd)rr rWrZr[Znew_stoprYrrrmallocs     z Heap.mallocN)r#r$r%rfrrRr staticmethodrMr\r_r^rbrerhrrrrr<cs      r<c@s1eZdZeZddZddZdS)rcCsDtjj|}||f|_tj|tjjd|fdS)Nargs)r_heaprhrrr0re)rr rYrrrrszBufferWrapper.__init__cCs3|j\\}}}}t|j|||S)N)r memoryviewr)rrWrZr[r rrrcreate_memoryviewszBufferWrapper.create_memoryviewN)r#r$r%r<rkrrmrrrrrs   )rOrrsysr&r?rrr__all__platformrobjectrr:r7registerr<rrrrr s$           __pycache__/__init__.cpython-35.opt-1.pyc000064400000001063147554447510014117 0ustar00 Yf@s~ddlZddlmZejddejjDejjZdZdZdej krzej dej d sr __main__Z __mp_main__) sysrglobalsupdater__all__ZSUBDEBUGZ SUBWARNINGmodulesrrrr s  __pycache__/popen_spawn_win32.cpython-35.opt-2.pyc000064400000005516147554447510015743 0ustar00 ] @sddlZddlZddlZddlZddlZddlmZddlmZddlmZddlm Z dgZ dZ ej d koe ed d Zejjjd ZGd ddeZdS)N)context)spawn) reduction)utilPopeniwin32frozenFzpythonservice.exec@sUeZdZdZddZddZdddZd d Zd d ZdS) rrc Cstj|j}tjdd\}}tj|d}tjdtj d|}dj dd|D}t |ddd }yJtj tj |ddd dddd \}} } } tj| Wntj|YnX| |_d|_||_t||_tj|tj|jftj|z$tj||tj||WdtjdXWdQRXdS) NrZ parent_pidZ pipe_handle css|]}d|VqdS)z"%s"N).0xr r 6/opt/alt/python35/lib64/python3.5/popen_spawn_win32.py *sz!Popen.__init__..wbclosefdTF)rZget_preparation_data_name_winapiZ CreatePipemsvcrtopen_osfhandleZget_command_lineosgetpidjoinopenZ CreateProcessZget_executableZ CloseHandlepid returncode_handleintsentinelrFinalizerset_spawning_popenrdump) self process_objZ prep_dataZrhandleZwhandleZwfdcmdZto_childZhpZhtrtidr r r__init__!s2  '     zPopen.__init__cCstj||jS)N)rZ duplicater)r"handler r rduplicate_for_childFszPopen.duplicate_for_childNcCs|jdkr|dkr'tj}ntdt|dd}tjt|j|}|tjkrtj|j}|t krt j }||_|jS)Nrig?) rrZINFINITEmaxrZWaitForSingleObjectrZ WAIT_OBJECT_0ZGetExitCodeProcess TERMINATEsignalSIGTERM)r"timeoutmsecsrescoder r rwaitJs     z Popen.waitcCs|jddS)Nr-r)r1)r"r r rpollZsz Popen.pollc Cs`|jdkr\ytjt|jtWn-tk r[|jdddkrWYnXdS)Nr-g?)rrZTerminateProcessrrr*OSErrorr1)r"r r r terminate]s  zPopen.terminate) __name__ __module__ __qualname__methodr&r(r1r2r4r r r rrs  %  )rrr+sysrrrrr__all__r*platformgetattrZWINEXE executablelowerendswithZ WINSERVICEobjectrr r r rs      !__pycache__/popen_spawn_posix.cpython-35.pyc000064400000004413147554447510015176 0ustar00 Yf{@sddlZddlZddlmZddlmZddlmZddlmZddlmZdgZGd d d e Z Gd ddej Z dS) N)context) popen_fork) reduction)spawn)utilPopenc@s(eZdZddZddZdS)_DupFdcCs ||_dS)N)fd)selfr r F/opt/alt/python35/lib64/python3.5/multiprocessing/popen_spawn_posix.py__init__sz_DupFd.__init__cCs|jS)N)r )r r r r detachsz _DupFd.detachN)__name__ __module__ __qualname__rrr r r r r s  r csFeZdZdZeZfddZddZddZS)rrcsg|_tj|dS)N)_fdssuperr)r process_obj) __class__r r rs zPopen.__init__cCs|jj||S)N)rappend)r r r r r duplicate_for_child#szPopen.duplicate_for_childc Csddlm}|j}|jj|tj|j}tj }t j |z$t j ||t j ||Wdt j dXd}}}} ztj\}}tj\}} tjd|d|} |jj||gtjtj| |j|_||_t| ddd} | j|jWdQRXWd|dk rxtj|tj|fx0||| fD]} | dk rtj| qWXdS)Nr)semaphore_tracker tracker_fdZ pipe_handlewbclosefdF)rZgetfdrrrZget_preparation_data_nameioBytesIOrZset_spawning_popenrdumpospipeZget_command_lineextendrZspawnv_passfdsZget_executablepidsentinelopenwrite getbufferZFinalizeclose) r rrrZ prep_datafpZparent_rZchild_wZchild_rZparent_wcmdfr r r r _launch's6       z Popen._launch) rrrmethodr ZDupFdrrr.r r )rr rs  ) rr"rrrrrr__all__objectr rr r r r s    __pycache__/reduction.cpython-35.opt-2.pyc000064400000015576147554447510014373 0ustar00 ]@sddlZddlZddlZddlZddlZddlZddlZddlmZdddddgZ ej d kpe ed oe ed oe ejd Z Gd ddej ZejZdddZej d krfe dddg7Z ddlZddddZddZddZddZGdddeZnje dddg7Z ddlZej dkZddZddZddZddZd dZd!d"ZGd#d$d$Zeeej ed%d&Z!eee"j#e!eee$j%e!d'd(Z&d)d*Z'eej(e&ej d krd+d,Z)d-d.Z*eeje)n(d/d,Z)d0d.Z*eeje)dS)1N)context send_handle recv_handleForkingPicklerregisterdumpwin32CMSG_LEN SCM_RIGHTSsendmsgcsaeZdZiZejZfddZeddZ edddZ e j Z S)rcs9tj||jj|_|jj|jdS)N)super__init___copyreg_dispatch_tablecopydispatch_tableupdate_extra_reducers)selfargs) __class__./opt/alt/python35/lib64/python3.5/reduction.pyr%szForkingPickler.__init__cCs||j|r?r.r4r5r0r/r@r6r7)rrDrrrr<ts zDupHandle.detach)r#r$r%rr<rrrrr+cs DupFdsendfdsrecvfdsdarwincCs{tjd|}tt|dg}|j|gtjtj|fgtrw|jddkrwt ddS)NirAz%did not receive acknowledgement of fd) arraybyteslenr socket SOL_SOCKETr ACKNOWLEDGEr; RuntimeError)sockfdsmsgrrrrFs %c Cs(tjd}|j|}|jdtj|\}}}}| rW| rWtytrm|jdt|dkrt dt||d\}} } |tj kr| tj krt| |jdkrt |j | t|SWnt tfk rYnXt ddS)NrIrrKzreceived %d items of ancdatarzInvalid data received)rLitemsizerecvmsgrOr EOFErrorrQr8rNrRrPr ValueError frombyteslist IndexError) rSsizea bytes_sizerUancdataflagsaddr cmsg_level cmsg_type cmsg_datarrrrGs* '  c Cs?tj|jtjtj}t||gWdQRXdS)N)rOfromfdfilenoAF_UNIX SOCK_STREAMrF)r9r2r:srrrrs$c Cs@tj|jtjtj}t|ddSWdQRXdS)Nrr)rOrfrgrhrirG)r9rjrrrrs$cCsatj}|dk r.|j|j|StrQddlm}|j|StddS)Nr)resource_sharerz&SCM_RIGHTS appears not to be available)rget_spawning_popenrEduplicate_for_childHAVE_SEND_HANDLErkrY)fd popen_objrkrrrrEs   cCsE|jdkr(t|j|jjffSt|j|jjffSdS)N)__self__getattrr__func__r#)mrrr_reduce_methodsrvc@seZdZddZdS)_CcCsdS)Nr)rrrrfsz_C.fN)r#r$r%rxrrrrrws rwcCst|j|jffS)N)rs __objclass__r#)rurrr_reduce_method_descriptorsrzcCs"t|j|j|jpiffS)N)_rebuild_partialfuncrkeywords)prrr_reduce_partialsrcCstj|||S)N) functoolspartial)r|rr}rrrr{sr{cCs#ddlm}t||ffS)Nr) DupSocket)rkr_rebuild_socket)rjrrrr_reduce_socketsrcCs |jS)N)r<)ZdsrrrrsrcCs1t|j}t||j|j|jffS)N)rErgrfamilyrproto)rjdfrrrrscCs%|j}tj|||d|S)Nrg)r<rO)rrrrrprrrrs )+r&rrr=r(rOsysror__all__platformhasattrrnPicklerrrrr.r,r-rrobjectr+rLrQrFrGrErvrwrrxrzr[appendint__add__rr{rrrrrrr s^           #              __pycache__/forkserver.cpython-35.pyc000064400000016140147554447510013613 0ustar00 Yf @sdddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddlm Z ddlm Z ddlm Z ddlm Z ddlmZd d d d gZd ZejdZGdddeZddddZddZddZddZeZejZejZejZejZdS)N) connection)process) reduction)semaphore_tracker)spawn)utilensure_runningget_inherited_fdsconnect_to_new_processset_forkserver_preloadQc@sLeZdZddZddZddZddZd d Zd S) ForkServercCs:d|_d|_d|_tj|_dg|_dS)N__main__)_forkserver_address_forkserver_alive_fd_inherited_fds threadingZLock_lock_preload_modules)selfr?/opt/alt/python35/lib64/python3.5/multiprocessing/forkserver.py__init__!s    zForkServer.__init__cCs5tdd|jDs(td||_dS)z>Set list of module names to try to load in forkserver process.css!|]}t|tkVqdS)N)typestr).0modrrr *sz4ForkServer.set_forkserver_preload..z&module_names must be a list of stringsN)allr TypeError)rZ modules_namesrrrr (s z!ForkServer.set_forkserver_preloadcCs|jS)zReturn list of fds inherited from parent process. This returns None if the current process was not started by fork server. )r)rrrrr .szForkServer.get_inherited_fdscCs |jt|dtkr,tdtjtj}|j|jtj \}}tj \}}|||j t j g}||7}zJyt j||||fSWn%tj|tj|YnXWdtj|tj|XWdQRXdS)a;Request forkserver to create a child process. Returns a pair of fds (status_r, data_w). The calling process can read the child process's pid and (eventually) its returncode from status_r. The calling process should write to data_w the pickled preparation and process data. z too many fdsN)r lenMAXFDS_TO_SEND ValueErrorsocketAF_UNIXZconnectrospiperrZgetfdrZsendfdsclose)rfdsZclientZparent_rchild_wchild_rZparent_wZallfdsrrrr 6s&        z!ForkServer.connect_to_new_processc s|jtj|jdk r'dSdd}|jr}ddhtjd}tfdd|jD}ni}t j t j  }t j d }|j |tj|d |jtj\}}zyy|j|g}||j||j|f;}tj}|gtj} | d |g7} tj|| |} Wntj|YnXWdtj|X||_||_WdQRXWdQRXdS) zMake sure that a fork server is running. This can be called from any process. Note that usually a child process will just reuse the forkserver started by its parent, so ensure_running() will do nothing. Nz-from multiprocessing.forkserver import main; zmain(%d, %d, %r, **%r) main_pathsys_pathignorec3s-|]#\}}|kr||fVqdS)Nr)rxy) desired_keysrrres z,ForkServer.ensure_running..r'iz-c)rrr rrrZget_preparation_datadictitemsr&r'rZarbitrary_addressZbindr(chmodZlistenr)filenoZget_executablerZ_args_from_interpreter_flagsZspawnv_passfdsr*r) rcmddatalistenerZaddressalive_rZalive_wZ fds_to_passZexeargspidr)r3rr Ss>    (       zForkServer.ensure_runningN)__name__ __module__ __qualname__rr r r r rrrrrs     rc4Csx|rd|krN|dk rNdtj_ztj|Wdtj`Xx1|D])}yt|WqUtk r}YqUXqUWtjt j t j t j t j i}dd|jD}tjtjd|}tj} |jt_| j|tj| j|tjxAyx$dd| jD} | r+Pq+W|| krtj|d d ksytt|| kst|jd } d } tjd krzPyt| |||Wn2t k r t!j"t!j#t!j$j%YnXWdtj&| XWdQRXWq%t'k ra} z| j(t(j)krOWYdd} ~ Xq%Xq%WWdQRXWdQRXdS) zRun forkserver.rNTcSs+i|]!\}}tj|||qSr)signal)rsigvalrrr s zmain..r7cSsg|]\}}|jqSr)Zfileobj)rkeyZeventsrrr s zmain..rr)*rZcurrent_processZ _inheritingrZimport_main_path __import__ ImportErrorrZ _close_stdinrASIGCHLDSIG_IGNSIGINTSIG_DFLr5r&r' selectorsZDefaultSelectorZ getsockname _forkserverrregisterZ EVENT_READZselectr(readAssertionError SystemExitZacceptfork _serve_one Exceptionsys excepthookexc_infostderrflush_exitOSErrorerrnoZ ECONNABORTED)Z listener_fdr;Zpreloadr.r/modnamehandlersZ old_handlersr:ZselectorZrfdsscodeerrrmainsV         rdc Cs|jtj|x*|jD]\}}tj||q$Wtj|td}|jt|tks|t|^}}t _ } t _ | t j _t|tjdtjkrddl} | jtj|} t|| dS)Nrrandomr)r*r(r5rArZrecvfdsr$r#rRrOrrrZ_semaphore_trackerZ_fdwrite_unsignedgetpidrWmodulesreZseedr_main) rar:r;r`rBrCr+r-r,ZstfdrerbrrrrUs      rUcCsqd}tj}xNt||kr_tj||t|}|sRtd||7}qWtj|dS)NrGzunexpected EOFr)UNSIGNED_STRUCTsizer#r(rQEOFErrorZunpack)fdr9Zlengthrarrr read_unsigneds  rncCsZtj|}xD|rUtj||}|dkrBtd||d}qWdS)Nrzshould not get here)rjZpackr(write RuntimeError)rmnmsgnbytesrrrrfs    rf)r^r(rNrAr&ZstructrWrrrrrrr__all__r$ZStructrjobjectrrdrUrnrfrOr r r r rrrrs6          h= !    __pycache__/reduction.cpython-35.pyc000064400000017125147554447510013423 0ustar00 Yf@sddlZddlZddlZddlZddlZddlZddlZddlmZdddddgZ ej d kpe ed oe ed oe ejd Z Gd ddej ZejZdddZej d krfe dddg7Z ddlZddddZddZddZddZGdddeZnje dddg7Z ddlZej dkZddZddZddZddZd dZd!d"ZGd#d$d$Zeeej ed%d&Z!eee"j#e!eee$j%e!d'd(Z&d)d*Z'eej(e&ej d krd+d,Z)d-d.Z*eeje)n(d/d,Z)d0d.Z*eeje)dS)1N)context send_handle recv_handleForkingPicklerregisterdumpwin32CMSG_LEN SCM_RIGHTSsendmsgcsgeZdZdZiZejZfddZe ddZ e dddZ e j Z S) rz)Pickler subclass used by multiprocessing.cs9tj||jj|_|jj|jdS)N)super__init___copyreg_dispatch_tablecopydispatch_tableupdate_extra_reducers)selfargs) __class__>/opt/alt/python35/lib64/python3.5/multiprocessing/reduction.pyr%szForkingPickler.__init__cCs||j|r.r3r4r0r/r?r5r6)rrCrrrr;ts zDupHandle.detach)r"r#r$r%rr;rrrrr+cs DupFdsendfdsrecvfdsdarwincCs{tjd|}tt|dg}|j|gtjtj|fgtrw|jddkrwt ddS)z,Send an array of fds over an AF_UNIX socket.irAz%did not receive acknowledgement of fdN) arraybyteslenr socket SOL_SOCKETr ACKNOWLEDGEr: RuntimeError)sockZfdsmsgrrrrEs %c CsHtjd}|j|}|jdtj|\}}}}| rW| rWtytrm|jdt|dkrt dt||d\}} } |tj kr| tj krt| |jdkrt |j | t|d|dkstt|SWnt tfk r7YnXt ddS) z/Receive an array of fds over an AF_UNIX socket.rHrrJzreceived %d items of ancdatarrIzInvalid data receivedN)rKitemsizeZrecvmsgrNr EOFErrorrPr7rMrQrOr ValueErrorZ frombytesAssertionErrorlist IndexError) rRsizeaZ bytes_sizerSZancdataflagsZaddrZ cmsg_levelZ cmsg_typeZ cmsg_datarrrrFs, '   c Cs?tj|jtjtj}t||gWdQRXdS)z&Send a handle over a local connection.N)rNfromfdfilenoAF_UNIX SOCK_STREAMrE)r8r2r9srrrrs$c Cs@tj|jtjtj}t|ddSWdQRXdS)z)Receive a handle over a local connection.rrN)rNr]r^r_r`rF)r8rarrrrs$cCsatj}|dk r.|j|j|StrQddlm}|j|StddS)zReturn a wrapper for an fd.Nr)resource_sharerz&SCM_RIGHTS appears not to be available)rZget_spawning_popenrDZduplicate_for_childHAVE_SEND_HANDLErbrV)fdZ popen_objrbrrrrDs   cCsE|jdkr(t|j|jjffSt|j|jjffSdS)N)__self__getattrr__func__r")mrrr_reduce_methodsrjc@seZdZddZdS)_CcCsdS)Nr)rrrrfsz_C.fN)r"r#r$rlrrrrrks rkcCst|j|jffS)N)rg __objclass__r")rirrr_reduce_method_descriptorsrncCs"t|j|j|jpiffS)N)_rebuild_partialfuncrkeywords)prrr_reduce_partialsrscCstj|||S)N) functoolspartial)rprrqrrrrosrocCs#ddlm}t||ffS)Nr) DupSocket)rbrv_rebuild_socket)rarvrrr_reduce_socketsrxcCs |jS)N)r;)ZdsrrrrwsrwcCs1t|j}t||j|j|jffS)N)rDr^rwfamilyrproto)radfrrrrxscCs%|j}tj|||d|S)Nr^)r;rN)r{ryrrzrerrrrws )+r&rtrr<r(rNsysrdr__all__platformhasattrrcZPicklerrrrr.r,r-rrobjectr+rKrPrErFrDrjrkrrlrnrXappendint__add__rsrorurxrwrrrr s^           #              __pycache__/resource_sharer.cpython-35.opt-1.pyc000064400000012733147554447510015561 0ustar00 Yf@sddlZddlZddlZddlZddlZddlmZddlmZddlmZdgZ ej dkre dg7Z Gd dde Z n#e d g7Z Gd d d e Z Gd d d e ZeZejZdS)N)process) reduction)utilstopwin32 DupSocketc@s.eZdZdZddZddZdS)rzPicklable wrapper for a socket.cs:|jfdd}tj|j|_dS)Ncs j|}|j|dS)N)shareZ send_bytes)connpidr )new_sockD/opt/alt/python35/lib64/python3.5/multiprocessing/resource_sharer.pysendsz DupSocket.__init__..send)dup_resource_sharerregisterclose_id)selfZsockrr )r r__init__s zDupSocket.__init__c Cs9tj|j }|j}tj|SWdQRXdS)z1Get the socket. This should only be called once.N)rget_connectionrZ recv_bytessocketZ fromshare)rr r r r rdetach$s zDupSocket.detachN)__name__ __module__ __qualname____doc__rrr r r rrs  DupFdc@s.eZdZdZddZddZdS)rz-Wrapper for fd which can be used at any time.csLtj|fdd}fdd}tj|||_dS)Ncstj||dS)N)rZ send_handle)r r )new_fdr rr1szDupFd.__init__..sendcstjdS)N)osrr )rr rr3szDupFd.__init__..close)r rrrr)rfdrrr )rrr/szDupFd.__init__c Cs-tj|j}tj|SWdQRXdS)z-Get the fd. This should only be called once.N)rrrrZ recv_handle)rr r r rr7sz DupFd.detachN)rrrrrrr r r rr-s  c@sseZdZdZddZddZeddZdd d Zd d Z d dZ ddZ dS)_ResourceSharerz-Manager for resouces using background thread.cCs\d|_i|_g|_tj|_d|_d|_d|_t j |t j dS)Nr) _key_cache _old_locks threadingLock_lock _listener_address_threadrZregister_after_forkr" _afterfork)rr r rr?s      z_ResourceSharer.__init__c Csc|jS|jdkr#|j|jd7_||f|j|j<|j|jfSWdQRXdS)z+Register resource, returning an identifier.Nr)r(r*_startr#r$)rrrr r rrIs   z_ResourceSharer.registercCsTddlm}|\}}||dtjj}|j|tjf|S)z s        ` dummy/__pycache__/connection.cpython-35.opt-2.pyc000064400000005125147554447510015656 0ustar00 ]/@ssdddgZddlmZdgZGdddeZddZdd dZGd d d eZdS) ClientListenerPipe)QueueNc@sgeZdZdddddZddZddZed d Zd d Zd dZ dS)rNcCst||_dS)N)r_backlog_queue)selfaddressfamilybacklogr //opt/alt/python35/lib64/python3.5/connection.py__init__szListener.__init__cCst|jjS)N) Connectionrget)rr r r acceptszListener.acceptcCs d|_dS)N)r)rr r r closeszListener.closecCs|jS)N)r)rr r r szListener.cCs|S)Nr )rr r r __enter__szListener.__enter__cCs|jdS)N)r)rexc_type exc_valueexc_tbr r r __exit__"szListener.__exit__) __name__ __module__ __qualname__rrrpropertyr rrr r r r rs    cCs3tt}}|j||ft||S)N)rputr)r _in_outr r r r&sTcCs/tt}}t||t||fS)N)rr)duplexabr r r r,sc@sOeZdZddZdddZddZdd Zd d Zd S) rcCs<||_||_|j|_|_|j|_|_dS)N)rrrsend send_bytesrrecv recv_bytes)rrrr r r r3s  zConnection.__init__gc Csc|jjdkrdS|dkr)dS|jj|jjj|WdQRX|jjdkS)NrTgF)rqsize not_emptywait)rtimeoutr r r poll9s  zConnection.pollcCsdS)Nr )rr r r rBszConnection.closecCs|S)Nr )rr r r rEszConnection.__enter__cCs|jdS)N)r)rrrrr r r rHszConnection.__exit__N)rrrrr+rrrr r r r r1s    r) __all__queuerfamiliesobjectrrrrr r r r  s   dummy/__pycache__/connection.cpython-35.opt-1.pyc000064400000005153147554447510015656 0ustar00 Yf/@ssdddgZddlmZdgZGdddeZddZdd dZGd d d eZdS) ClientListenerPipe)QueueNc@sgeZdZdddddZddZddZed d Zd d Zd dZ dS)rNcCst||_dS)N)r_backlog_queue)selfaddressZfamilyZbacklogr E/opt/alt/python35/lib64/python3.5/multiprocessing/dummy/connection.py__init__szListener.__init__cCst|jjS)N) Connectionrget)rr r r acceptszListener.acceptcCs d|_dS)N)r)rr r r closeszListener.closecCs|jS)N)r)rr r r szListener.cCs|S)Nr )rr r r __enter__szListener.__enter__cCs|jdS)N)r)rexc_type exc_valueexc_tbr r r __exit__"szListener.__exit__) __name__ __module__ __qualname__r rrpropertyr rrr r r r rs    cCs3tt}}|j||ft||S)N)rputr )r _in_outr r r r&sTcCs/tt}}t||t||fS)N)rr )Zduplexabr r r r,sc@sOeZdZddZdddZddZdd Zd d Zd S) r cCs<||_||_|j|_|_|j|_|_dS)N)rrrsendZ send_bytesrZrecvZ recv_bytes)rrrr r r r 3s  zConnection.__init__gc Csc|jjdkrdS|dkr)dS|jj|jjj|WdQRX|jjdkS)NrTgF)rZqsizeZ not_emptywait)rZtimeoutr r r poll9s  zConnection.pollcCsdS)Nr )rr r r rBszConnection.closecCs|S)Nr )rr r r rEszConnection.__enter__cCs|jdS)N)r)rrrrr r r rHszConnection.__exit__N)rrrr r"rrrr r r r r 1s    r ) __all__ZqueuerZfamiliesobjectrrrr r r r r  s   dummy/__pycache__/connection.cpython-35.pyc000064400000005153147554447510014717 0ustar00 Yf/@ssdddgZddlmZdgZGdddeZddZdd dZGd d d eZdS) ClientListenerPipe)QueueNc@sgeZdZdddddZddZddZed d Zd d Zd dZ dS)rNcCst||_dS)N)r_backlog_queue)selfaddressZfamilyZbacklogr E/opt/alt/python35/lib64/python3.5/multiprocessing/dummy/connection.py__init__szListener.__init__cCst|jjS)N) Connectionrget)rr r r acceptszListener.acceptcCs d|_dS)N)r)rr r r closeszListener.closecCs|jS)N)r)rr r r szListener.cCs|S)Nr )rr r r __enter__szListener.__enter__cCs|jdS)N)r)rexc_type exc_valueexc_tbr r r __exit__"szListener.__exit__) __name__ __module__ __qualname__r rrpropertyr rrr r r r rs    cCs3tt}}|j||ft||S)N)rputr )r _in_outr r r r&sTcCs/tt}}t||t||fS)N)rr )Zduplexabr r r r,sc@sOeZdZddZdddZddZdd Zd d Zd S) r cCs<||_||_|j|_|_|j|_|_dS)N)rrrsendZ send_bytesrZrecvZ recv_bytes)rrrr r r r 3s  zConnection.__init__gc Csc|jjdkrdS|dkr)dS|jj|jjj|WdQRX|jjdkS)NrTgF)rZqsizeZ not_emptywait)rZtimeoutr r r poll9s  zConnection.pollcCsdS)Nr )rr r r rBszConnection.closecCs|S)Nr )rr r r rEszConnection.__enter__cCs|jdS)N)r)rrrrr r r rHszConnection.__exit__N)rrrr r"rrrr r r r r 1s    r ) __all__ZqueuerZfamiliesobjectrrrr r r r r  s   dummy/__pycache__/__init__.cpython-35.pyc000064400000007717147554447510014327 0ustar00 YfP @sdddddddddd d d d d ddgZddlZddlZddlZddlZddlmZddlmZmZm Z m Z ddlm Z m Z m Z ddlmZGdddejZeZejZeje_ddZddZGdddeZeZeZdddZGd d!d!eZd"d Zd#d$Z ddfd%dZ!eZ"dS)&Processcurrent_processactive_childrenfreeze_supportLockRLock SemaphoreBoundedSemaphore ConditionEventBarrierQueueManagerPipePool JoinableQueueN)r)rrrr)r r r )r c@sIeZdZdddfiddZddZeddZdS) DummyProcessNcCsPtjj||||||d|_tj|_d|_t|_ dS)NF) threadingThread__init__Z_pidweakrefWeakKeyDictionary _children _start_calledr_parent)selfgrouptargetnameargskwargsr"C/opt/alt/python35/lib64/python3.5/multiprocessing/dummy/__init__.pyr$s   zDummyProcess.__init__cCsW|jtkstd|_t|jdrCd|jj|r;r?r"r"r#rbs zValue.__init__cCs|jS)N)rC)rr"r"r#_getesz Value._getcCs ||_dS)N)rC)rr;r"r"r#_setgsz Value._setcCs dt|j|j|jfS)Nz <%s(%r, %r)>)typer)rBrC)rr"r"r#r<jszValue.__repr__N) r)r*r+rrDrEr,r;r<r"r"r"r#rAas   rAcCs tjtS)N)sysmodulesr)r"r"r"r#r mscCsdS)Nr"r"r"r"r#shutdownpsrIcCs ddlm}||||S)N) ThreadPool)ZpoolrK)Z processesZ initializerZinitargsrKr"r"r#rss)#__all__rrGrr=Z connectionrrrrrr r r Zqueuer rrrZcurrent_threadrrrrrobjectr0dictr-r@rAr rIrrr"r"r"r# s2     "      dummy/__pycache__/__init__.cpython-35.opt-2.pyc000064400000007612147554447510015261 0ustar00 ]P @sdddddddddd d d d d ddgZddlZddlZddlZddlZddlmZddlmZmZm Z m Z ddlm Z m Z m Z ddlmZGdddejZeZejZeje_ddZddZGdddeZeZeZdddZGd d!d!eZd"d Zd#d$Z ddfd%dZ!eZ"dS)&Processcurrent_processactive_childrenfreeze_supportLockRLock SemaphoreBoundedSemaphore ConditionEventBarrierQueueManagerPipePool JoinableQueueN)r)rrrr)r r r )r c@sIeZdZdddfiddZddZeddZdS) DummyProcessNcCsPtjj||||||d|_tj|_d|_t|_ dS)NF) threadingThread__init___pidweakrefWeakKeyDictionary _children _start_calledr_parent)selfgrouptargetnameargskwargsr#-/opt/alt/python35/lib64/python3.5/__init__.pyr$s   zDummyProcess.__init__cCs?d|_t|jdr+d|jj|r;r?r#r#r$rbs zValue.__init__cCs|jS)N)rC)rr#r#r$_getesz Value._getcCs ||_dS)N)rC)rr;r#r#r$_setgsz Value._setcCs dt|j|j|jfS)Nz <%s(%r, %r)>)typer)rBrC)rr#r#r$r<jszValue.__repr__N) r)r*r+rrDrEr,r;r<r#r#r#r$rAas   rAcCs tjtS)N)sysmodulesr)r#r#r#r$r mscCsdS)Nr#r#r#r#r$shutdownpsrIcCs ddlm}||||S)N) ThreadPool)poolrK) processes initializerinitargsrKr#r#r$rss)#__all__rrGrr= connectionrrrrrr r r queuer rrrcurrent_threadrrrrrobjectr0dictr-r@rAr rIrrr#r#r#r$ s2     "      dummy/__pycache__/__init__.cpython-35.opt-1.pyc000064400000007640147554447510015261 0ustar00 YfP @sdddddddddd d d d d ddgZddlZddlZddlZddlZddlmZddlmZmZm Z m Z ddlm Z m Z m Z ddlmZGdddejZeZejZeje_ddZddZGdddeZeZeZdddZGd d!d!eZd"d Zd#d$Z ddfd%dZ!eZ"dS)&Processcurrent_processactive_childrenfreeze_supportLockRLock SemaphoreBoundedSemaphore ConditionEventBarrierQueueManagerPipePool JoinableQueueN)r)rrrr)r r r )r c@sIeZdZdddfiddZddZeddZdS) DummyProcessNcCsPtjj||||||d|_tj|_d|_t|_ dS)NF) threadingThread__init__Z_pidweakrefWeakKeyDictionary _children _start_calledr_parent)selfgrouptargetnameargskwargsr"C/opt/alt/python35/lib64/python3.5/multiprocessing/dummy/__init__.pyr$s   zDummyProcess.__init__cCs?d|_t|jdr+d|jj|r"r"r#rbs zValue.__init__cCs|jS)N)rB)rr"r"r#_getesz Value._getcCs ||_dS)N)rB)rr:r"r"r#_setgsz Value._setcCs dt|j|j|jfS)Nz <%s(%r, %r)>)typer(rArB)rr"r"r#r;jszValue.__repr__N) r(r)r*rrCrDr+r:r;r"r"r"r#r@as   r@cCs tjtS)N)sysmodulesr(r"r"r"r#r mscCsdS)Nr"r"r"r"r#shutdownpsrHcCs ddlm}||||S)N) ThreadPool)ZpoolrJ)Z processesZ initializerZinitargsrJr"r"r#rss)#__all__rrFrr<Z connectionrrrrrr r r Zqueuer rrrZcurrent_threadrrrrrobjectr/dictr,r?r@r rHrrr"r"r"r# s2     "      __pycache__/shared_memory.cpython-38.pyc000064400000034105147577350250014264 0ustar00U ,aD@sdZddgZddlmZddlZddlZddlZddlZddlZej dkrXddl Z dZ n ddl Z dZ ej ejBZd Ze r~d Znd Zd d ZGdddZdZGdddZdS)zProvides shared memory for direct access across processes. The API of this package is currently provisional. Refer to the documentation for details. SharedMemory ShareableList)partialNntFTz/psm_Zwnsm_cCsBtttd}|dks tdtt|}t|tks>t|S)z6Create a random filename for the shared memory object.z_SHM_NAME_PREFIX too long)_SHM_SAFE_NAME_LENGTHlen_SHM_NAME_PREFIXAssertionErrorsecretsZ token_hex)nbytesnamerB/opt/alt/python38/lib64/python3.8/multiprocessing/shared_memory.py_make_filename&s rc@seZdZdZdZdZdZdZej Z dZ e r.dndZ ddd Zd d Zd d ZddZeddZeddZeddZddZddZdS)raCreates a new shared memory block or attaches to an existing shared memory block. Every shared memory block is assigned a unique name. This enables one process to create a shared memory block with a particular name so that a different process can attach to that same shared memory block using that same name. As a resource for sharing data across processes, shared memory blocks may outlive the original process that created them. When one process no longer needs access to a shared memory block that might still be needed by other processes, the close() method should be called. When a shared memory block is no longer needed by any process, the unlink() method should be called to ensure proper cleanup.NiTFrc Csl|dkstd|r0ttjB|_|dkr0td|dkrL|jtj@sLtdtrH|dkrt}ztj ||j|j d|_ Wnt k rYqZYnX||_ qqZn.|jrd|n|}tj ||j|j d|_ ||_ z<|r|rt|j |t|j }|j}t|j ||_Wn tk r*|YnXddlm}||j d n|r|dkr^tn|}ttjtjtj|d ?d @|d @|}zXt}|tjkr|dk rt t j!t"t j!|tjnWqNtjd ||d |_W5t|X||_ qVqNnX||_ t#tj$d|}zt%|tj$ddd} W5t|Xt&| }tjd ||d |_||_'t(|j|_)dS)Nrz!'size' must be a positive integerz4'size' must be a positive number different from zeroz&'name' can only be None if create=True)mode/)register shared_memory lr)ZtagnameF)* ValueError_O_CREXosO_RDWR_flagsO_EXCL _USE_POSIXr _posixshmemZshm_open_mode_fdFileExistsError_name_prepend_leading_slash ftruncatefstatst_sizemmap_mmapOSErrorunlinkresource_trackerr_winapiZCreateFileMappingZINVALID_HANDLE_VALUEZNULLZPAGE_READWRITEZ CloseHandleZ GetLastErrorZERROR_ALREADY_EXISTSerrnoZEEXISTstrerrorZOpenFileMappingZ FILE_MAP_READZ MapViewOfFileZVirtualQuerySize_size memoryview_buf) selfrcreatesizeZstatsrZ temp_nameZh_mapZlast_error_codeZp_bufrrr__init__Is             zSharedMemory.__init__cCs&z |Wntk r YnXdSN)closer+r4rrr__del__s zSharedMemory.__del__cCs|j|jd|jffS)NF) __class__rr6r:rrr __reduce__s zSharedMemory.__reduce__cCs|jjd|jd|jdS)N(z, size=))r<__name__rr6r:rrr__repr__szSharedMemory.__repr__cCs|jS)z4A memoryview of contents of the shared memory block.)r3r:rrrbufszSharedMemory.bufcCs.|j}tr*|jr*|jdr*|jdd}|S)z4Unique name that identifies the shared memory block.rrN)r$rr% startswith)r4Z reported_namerrrrs   zSharedMemory.namecCs|jS)zSize in bytes.)r1r:rrrr6szSharedMemory.sizecCsX|jdk r|jd|_|jdk r4|jd|_trT|jdkrTt|jd|_dS)zkCloses access to the shared memory from this instance but does not destroy the shared memory block.Nrr)r3releaser*r9rr"rr:rrrr9s     zSharedMemory.closecCs2tr.|jr.ddlm}t|j||jddS)zRequests that the underlying shared memory block be destroyed. In order to ensure proper cleanup of resources, unlink should be called once (and only once) across all processes which have access to the shared memory block.r) unregisterrN)rr$r-rEr Z shm_unlink)r4rErrrr,s   zSharedMemory.unlink)NFr)r@ __module__ __qualname____doc__r$r"r*r3rrrr!rr%r7r;r=rApropertyrBrr6r9r,rrrrr0s(  l     utf8c @seZdZdZedededededdj diZ dZ d d d d d d d d dZ e ddZd6ddddZddZddZddZddZddZddZd d!Zd"d#Zed$d%Zed&d'Zed(d)Zed*d+Zed,d-Zed.d/Zed0d1Zd2d3Z d4d5Z!dS)7raPattern for a mutable list-like object shareable via a shared memory block. It differs from the built-in list type in that these lists can not change their overall length (i.e. no append, insert, etc.) Because values are packed into a memoryview as bytes, the struct packing format for any storable value must require no more than 8 characters to describe its format.qdzxxxxxxx?z%dsNzxxxxxx?xcCs|Sr8rvaluerrr zShareableList.cCs|dtSN)rstripdecode _encodingrNrrrrP rQcCs |dSrR)rTrNrrrrP rQcCsdSr8r)Z_valuerrrrP rQ)rrrcCs:t|ttdjfsdSt|tr$dSt|tr2dSdSdS)zUsed in concert with _back_transforms_mapping to convert values into the appropriate Python objects when retrieving them from the list as well as when storing them.NrrrrW) isinstancestrbytesr<rNrrr_extract_recreation_codes  z&ShareableList._extract_recreation_codercs|dk rfdd|D}t|_tdd|Djks@ttfdd|D_fdd|D}tdjd |j j }nd }|dk r|dkrt |_ nt |d |d _ |dk rjttjdjj jd jfjtjd |j jjffd d|Dtjj j jjffdd|Dtjj j jjf|n t_tjj jd _dS)NcsPg|]H}t|ttfs$jt|n&jt|jt|jdfqS)r)rXrYrZ_types_mappingtype _alignmentr .0itemr:rr s   z*ShareableList.__init__..css|]}t|dkVqdS)rMN)r rafmtrrr )sz)ShareableList.__init__..c3s0|](}|ddkrjnt|ddVqdS)rsN)r_intrdr:rrrf*scsg|]}|qSr)r[r`r:rrrc.srKrMT)r5r6rc3s&|]}t|tr|n|VqdSr8)rXrYencoderav_encrrrfMsc3s|]}|VqdSr8)rjrkrmrrrfSs)r _list_lensumr tuple_allocated_bytesstructZcalcsize_format_size_metainfojoin_format_packing_metainfo_format_back_transform_codesrshmrV pack_intorB_offset_data_start_offset_packing_formats_offset_back_transform_codes unpack_from)r4ZsequencerZ_formatsZ_recreation_codesZrequested_sizer)rnr4rr7s|        zShareableList.__init__cCsj|dkr |n||j}||jks*|jdkr2tdtd|jj|j|dd}|d}|t }|S)z>Gets the packing format for a single value stored in the list.r Requested position out of range.8srMrS) ro IndexErrorrsr}rxrBr{rTrUrV)r4positionrlre fmt_as_strrrr_get_packing_formatds   z!ShareableList._get_packing_formatcCs\|dkr |n||j}||jks*|jdkr2tdtd|jj|j|d}|j|}|S)z9Gets the back transformation function for a single value.rr~b)rorrsr}rxrBr|_back_transforms_mapping)r4rtransform_codeZtransform_functionrrr_get_back_transformts z!ShareableList._get_back_transformcCs~|dkr |n||j}||jks*|jdkr2tdtd|jj|j|d|t| |}td|jj|j ||dS)zvSets the packing format and back transformation code for a single value in the list at the specified position.rr~rrMrN) rorrsryrxrBr{rjrVr[r|)r4rrrOrrrr!_set_packing_format_and_transforms   z/ShareableList._set_packing_format_and_transformcCsjz6|jt|jd|}t|||jj|\}Wntk rRtdYnX| |}||}|S)Nzindex out of range) rzrprrrsr}rrxrBrr)r4roffsetrlZback_transformrrr __getitem__s  zShareableList.__getitem__cCsz&|jt|jd|}||}Wntk rBtdYnXt|ttfsf|jt |}|}nZt|trz| t n|}t ||j|krt d|ddkr|}n|jt|j|f}||||t||jj||dS)Nzassignment index out of rangez(bytes/str item exceeds available storagerrg)rzrprrrrrXrYrZr]r^rjrVr rrrsryrxrB)r4rrOrZcurrent_formatZ new_formatZ encoded_valuerrr __setitem__s6  zShareableList.__setitem__cCst|j|jjddfS)Nr\r)rr<rxrr:rrrr=szShareableList.__reduce__cCstd|jjddS)NrKr)rsr}rxrBr:rrr__len__szShareableList.__len__cCs"|jjdt|d|jjdS)Nr>z, name=r?)r<r@listrxrr:rrrrAszShareableList.__repr__csdfddtjDS)z>The struct packing format used by all currently stored values.ric3s|]}|VqdSr8)r)rair:rrrfsz'ShareableList.format..)rurangeror:rr:rformatszShareableList.formatcCs |jdS)z=The struct packing format used for metainfo on storage sizes.rKror:rrrrtsz#ShareableList._format_size_metainfocCs d|jS)z?The struct packing format used for the values' packing formats.rrr:rrrrvsz&ShareableList._format_packing_metainfocCs d|jS)z?The struct packing format used for the values' back transforms.rrr:rrrrwsz*ShareableList._format_back_transform_codescCs|jddS)NrrMrr:rrrrzsz ShareableList._offset_data_startcCs|jt|jSr8)rzrprrr:rrrr{sz%ShareableList._offset_packing_formatscCs|j|jdS)NrM)r{ror:rrrr|sz*ShareableList._offset_back_transform_codescstfdd|DS)zCL.count(value) -> integer -- return number of occurrences of value.c3s|]}|kVqdSr8r)raentryrNrrrfsz&ShareableList.count..)rp)r4rOrrNrcountszShareableList.countcCs4t|D]\}}||kr|Sqt|ddS)zpL.index(value) -> integer -- return first index of value. Raises ValueError if the value is not present.z not in this containerN) enumerater)r4rOrrrrrindexs zShareableList.index)N)"r@rFrGrHrhfloatboolrYrZr<r]r_r staticmethodr[r7rrrrrr=rrArIrrtrvrwrzr{r|rrrrrrrs^  F       )rH__all__ functoolsrr)rr/rsr rr.rr O_CREATrrrr rrrVrrrrrs,    E__pycache__/popen_forkserver.cpython-38.pyc000064400000004600147577350250015014 0ustar00U ,a@sddlZddlZddlmZmZejs.edddlmZddlm Z ddlm Z ddlm Z d gZ Gd d d e ZGd d d e jZdS) N) reductionset_spawning_popenz,No support for sending fds between processes) forkserver) popen_fork)spawn)utilPopenc@seZdZddZddZdS)_DupFdcCs ||_dSN)ind)selfr rE/opt/alt/python38/lib64/python3.8/multiprocessing/popen_forkserver.py__init__sz_DupFd.__init__cCst|jSr )rZget_inherited_fdsr )r rrrdetachsz _DupFd.detachN)__name__ __module__ __qualname__rrrrrrr sr csBeZdZdZeZfddZddZddZe j fdd Z Z S) r rcsg|_t|dSr )_fdssuperr)r process_obj __class__rrr!szPopen.__init__cCs|j|t|jdS)Nr)rappendlen)r fdrrrduplicate_for_child%s zPopen.duplicate_for_childc Cst|j}t}t|zt||t||W5tdXt |j \|_ }t |}t|tj||j f|_t|ddd}||W5QRXt|j |_dS)NwbT)closefd)rZget_preparation_data_nameioBytesIOrrdumprZconnect_to_new_processrsentinelosduprZFinalizeZ close_fds finalizeropenwrite getbuffer read_signedpid)r rZ prep_dataZbufwZ _parent_wfrrr_launch)s     z Popen._launchc Csr|jdkrlddlm}|tjkr$dnd}||jg|s:dSzt|j|_Wntt fk rjd|_YnX|jS)Nr)wait) returncodeZmultiprocessing.connectionr0r%WNOHANGr$rr+OSErrorEOFError)r flagr0Ztimeoutrrrpoll=s   z Popen.poll) rrrmethodr ZDupFdrrr/r%r3r7 __classcell__rrrrr s  )r!r%contextrrZHAVE_SEND_HANDLE ImportErrorrrrr__all__objectr r rrrrs     __pycache__/popen_spawn_posix.cpython-38.opt-2.pyc000064400000004257147577350250016146 0ustar00U ,a@spddlZddlZddlmZmZddlmZddlmZddlmZdgZ Gdd d e Z Gd ddej Z dS) N) reductionset_spawning_popen) popen_fork)spawn)utilPopenc@seZdZddZddZdS)_DupFdcCs ||_dSNfdselfr rF/opt/alt/python38/lib64/python3.8/multiprocessing/popen_spawn_posix.py__init__sz_DupFd.__init__cCs|jSr r )rrrrdetachsz _DupFd.detachN)__name__ __module__ __qualname__rrrrrrr sr cs4eZdZdZeZfddZddZddZZ S)rrcsg|_t|dSr )_fdssuperr)r process_obj __class__rrrszPopen.__init__cCs|j||Sr )rappendr rrrduplicate_for_child"s zPopen.duplicate_for_childc CsXddlm}|}|j|t|j}t }t |zt ||t ||W5t dXd}}}} z~t\}}t\}} tj||d} |j||gt t| |j|_||_t| ddd} | |W5QRXW5g} || fD]} | dk r| | qt |t j| |_||fD]} | dk r6t| q6XdS)Nr)resource_tracker) tracker_fdZ pipe_handlewbF)closefd)rZgetfdrrrZget_preparation_data_nameioBytesIOrrdumprZFinalizeZ close_fds finalizerosclosepipeZget_command_lineextendZspawnv_passfdsZget_executablepidsentinelopenwrite getbuffer)rrrrZ prep_datafpZparent_rZchild_wZchild_rZparent_wZ fds_to_closer cmdfrrr_launch&sB            z Popen._launch) rrrmethodr ZDupFdrrr3 __classcell__rrrrrs  ) r#r'contextrrr!rrr__all__objectr rrrrrs    __pycache__/managers.cpython-38.opt-2.pyc000064400000110775147577350250014173 0ustar00U ,a@sBdddddgZddlZddlZddlZddlZddlZddlZddlZddlmZddl m Z d d l m Z d d l mZmZmZd d l mZd d l mZd dl mZd dl mZzd dl mZdZWnek rdZYnXddZeejedddDZedek r.ddZeD]ZeeeqGdddeZdifddZ ddZ!Gd d!d!e"Z#d"d#Z$d$d%Z%Gd&d'd'eZ&Gd(d)d)eZ'e j(e j)fe j*e j+fd*Z,Gd+ddeZ-Gd,d-d-e.Z/Gd.ddeZ0d/d0Z1ifd1d2Z2dld3d4Z3Gd5d6d6eZ4Gd7d8d8eZ5dmd9d:Z6Gd;d<dd>e0Z8Gd?d@d@e8Z9GdAdBdBe0Z:GdCdDdDe0Z;GdEdFdFe0ZGdKdLdLe>Z?e2dMdNZ@dOdPie@_Ae2dQdRZBe2dSdTZCdUdUdUdPdPdVeC_AGdWdSdSeCZDGdXdde-ZEeEdYejFeEdZejFeEd[ejGe:eEd\ejHe8eEd]ejIe8eEd^ejJe8eEd_ejKe8eEd`ejLe9eEdaejMe;eEdbejNeDeEdcee?eEddeOe@eEd8e5e=eEd:e6eBeEd6e4e<eEjdPe7ddeeEjdUddfer>GdgdhdhZPGdidjdje&ZQGdkdde-ZRdS)n BaseManager SyncManager BaseProxyTokenSharedMemoryManagerN)getpid) format_exc) connection) reductionget_spawning_popen ProcessError)pool)process)util) get_context) shared_memoryTFcCstj|j|ffSN)arraytypecodetobytes)ar=/opt/alt/python38/lib64/python3.8/multiprocessing/managers.py reduce_array-srcCsg|]}tti|qSr)typegetattr.0namerrr 1sr )itemskeysvaluescCstt|ffSr)listobjrrrrebuild_as_list3sr'c@s0eZdZdZddZddZddZdd Zd S) rtypeidaddressidcCs||||_|_|_dSrr()selfr)r*r+rrr__init__BszToken.__init__cCs|j|j|jfSrr(r,rrr __getstate__EszToken.__getstate__cCs|\|_|_|_dSrr(r,staterrr __setstate__HszToken.__setstate__cCsd|jj|j|j|jfS)Nz %s(typeid=%r, address=%r, id=%r)) __class____name__r)r*r+r.rrr__repr__KszToken.__repr__N)r4 __module__ __qualname__ __slots__r-r/r2r5rrrrr<s rcCs8|||||f|\}}|dkr*|St||dS)N#RETURN)sendrecvconvert_to_error)cr+ methodnameargskwdskindresultrrrdispatchSs  rCcCsd|dkr |S|dkrRt|ts4td||t||dkrHtd|St|Sntd|SdS)N#ERROR) #TRACEBACK#UNSERIALIZABLEz.Result {0!r} (kind '{1}') type is {2}, not strrFzUnserializable message: %s zUnrecognized message type {!r}) isinstancestr TypeErrorformatr RemoteError ValueError)rArBrrrr<]s   r<c@seZdZddZdS)rKcCsdt|jddS)NzM --------------------------------------------------------------------------- rzK---------------------------------------------------------------------------)rHr?r.rrr__str__mszRemoteError.__str__N)r4r6r7rMrrrrrKlsrKcCs2g}t|D] }t||}t|r ||q |Sr)dirrcallableappend)r&temprfuncrrr all_methodsts    rScCsddt|DS)NcSsg|]}|ddkr|qS)r_rrrrrr s z"public_methods..)rSr%rrrpublic_methodssrUc @seZdZddddddddd g Zd d Zd d ZddZddZddZddZ ddZ ddZ e e e dZ ddZ ddZdd Zd!d"Zd#d$Zd%e_d&d'Zd(d)Zd*d+Zd,d-Zd.S)/Servershutdowncreateaccept_connection get_methods debug_infonumber_of_objectsdummyincrefdecrefcCsxt|tstd|t|||_t||_t |\}}||dd|_ |j j |_ ddi|_ i|_ i|_t|_dS)Nz&Authkey {0!r} is type {1!s}, not bytes)r*Zbacklog0Nr)rGbytesrIrJrregistryrAuthenticationStringauthkeylistener_clientlistenerr* id_to_objid_to_refcountid_to_local_proxy_obj threadingLockmutex)r,rdr*rf serializerListenerClientrrrr-s      zServer.__init__c Cst|_|t_zVtj|jd}d|_|z|jsL|jdq4Wnttfk rfYnXW5tjtjkrt dtjt_tj t_ t dXdS)Nzresetting stdout, stderrr)targetTr )rlEvent stop_eventrcurrent_process_manager_serversysstdout __stdout__rdebug __stderr__stderrexitThreadaccepterdaemonstartis_setwaitKeyboardInterrupt SystemExit)r,rrrr serve_forevers       zServer.serve_forevercCsNz|j}Wntk r&YqYnXtj|j|fd}d|_|qdS)Nrrr?T)rhZacceptOSErrorrlr~handle_requestrr)r,r=trrrrs zServer.accepterc Cs4d}}}z>t||jt||j|}|\}}}}t||}Wntk rhdtf} Yn>Xz||f||}Wntk rdtf} Yn Xd|f} z|| Wnrtk r&} zRz|dtfWntk rYnXt d| t d|t d| W5d} ~ XYnX| dS)NrEr9zFailure to send message: %rz ... request was %r ... exception was %r) r Zdeliver_challengerfZanswer_challenger;r Exceptionrr:rinfoclose) r,r=funcnamerBrequestignorer?r@rRmsgerrrrs2    zServer.handle_requestc Cstdtj|j}|j}|j}|j szBd}}|}|\}}} } z||\}} } Wn^t k r} z@z|j |\}} } Wn&t k r}z| W5d}~XYnXW5d} ~ XYnX|| krt d|t || ft||}z|| | }Wn,tk r"}z d|f}W5d}~XYnPX| o4| |d}|rj||||\}}t||j|}d||ff}nd|f}Wnt k r|dkrdtf}nNz,|j|}|||||f| | }d|f}Wn tk rdtf}YnXYnPtk rtdtjtdYn tk r<dtf}YnXzDz ||Wn2tk r~}z|d tfW5d}~XYnXWq$tk r}z@td tjtd |td ||td W5d}~XYq$Xq$dS)Nz$starting server thread to service %rz+method %r of %r object is not in exposed=%rrD#PROXYr9rEz$got EOF -- exiting thread serving %rrrFzexception in thread serving %rz ... message was %rrr )rrzrlcurrent_threadrr;r:rirtrKeyErrorrkAttributeErrorrrrgetrXrr*rfallback_mappingEOFErrorrwr}rr)r,connr;r:rir>r&ridentr?r@exposed gettypeidkeZ second_keZfunctionresrrr)ZridentZrexposedtokenZ fallback_funcrBrrr serve_clients   (        $  zServer.serve_clientcCs|Srrr,rrr&rrrfallback_getvalue5szServer.fallback_getvaluecCst|SrrHrrrr fallback_str8szServer.fallback_strcCst|Sr)reprrrrr fallback_repr;szServer.fallback_repr)rMr5 #GETVALUEcCsdSrrr,r=rrrr]Dsz Server.dummyc Cs|jtg}t|j}||D]<}|dkr&|d||j|t|j|dddfq&d|W5QRSQRXdS)Nraz %s: refcount=%s %srK ) rnr$rjr"sortrPrHrijoin)r,r=rBr"rrrrr[Gs zServer.debug_infocCs t|jSr)lenrjrrrrr\WszServer.number_of_objectscCsLz:ztd|dWnddl}|YnXW5|jXdS)Nz!manager received shutdown messager9Nr)rtsetrrzr: traceback print_exc)r,r=rrrrrW^s zServer.shutdownc Ost|dkr|^}}}}n|s(tdnd|krDtdt|d|d}t|dkr~|^}}}ddl}|jdtdd nFd |krtdt|d|d }|^}}ddl}|jd tdd t|}|j|j|\}}}} |dkr|st|dkr t d |d} n |||} |dkr2t | }|dk rlt |t s\td |t|t|t|}dt| } td|| | t||f|j| <| |jkrd|j| <W5QRX||| | t|fS)Nz8descriptor 'create' of 'Server' object needs an argumentr)7create expected at least 2 positional arguments, got %dr rz2Passing 'typeid' as keyword argument is deprecated) stacklevelr=z-Passing 'c' as keyword argument is deprecatedz4Without callable, must have one non-keyword argumentz,Method_to_typeid {0!r}: type {1!s}, not dictz%xz&%r callable returned object with id %r)rrIpopwarningswarnDeprecationWarningtuplernrdrLrUrGdictrJrr$r+rrzrrirjr^) r?r@r,r=r)rrOrmethod_to_typeid proxytyper&rrrrrXksp                  z Server.createz$($self, c, typeid, /, *args, **kwds)cCst|j|jdS)Nr )rrir+)r,r=rrrrrZszServer.get_methodscCs"|t_|d||dS)Nr)rlrrr:r)r,r=rrrrrYs  zServer.accept_connectionc Cs|jz|j|d7<Wnhtk r}zJ||jkrrd|j|<|j||j|<|j|\}}}td|n|W5d}~XYnXW5QRXdS)Nr z&Server re-enabled tracking & INCREF %r)rnrjrrkrirrz)r,r=rrr&rrrrrr^s  z Server.increfc Cs||jkr$||jkr$td|dS|jZ|j|dkrXtd||j||j||j|d8<|j|dkr|j|=W5QRX||jkrd|j|<td||j|j|=W5QRXdS)NzServer DECREF skipping %rrz+Id {0!s} ({1!r}) has refcount {2:n}, not 1+r )NrNzdisposing of obj with id %r)rjrkrrzrnAssertionErrorrJri)r,r=rrrrr_s,     z Server.decrefN)r4r6r7publicr-rrrrrrrrr]r[r\rWrX__text_signature__rZrYr^r_rrrrrVs: "Q =rVc@seZdZdgZdZdZdZdS)Statevaluerr rN)r4r6r7r8INITIALSTARTEDSHUTDOWNrrrrrsr)pickleZ xmlrpclibc@seZdZiZeZd!ddZddZddZd"d d Z e d#d d Z ddZ d$ddZ ddZddZddZddZeddZeddZe d%dd ZdS)&rNrcCs\|dkrtj}||_t||_t|_tj|j_ ||_ t |\|_ |_ |pTt|_dSr)rrurf_addressre_authkeyr_staterr _serializerrgZ _Listener_Clientr_ctx)r,r*rfroZctxrrrr-s   zBaseManager.__init__cCsf|jjtjkrP|jjtjkr&tdn*|jjtjkr>tdntd|jjt|j |j |j |j S)NAlready started serverManager has shut downUnknown state {!r}) rrrrrr rrJrV _registryrrrr.rrr get_servers    zBaseManager.get_servercCs8t|j\}}||j|jd}t|ddtj|j_dS)Nrfr]) rgrrrrCrrrr)r,rprqrrrrconnects zBaseManager.connectrc Cs4|jjtjkrP|jjtjkr&tdn*|jjtjkr>tdntd|jj|dk rht|sht dt j dd\}}|j j t|j|j|j|j|j|||fd|_dd d |jjD}t|jd ||j_|j|||_|tj|j_tj|t|j|j|j|j|j|jfd d |_ dS)Nrrrzinitializer must be a callableF)Zduplexr:css|]}t|VqdSrr)rirrr Asz$BaseManager.start..-rr?Z exitpriority)!rrrrrr rrJrOrIr ZPiperZProcessr _run_serverrrrr_processrZ _identityr4rrrr;rFinalize_finalize_managerrrW)r, initializerinitargsreaderwriterrrrrr(sH        zBaseManager.startc Cs^ttjtj|dk r |||||||}||j|td|j| dS)Nzmanager serving at %r) signalSIGINTSIG_IGN_Serverr:r*rrrr) clsrdr*rfrorrrserverrrrrSs zBaseManager._run_servercOsN|j|j|jd}zt|dd|f||\}}W5|Xt||j||fS)NrrX)rrrrrCr)r,r)r?r@rr+rrrr_createjs  zBaseManager._createcCs*|jdk r&|j||js&d|_dSr)rris_aliver,timeoutrrrrvs   zBaseManager.joincCs2|j|j|jd}zt|ddWS|XdS)Nrr[rrrrrCr,rrrr _debug_infoszBaseManager._debug_infocCs2|j|j|jd}zt|ddWS|XdS)Nrr\rrrrr_number_of_objectsszBaseManager._number_of_objectscCsj|jjtjkr||jjtjkrf|jjtjkr.temp) __dict__rcopy AutoProxyrr$r!r4setattr) rr)rOrrr create_methodkeyrrQrrrregisters(     zBaseManager.register)NNrN)Nr)Nr)N)NNNNT)r4r6r7rrVrr-rrr classmethodrrrrrrr staticmethodrpropertyr*rrrrrrs6  +       c@seZdZddZddZdS)ProcessLocalSetcCst|dddS)NcSs|Sr)clearr%rrrz*ProcessLocalSet.__init__..)rregister_after_forkr.rrrr-szProcessLocalSet.__init__cCs t|dfSrb)rr.rrr __reduce__szProcessLocalSet.__reduce__N)r4r6r7r-r rrrrrsrc@s|eZdZiZeZdddZddZdifd d Z d d Z d dZ e ddZ ddZddZddZddZddZdS)rNTFc Cstj8tj|jd}|dkr:ttf}|tj|j<W5QRX|d|_|d|_ ||_ |j j |_ ||_ ||_t|d|_||_|dk rt||_n"|j dk r|j j|_n tj|_|r|t|tjdS)Nrr )r_mutexrrr*rZForkAwareLocalr_tls_idset_tokenr+_id_managerrrgr_owned_by_managerrrerrurf_increfr  _after_fork) r,rrorrfrr^ manager_ownedZ tls_idsetrrrr-s*      zBaseProxy.__init__cCsdtdtj}tjdkr4|dtj7}|j|jj |j d}t |dd|f||j _ dS)Nzmaking connection to managerZ MainThread|rrY)rrzrrurrlrrrr*rrCrr )r,rrrrr_connect-s  zBaseProxy._connectrc Csz |jj}Wn6tk rBtdtj||jj}YnX| |j |||f| \}}|dkrp|S|dkr|\}}|j j |jd} |jj|_| ||j|j |j|d} |j|j|jd}t|dd|jf| St||dS)Nz#thread %r does not own a connectionr9rrrr_)rr rrrzrlrrrr:rr;rrr)rr*rrrrCr+r<) r,r>r?r@rrArBrrrrrrr _callmethod6s6   zBaseProxy._callmethodcCs |dS)Nrrr.rrr _getvalueTszBaseProxy._getvaluec Cs|jrtd|jjdS|j|jj|jd}t|dd|j ftd|jj|j |j |j oj|j j }tj|tj|j|j||j|j |jfdd|_dS)Nz%owned_by_manager skipped INCREF of %rrr^z INCREF %r r)rrrzrr+rr*rrCrraddrrrr_decrefrZ_close)r,rr1rrrrZs$ zBaseProxy._increfc Cs||j|dks |jtjkrz2td|j||j|d}t|dd|jfWqt k r}ztd|W5d}~XYqXntd|j|st |drtdt j |j|`dS)Nz DECREF %rrr_z... decref failed %sz%DECREF %r -- manager already shutdownr z-thread %r has no more proxies so closing conn)discardr+rrrrrzr*rCrrrlrrr r)rrfr1ZtlsZidsetrrrrrrr ns   zBaseProxy._decrefc CsHd|_z |Wn0tk rB}ztd|W5d}~XYnXdS)Nzincref failed: %s)rrrrr)r,rrrrrs  zBaseProxy._after_forkcCs^i}tdk r|j|d<t|ddrB|j|d<tt|j|j|ffStt||j|j|ffSdS)Nrf_isautoFr) r rrr RebuildProxyrrrrr,r@rrrr s    zBaseProxy.__reduce__cCs|Sr)r)r,Zmemorrr __deepcopy__szBaseProxy.__deepcopy__cCsdt|j|jjt|fS)Nz<%s object, typeid %r at %#x>)rr4rr)r+r.rrrr5szBaseProxy.__repr__cCs:z |dWStk r4t|dddYSXdS)Nr5rz; '__str__()' failed>)rrrr.rrrrMs zBaseProxy.__str__)NNNTF)r4r6r7rrZForkAwareThreadLockrr-rrrrrr rr r%r5rMrrrrrs& )   cCsttdd}|rT|j|jkrTtd|d|d<|j|jkrT|j|j|j|j<| ddopttdd }|||fd|i|S)Nrvz*Rebuild a proxy owned by manager, token=%rTrr^Z _inheritingF) rrrur*rrzr+rkrir)rRrror@rr^rrrr#s    r#cCspt|}z|||fWStk r*YnXi}|D]}td||f|q4t|tf|}||_||||f<|S)NzOdef %s(self, /, *args, **kwds): return self._callmethod(%r, args, kwds))rrexecrrr)rr_cacheZdicZmeth ProxyTyperrr MakeProxyTypes  r)c Cst|d}|dkrB||j|d}zt|dd|f}W5|X|dkrX|dk rX|j}|dkrjtj}td|j |}||||||d} d| _ | S)Nr rrZz AutoProxy[%s])rrfr^T) rgr*rrCrrrurfr)r)r") rrorrfrr^rrr(rrrrrs     rc@seZdZddZddZdS) NamespacecKs|j|dSr)rupdater$rrrr-szNamespace.__init__cCsZt|j}g}|D]$\}}|ds|d||fq|d|jjd|fS)NrTz%s=%rz%s(%s)z, ) r$rr! startswithrPrr3r4r)r,r!rQrrrrrr5s  zNamespace.__repr__N)r4r6r7r-r5rrrrr*sr*c@s8eZdZd ddZddZddZdd ZeeeZd S) ValueTcCs||_||_dSr) _typecode_value)r,rrlockrrrr-szValue.__init__cCs|jSrr/r.rrrrsz Value.getcCs ||_dSrr1r,rrrrr sz Value.setcCsdt|j|j|jfS)Nz %s(%r, %r))rr4r.r/r.rrrr5 szValue.__repr__N)T) r4r6r7r-rrr5rrrrrrr-s  r-cCs t||Sr)r)rsequencer0rrrArraysr4c@s8eZdZdZddZddZddZdd Zd d Zd S) IteratorProxy)__next__r:throwrcCs|Srrr.rrr__iter__szIteratorProxy.__iter__cGs |d|S)Nr6rr,r?rrrr6szIteratorProxy.__next__cGs |d|S)Nr:rr9rrrr:szIteratorProxy.sendcGs |d|S)Nr7rr9rrrr7szIteratorProxy.throwcGs |d|S)Nrrr9rrrr!szIteratorProxy.closeN) r4r6r7rr8r6r:r7rrrrrr5s r5c@s2eZdZdZd ddZddZdd Zd d ZdS) AcquirerProxy)acquirereleaseTNcCs"|dkr|fn||f}|d|SNr;r)r,Zblockingrr?rrrr;'szAcquirerProxy.acquirecCs |dSNr<rr.rrrr<*szAcquirerProxy.releasecCs |dSr=rr.rrrr,szAcquirerProxy.__enter__cCs |dSr>rrrrrr.szAcquirerProxy.__exit__)TN)r4r6r7rr;r<rrrrrrr:%s  r:c@s6eZdZdZd ddZd ddZdd Zdd d ZdS)ConditionProxy)r;r<rnotify notify_allNcCs|d|fSNrrrrrrr4szConditionProxy.waitr cCs|d|fS)Nr@r)r,nrrrr@6szConditionProxy.notifycCs |dS)NrArr.rrrrA8szConditionProxy.notify_allcCsd|}|r|S|dk r$t|}nd}d}|s`|dk rN|t}|dkrNq`|||}q,|S)Nr)time monotonicr)r,Z predicaterrBZendtimeZwaittimerrrwait_for:s  zConditionProxy.wait_for)N)r )N)r4r6r7rrr@rArFrrrrr?2s   r?c@s2eZdZdZddZddZddZd d d ZdS) EventProxy)rrr rcCs |dS)Nrrr.rrrrOszEventProxy.is_setcCs |dSNrrr.rrrrQszEventProxy.setcCs |dS)Nr rr.rrrr SszEventProxy.clearNcCs|d|fSrBrrrrrrUszEventProxy.wait)N)r4r6r7rrrr rrrrrrGMs rGc@sNeZdZdZdddZddZddZed d Zed d Z ed dZ dS) BarrierProxy)__getattribute__rabortresetNcCs|d|fSrBrrrrrr[szBarrierProxy.waitcCs |dS)NrKrr.rrrrK]szBarrierProxy.abortcCs |dS)NrLrr.rrrrL_szBarrierProxy.resetcCs |ddS)NrJ)partiesrr.rrrrMaszBarrierProxy.partiescCs |ddS)NrJ) n_waitingrr.rrrrNdszBarrierProxy.n_waitingcCs |ddS)NrJ)brokenrr.rrrrOgszBarrierProxy.broken)N) r4r6r7rrrKrLrrMrNrOrrrrrIYs   rIc@s(eZdZdZddZddZddZdS) NamespaceProxy)rJ __setattr__ __delattr__cCs0|ddkrt||St|d}|d|fS)NrrTrrJ)objectrJr,r callmethodrrr __getattr__ns   zNamespaceProxy.__getattr__cCs4|ddkrt|||St|d}|d||fS)NrrTrrQ)rSrQrJ)r,rrrUrrrrQss  zNamespaceProxy.__setattr__cCs0|ddkrt||St|d}|d|fS)NrrTrrR)rSrRrJrTrrrrRxs   zNamespaceProxy.__delattr__N)r4r6r7rrVrQrRrrrrrPlsrPc@s*eZdZdZddZddZeeeZdS) ValueProxy)rrcCs |dS)Nrrr.rrrrszValueProxy.getcCs|d|fSrHrr2rrrrszValueProxy.setN)r4r6r7rrrrrrrrrrWsrW BaseListProxy)__add__ __contains__ __delitem__ __getitem____len____mul__ __reversed____rmul__ __setitem__rPcountextendindexinsertrremovereverser__imul__c@seZdZddZddZdS) ListProxycCs|d|f|S)Nrcrr2rrr__iadd__szListProxy.__iadd__cCs|d|f|S)Nrhrr2rrrrhszListProxy.__imul__N)r4r6r7rjrhrrrrrisri DictProxy)rZr[r\r8r]rar rrr!r"rpopitem setdefaultr+r#r8Iterator ArrayProxy)r]r\ra PoolProxy) Zapply apply_asyncrimapimap_unorderedrmap map_asyncstarmap starmap_asyncrZ AsyncResult)rqrurwrrrsc@seZdZddZddZdS)rpcCs|Srrr.rrrrszPoolProxy.__enter__cCs |dSr)rrrrrrszPoolProxy.__exit__N)r4r6r7rrrrrrrpsc@s eZdZdS)rN)r4r6r7rrrrrsQueueZ JoinableQueuersrmRLock SemaphoreBoundedSemaphore ConditionBarrierPoolr$r)rr)rc@sHeZdZgfddZddZddZddZd d Zd d Zd dZ dS)_SharedMemoryTrackercCs||_||_dSrZshared_memory_context_name segment_names)r,rrrrrr-sz_SharedMemoryTracker.__init__cCs(td|dt|j|dS)NzRegister segment  in pid )rrzrrrPr, segment_namerrrregister_segmentsz%_SharedMemoryTracker.register_segmentcCsBtd|dt|j|t|}||dS)NzDestroy segment r) rrzrrrfr SharedMemoryrunlink)r,rZsegmentrrrdestroy_segments   z$_SharedMemoryTracker.destroy_segmentcCs"|jddD]}||qdSr)rrrrrrrsz_SharedMemoryTracker.unlinkcCs(td|jjdt|dS)NzCall z .__del__ in )rrzr3r4rrr.rrr__del__sz_SharedMemoryTracker.__del__cCs |j|jfSrrr.rrrr/sz!_SharedMemoryTracker.__getstate__cCs|j|dSr)r-r0rrrr2sz!_SharedMemoryTracker.__setstate__N) r4r6r7r-rrrrr/r2rrrrrs  rc@sReZdZejdddgZddZddZde_d d Zd d Z d dZ ddZ dS)SharedMemoryServer track_segmentrelease_segment list_segmentscOsZtj|f|||j}t|tr,t|}td|dt|_ t dtdS)NZshm_rTz"SharedMemoryServer started by pid ) rVr-r*rGrcosfsdecoderrshared_memory_contextrrz)r,r?kwargsr*rrrr- s  zSharedMemoryServer.__init__cOstt|dkr|d}n4d|kr(|d}n"|s6tdntdt|dttj|ddrhtj|d <tj||S) Nrrr)zDdescriptor 'create' of 'SharedMemoryServer' object needs an argumentrr rZ_shared_memory_proxyr)rrIrr,rdrrVrX)r?rZtypeodr)rrrrXs      zSharedMemoryServer.createz&($self, c, typeid, /, *args, **kwargs)cCs|jt||Sr)rrrVrWrrrrrW)s zSharedMemoryServer.shutdowncCs|j|dSr)rrr,r=rrrrr.sz SharedMemoryServer.track_segmentcCs|j|dSr)rrrrrrr2sz"SharedMemoryServer.release_segmentcCs|jjSr)rrrrrrr7sz SharedMemoryServer.list_segmentsN) r4r6r7rVrr-rXrrWrrrrrrrrs rc@s8eZdZeZddZddZddZddZd d Z d S) rcOsNtjdkrddlm}|tj|f||t|j j dt dS)Nposixr )resource_trackerz created by pid ) rrrZensure_runningrr-rrzr3r4r)r,r?rrrrrr-Is   zSharedMemoryManager.__init__cCst|jjdtdS)Nz.__del__ by pid )rrzr3r4rr.rrrrUszSharedMemoryManager.__del__cCsh|jjtjkrP|jjtjkr&tdn*|jjtjkr>tdntd|jj||j |j |j |j S)Nz"Already started SharedMemoryServerz!SharedMemoryManager has shut downr) rrrrrr rrJrrrrrr.rrrrYs    zSharedMemoryManager.get_serverc Csx|j|j|jd\}tjdd|d}zt|dd|jfWn.tk rh}z||W5d}~XYnXW5QRX|S)NrT)rXsizer) rrrrrrCr BaseExceptionr)r,rrZsmsrrrrrfs z SharedMemoryManager.SharedMemoryc Csv|j|j|jdZ}t|}zt|dd|jjfWn0tk rf}z|j |W5d}~XYnXW5QRX|S)Nrr) rrrr ShareableListrCZshmrrr)r,r3rZslrrrrrrs   z!SharedMemoryManager.ShareableListN) r4r6r7rrr-rrrrrrrrr=s     )NNNT)T)S__all__rwrlrrZqueuerDrrrrrr contextr r r rrrrrZ HAS_SHMEM ImportErrorrrZ view_typesr$r'Z view_typerSrrCr<rrKrSrUrVrrprqZ XmlListenerZ XmlClientrgrrrrr#r)rr*r-r4r5r:r?rGrIrPrWrXrirkrroZ BasePoolProxyrprrxrsrmryrzr{r|r}r~rrrrrrrr s            c   w 4             %8__pycache__/spawn.cpython-38.opt-1.pyc000064400000014774147577350250013527 0ustar00U ,aP$@s$ddlZddlZddlZddlZddlmZmZddlmZddlm Z ddlm Z ddd d d d d gZ ej dkrzdZ dZneeddZ ejdZerejejdanejadd Zdd ZddZddZdd Zd&ddZddZddZdd ZgZ dd Z!d!d"Z"d#d$Z#d%d Z$dS)'N)get_start_methodset_start_method)process) reduction)util_mainfreeze_supportset_executableget_executableget_preparation_dataget_command_lineimport_main_pathwin32Ffrozenzpythonservice.exez python.execCs|adSN _python_exe)Zexer:/opt/alt/python38/lib64/python3.8/multiprocessing/spawn.pyr )scCstSrrrrrrr -scCs$t|dkr|ddkrdSdSdS)z= Return whether commandline indicates we are forking r--multiprocessing-forkTFN)len)argvrrr is_forking4srcCsdttjr`i}tjddD]0}|d\}}|dkr@d||<qt|||<qtf|tdS)zE Run code for process object if this in not the main process rN=None)rsysrsplitint spawn_mainexit)kwdsargnamevaluerrrr >s   cKshttddr(tjdgdd|DSd}|ddd |D;}t}tg|d |dgSd S) zJ Returns prefix of command line used for spawning a child process rFrcSsg|] }d|qS)%s=%rr.0itemrrr Tsz$get_command_line..zWsz#get_command_line..z-cN)getattrr executableitemsjoinrZ_args_from_interpreter_flagsr)r"progZoptsrrrr Ns c Cstjdkr`ddl}ddl}|dk r:||j|jBd|}nd}tj||d}| |t j }|}n"ddl m } || j_|}t |}t||} t| dS)z7 Run code specified by data received over pipe rrNF)source_processr)resource_tracker)rplatformmsvcrt_winapiZ OpenProcessZ SYNCHRONIZEZPROCESS_DUP_HANDLErZ duplicateZopen_osfhandleosO_RDONLYr2Z_resource_trackerZ_fdduprr!) Z pipe_handleZ parent_pidZ tracker_fdr4r5r1Z new_handlefdparent_sentinelr2Zexitcoderrrr \s*     r c Cs`tj|ddd@}dt_z$tj|}t|tj|}W5t`XW5QRX| |S)NrbT)closefd) r6fdopenrcurrent_process _inheritingrpickleloadprepare _bootstrap)r:r;Z from_parentZpreparation_dataselfrrrrxs  cCsttddrtddS)Nr@Fa An attempt has been made to start a new process before the current process has finished its bootstrapping phase. This probably means that you are not using fork to start your child processes and you have forgotten to use the proper idiom in the main module: if __name__ == '__main__': freeze_support() ... The "freeze_support()" line can be omitted if the program is not going to be frozen to produce an executable.)r,rr? RuntimeErrorrrrr_check_not_importing_mainsrGcCstttjtjd}tjdk r2tj|d<t j }z| d}Wnt k r^Yn Xtj||<|j||t jtjttdt jd}t|jdd}|dk r||d<nft jd kststst|d d}|dk rtj |s tjdk r tj tj|}tj ||d <|S) zM Return info about parent needed by child to unpickle process object ) log_to_stderrauthkeyN log_levelr8)r$sys_pathsys_argvorig_dirdir start_method__main__r$init_main_from_namer__file__init_main_from_path)rGdictrZ_log_to_stderrrr?rIZ_loggerZgetEffectiveLevelrpathcopyindex ValueError ORIGINAL_DIRupdaterr6getcwdrmodulesr,__spec__r3WINEXE WINSERVICEisabsr/normpath)r$drKi main_moduleZ main_mod_name main_pathrrrr sD       cCsd|kr|dt_d|kr,|dt_d|krD|drDtd|kr^t|dd|krp|dt_ d|kr|dt_ d|krt |dd|kr|dt_ d |krt|d d d d |krt|d nd |krt|d dS)zE Try to get current process ready to unpickle process object r$rIrHrJrKrLrNrMrOT)ZforcerQrSN)rr?r$rIrrHZ get_loggerZsetLevelrrUrr6chdirrYr_fixup_main_from_name_fixup_main_from_path)datarrrrCs,   rCcCs~tjd}|dks|dr dSt|jdd|kr6dSt|td}t j |ddd}|j ||tjd<tjd<dS)NrPz .__main__r$ __mp_main__T)run_nameZ alter_sys) rr\endswithr,r]old_main_modulesappendtypes ModuleTyperunpyZ run_module__dict__rZ)Zmod_name current_mainrd main_contentrrrrgs    rgcCstjd}tjtj|d}|dkr.dSt|dd|krBdSt|t d}t j |dd}|j ||tjd<tjd<dS)NrPrZipythonrRrj)rk)rr\r6rUsplitextbasenamer,rmrnrorprqZrun_pathrrrZ)rersZ main_namerdrtrrrrh s    rhcCs t|dS)z< Set sys.modules['__main__'] to module at main_path N)rh)rerrrr%s)NN)%r6rrqror8rrrcontextrr__all__r3r^r_r,r-lowerrlrUr/ exec_prefixrr r rr r r rrGr rmrCrgrhrrrrr sD        2&__pycache__/heap.cpython-38.opt-2.pyc000064400000016426147577350250013311 0ustar00U ,aj-@sddlZddlmZddlZddlZddlZddlZddlZddlm Z m Z ddl m Z dgZ ejdkrddlZGdd d eZn,Gd d d eZd d Zd dZe eeGdddeZGdddeZdS)N) defaultdict) reductionassert_spawning)util BufferWrapperZwin32c@s,eZdZeZddZddZddZdS)ArenacCsx||_tdD]B}dtt|jf}tjd||d}tdkrHqZ| qt d||_ ||_ |j|j f|_ dS)Ndz pym-%d-%sZtagnamerzCannot find name for new mmap)sizerangeosgetpidnext_randmmap_winapiZ GetLastErrorcloseFileExistsErrornamebuffer_state)selfr irZbufr9/opt/alt/python38/lib64/python3.8/multiprocessing/heap.py__init__&s   Arena.__init__cCst||jSN)rr)rrrr __getstate__5szArena.__getstate__cCs,|\|_|_|_tjd|j|jd|_dS)Nr r )r rrrr)rstaterrr __setstate__9szArena.__setstate__N) __name__ __module__ __qualname__tempfileZ_RandomNameSequencerrr r"rrrrrsrc@s4eZdZejdkrdgZngZd ddZddZdS) rZlinuxz/dev/shmr cCsx||_||_|dkrbtjdt||d\|_}t|t |tj |jft |j|t |j|j|_ dS)Nr zpym-%d-)prefixdir)r fdr&Zmkstemprr _choose_dirunlinkrFinalizer ftruncaterr)rr r)rrrrrMs   rcCs6|jD]&}t|}|j|j|kr|SqtSr)_dir_candidatesrstatvfsf_bavailf_frsizerZ get_temp_dir)rr dstrrrr*[s    zArena._choose_dirN)r )r#r$r%sysplatformr.rr*rrrrrCs   cCs(|jdkrtdt|jt|jffS)Nr zDArena is unpicklable because forking was enabled when it was created)r) ValueError rebuild_arenar rZDupFd)arrr reduce_arenads r9cCst||Sr)rdetach)r Zdupfdrrrr7jsr7c@szeZdZdZdZdZejfddZe ddZ ddZ d d Z d d Z d dZddZddZddZddZddZdS)Heapi@cCsXt|_t|_||_g|_i|_i|_ i|_ t t |_ g|_g|_d|_d|_dSNr)rr_lastpid threadingZLock_lock_size_lengths _len_to_seq_start_to_block_stop_to_blockrset_allocated_blocks_arenas_pending_free_blocks _n_mallocs_n_frees)rr rrrr{s   z Heap.__init__cCs|d}|||@S)Nrr)nZ alignmentmaskrrr_roundupsz Heap._roundupcCsZ|t|j|tj}|j|jkr0|jd9_td|t|}|j ||d|fS)Nz"allocating a new mmap of length %dr) rNmaxrArPAGESIZE_DOUBLE_ARENA_SIZE_UNTILrinforrHappend)rr lengtharenarrr _new_arenas   zHeap._new_arenacCsz|j}||jkrdS|j|}|j|df=|j||f=|j||j|}||d|f|sv|j|=|j |dSr=) r _DISCARD_FREE_SPACE_LARGER_THANrGpoprDrErHremoverCrB)rrVrUblocksseqrrr_discard_arenas      zHeap._discard_arenac Cs|t|j|}|t|jkr&||S|j|}|j|}|}|sV|j|=|j|=|\}}}|j||f=|j||f=|Sr) bisectZ bisect_leftrBlenrWrCrYrDrE) rr rrUr\blockrVstartstoprrr_mallocs      z Heap._mallocc Cs|\}}}z|j||f}Wntk r0YnX||\}}z|j||f}Wntk rfYnX||\}}|||f}||}z|j||Wn.tk r|g|j|<t|j|YnX||j||f<||j||f<dSr) rEKeyError_absorbrDrCrTr^ZinsortrB) rr`rVrarbZ prev_block_Z next_blockrUrrr_add_free_blocks(   zHeap._add_free_blockcCs^|\}}}|j||f=|j||f=||}|j|}|||sV|j|=|j|||fSr)rDrErCrZrB)rr`rVrarbrUr\rrrres      z Heap._absorbcCs4|\}}}|j|}|||f|s0||dSr)rGrZr])rr`rVrarbr[rrr_remove_allocated_blocks   zHeap._remove_allocated_blockcCsBz|j}Wntk r&Yq>YnX||||qdSr)rIrY IndexErrorrgrhrr`rrr_free_pending_blockss   zHeap._free_pending_blockscCs~t|jkr$tdt|j|jds>|j|nr6formatr@acquirerIrTreleaserKrkrgrhrjrrrfree s   z Heap.freec Cs|dkrtd|tj|kr.td|t|jkrD||j |j d7_ | | t |d|j}||\}}}||}||kr||||f|j|||f|||fW5QRSQRXdS)NrSize {0:n} out of rangeSize {0:n} too larger)r6rlr4maxsize OverflowErrorrrr>rr@rJrkrNrP _alignmentrcrgrGadd)rr rVrarbZ real_stoprrrmalloc(s  z Heap.mallocN)r#r$r%rtrXrRrrQr staticmethodrNrWr]rcrgrerhrkrorvrrrrr;ss   r;c@s"eZdZeZddZddZdS)rcCs^|dkrtd|tj|kr.td|tj|}||f|_t j |tjj |fddS)Nrrprq)args) r6rlr4rrrsr_heaprvrrr,ro)rr r`rrrrFs   zBufferWrapper.__init__cCs&|j\\}}}}t|j|||Sr)r memoryviewr)rrVrarbr rrrcreate_memoryviewOszBufferWrapper.create_memoryviewN)r#r$r%r;ryrr{rrrrrBs )r^ collectionsrrrr4r&r?contextrrr__all__r5robjectrr9r7registerr;rrrrr s&   $! P__pycache__/heap.cpython-38.opt-1.pyc000064400000016712147577350250013306 0ustar00U ,aj-@sddlZddlmZddlZddlZddlZddlZddlZddlm Z m Z ddl m Z dgZ ejdkrddlZGdd d eZn,Gd d d eZd d Zd dZe eeGdddeZGdddeZdS)N) defaultdict) reductionassert_spawning)util BufferWrapperZwin32c@s0eZdZdZeZddZddZddZ dS) ArenazL A shared memory area backed by anonymous memory (Windows). cCsx||_tdD]B}dtt|jf}tjd||d}tdkrHqZ| qt d||_ ||_ |j|j f|_ dS)Ndz pym-%d-%sZtagnamerzCannot find name for new mmap)sizerangeosgetpidnext_randmmap_winapiZ GetLastErrorcloseFileExistsErrornamebuffer_state)selfr irZbufr9/opt/alt/python38/lib64/python3.8/multiprocessing/heap.py__init__&s   Arena.__init__cCst||jSN)rr)rrrr __getstate__5szArena.__getstate__cCs,|\|_|_|_tjd|j|jd|_dS)Nr r )r rrrr)rstaterrr __setstate__9szArena.__setstate__N) __name__ __module__ __qualname____doc__tempfileZ_RandomNameSequencerrr r"rrrrrs rc@s8eZdZdZejdkrdgZngZd ddZddZd S) rzJ A shared memory area backed by a temporary file (POSIX). Zlinuxz/dev/shmr cCsx||_||_|dkrbtjdt||d\|_}t|t |tj |jft |j|t |j|j|_ dS)Nr zpym-%d-)prefixdir)r fdr'Zmkstemprr _choose_dirunlinkrFinalizer ftruncaterr)rr r*rrrrrMs   rcCs6|jD]&}t|}|j|j|kr|SqtSr)_dir_candidatesrstatvfsf_bavailf_frsizerZ get_temp_dir)rr dstrrrr+[s    zArena._choose_dirN)r ) r#r$r%r&sysplatformr/rr+rrrrrCs   cCs(|jdkrtdt|jt|jffS)Nr zDArena is unpicklable because forking was enabled when it was created)r* ValueError rebuild_arenar rZDupFd)arrr reduce_arenads r:cCst||Sr)rdetach)r Zdupfdrrrr8jsr8c@szeZdZdZdZdZejfddZe ddZ ddZ d d Z d d Z d dZddZddZddZddZddZdS)Heapi@cCsXt|_t|_||_g|_i|_i|_ i|_ t t |_ g|_g|_d|_d|_dSNr)rr_lastpid threadingZLock_lock_size_lengths _len_to_seq_start_to_block_stop_to_blockrset_allocated_blocks_arenas_pending_free_blocks _n_mallocs_n_frees)rr rrrr{s   z Heap.__init__cCs|d}|||@S)Nrr)nZ alignmentmaskrrr_roundupsz Heap._roundupcCsZ|t|j|tj}|j|jkr0|jd9_td|t|}|j ||d|fS)Nz"allocating a new mmap of length %dr) rOmaxrBrPAGESIZE_DOUBLE_ARENA_SIZE_UNTILrinforrIappend)rr lengtharenarrr _new_arenas   zHeap._new_arenacCsz|j}||jkrdS|j|}|j|df=|j||f=|j||j|}||d|f|sv|j|=|j |dSr>) r _DISCARD_FREE_SPACE_LARGER_THANrHpoprErFrIremoverDrC)rrWrVblocksseqrrr_discard_arenas      zHeap._discard_arenac Cs|t|j|}|t|jkr&||S|j|}|j|}|}|sV|j|=|j|=|\}}}|j||f=|j||f=|Sr) bisectZ bisect_leftrClenrXrDrZrErF) rr rrVr]blockrWstartstoprrr_mallocs      z Heap._mallocc Cs|\}}}z|j||f}Wntk r0YnX||\}}z|j||f}Wntk rfYnX||\}}|||f}||}z|j||Wn.tk r|g|j|<t|j|YnX||j||f<||j||f<dSr) rFKeyError_absorbrErDrUr_ZinsortrC) rrarWrbrcZ prev_block_Z next_blockrVrrr_add_free_blocks(   zHeap._add_free_blockcCs^|\}}}|j||f=|j||f=||}|j|}|||sV|j|=|j|||fSr)rErFrDr[rC)rrarWrbrcrVr]rrrrfs      z Heap._absorbcCs4|\}}}|j|}|||f|s0||dSr)rHr[r^)rrarWrbrcr\rrr_remove_allocated_blocks   zHeap._remove_allocated_blockcCsBz|j}Wntk r&Yq>YnX||||qdSr)rJrZ IndexErrorrhrirrarrr_free_pending_blockss   zHeap._free_pending_blockscCs~t|jkr$tdt|j|jds>|j|n s&   $! P__pycache__/queues.cpython-38.opt-2.pyc000064400000022174147577350250013700 0ustar00U ,a-@sdddgZddlZddlZddlZddlZddlZddlZddlZddlm Z m Z ddl Z ddl m Z ddl mZejjZdd lmZmZmZmZmZGd ddeZeZGd ddeZGd ddeZdS) Queue SimpleQueue JoinableQueueN)EmptyFull) connection)context)debuginfoFinalizeregister_after_fork is_exitingc@seZdZd*ddZddZddZdd Zd+d d Zd,ddZddZ ddZ ddZ ddZ ddZ ddZddZddZd d!Zed"d#Zed$d%Zed&d'Zed(d)Zd S)-rrcCs|dkrddlm}||_tjdd\|_|_||_t |_ t j dkrTd|_n ||_|||_d|_|t j dkrt|tjdS)Nrr) SEM_VALUE_MAXFZduplexwin32)Z synchronizer_maxsizerPipe_reader_writerLock_rlockosgetpid_opidsysplatform_wlockZBoundedSemaphore_sem _ignore_epipe _after_forkr rselfmaxsizectxr%;/opt/alt/python38/lib64/python3.8/multiprocessing/queues.py__init__$s       zQueue.__init__cCs.t||j|j|j|j|j|j|j|j fSN) r assert_spawningrrrrrrrrr"r%r%r& __getstate__9s zQueue.__getstate__c Cs0|\|_|_|_|_|_|_|_|_|dSr() rrrrrrrrr r"stater%r%r& __setstate__>szQueue.__setstate__cCsbtdtt|_t|_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_pollr*r%r%r&r Cs   zQueue._after_forkTNc Csf|jrtd|d|j||s(t|j.|jdkrB||j ||j W5QRXdSNzQueue z is closed) r8 ValueErrorracquirerr1r5 _start_threadr4appendnotifyr"objblocktimeoutr%r%r&putPs  z Queue.putc Cs|jrtd|d|rH|dkrH|j|}W5QRX|jnr|rXt|}|j||sjt zB|r|t}| |st n | st |}|jW5|jXt |Sr@) r8rArr=rreleasetime monotonicrBrr?_ForkingPicklerloads)r"rHrIresZdeadliner%r%r&get\s*      z Queue.getcCs|j|jjSr()rr_semlockZ _get_valuer*r%r%r&qsizevsz Queue.qsizecCs | Sr(r?r*r%r%r&emptyzsz Queue.emptycCs |jjSr()rrR_is_zeror*r%r%r&full}sz Queue.fullcCs |dSNF)rQr*r%r%r& get_nowaitszQueue.get_nowaitcCs ||dSrX)rJr"rGr%r%r& put_nowaitszQueue.put_nowaitcCs2d|_z|jW5|j}|r,d|_|XdS)NT)r8r9rclose)r"r\r%r%r&r\sz Queue.closecCstd|jr|dS)NzQueue.join_thread())r r6r*r%r%r& join_threadszQueue.join_threadcCs6tdd|_z|jWntk r0YnXdS)NzQueue.cancel_join_thread()T)r r7r6ZcancelAttributeErrorr*r%r%r&cancel_join_threads zQueue.cancel_join_threadc Cstd|jtjtj|j|j|j|j |j j |j |j |jfdd|_d|j_td|jtd|jst|jtjt|jgdd|_t|tj|j|jgd d|_dS) NzQueue._start_thread()ZQueueFeederThread)targetargsnameTzdoing self._thread.start()z... done self._thread.start())Z exitpriority )r r4clearr/ZThreadr_feedr1r;rrr\r_on_queue_feeder_errorrr5Zdaemonstartr7r _finalize_joinweakrefrefr6_finalize_closer9r*r%r%r&rCs<     zQueue._start_threadcCs4td|}|dk r(|tdntddS)Nzjoining queue threadz... queue thread joinedz... queue thread already dead)r join)Ztwrthreadr%r%r&ris  zQueue._finalize_joinc Cs.td||t|W5QRXdS)Nztelling queue thread to quit)r rD _sentinelrE)buffernotemptyr%r%r&rls zQueue._finalize_closec CsXtd|j}|j} |j} |j} t} tjdkr<|j} |j}nd} z|z|sT| W5| Xzb| }|| krtd|WWdSt |}| dkr||qb| z ||W5|XqbWnt k rYnXWq@t k rP}zV|rt |ddt jkrWY6dStr.td|WYdS||||W5d}~XYq@Xq@dS)Nz$starting thread to feed data to piperz%feeder thread got sentinel -- exitingerrnorzerror in queue thread: %s)r rBrKwaitpopleftrorrrNdumps IndexError ExceptiongetattrrrZEPIPErr )rprqr:Z writelockr\Z ignore_epipeonerrorZ queue_semZnacquireZnreleaseZnwaitZbpopleftsentinelZwacquireZwreleaserGer%r%r&rfsN         z Queue._feedcCsddl}|dS)Nr) traceback print_exc)r{rGr|r%r%r&rg szQueue._on_queue_feeder_error)r)TN)TN)__name__ __module__ __qualname__r'r+r.r rJrQrSrUrWrYr[r\r]r_rC staticmethodrirlrfrgr%r%r%r&r"s.       =c@s@eZdZdddZddZddZdd d Zd d ZddZd S)rrcCs*tj|||d|d|_||_dS)N)r$r)rr'Z Semaphore_unfinished_tasksr0_condr!r%r%r&r'#s zJoinableQueue.__init__cCst||j|jfSr()rr+rrr*r%r%r&r+(szJoinableQueue.__getstate__cCs,t||dd|dd\|_|_dS)N)rr.rrr,r%r%r&r.+szJoinableQueue.__setstate__TNc Cs|jrtd|d|j||s(t|jJ|j8|jdkrJ||j ||j |j W5QRXW5QRXdSr@)r8rArrBrr1rr5rCr4rDrrKrErFr%r%r&rJ/s   zJoinableQueue.putc Cs@|j0|jdstd|jjr2|jW5QRXdS)NFz!task_done() called too many times)rrrBrArRrVZ notify_allr*r%r%r& task_done<s   zJoinableQueue.task_donec Cs,|j|jjs|jW5QRXdSr()rrrRrVrsr*r%r%r&rmCs zJoinableQueue.join)r)TN) r~rrr'r+r.rJrrmr%r%r%r&r!s   c@s<eZdZddZddZddZddZd d Zd d Zd S)rcCsHtjdd\|_|_||_|jj|_tj dkr:d|_ n ||_ dS)NFrr) rrrrrrr>r?rrr)r"r$r%r%r&r'Ns    zSimpleQueue.__init__cCs | Sr(rTr*r%r%r&rUWszSimpleQueue.emptycCst||j|j|j|jfSr()r r)rrrrr*r%r%r&r+Zs zSimpleQueue.__getstate__cCs"|\|_|_|_|_|jj|_dSr()rrrrr>r?r,r%r%r&r.^szSimpleQueue.__setstate__c Cs&|j|j}W5QRXt|Sr()rrr<rNrO)r"rPr%r%r&rQbszSimpleQueue.getc CsDt|}|jdkr"|j|n|j|j|W5QRXdSr()rNrurrr:rZr%r%r&rJhs   zSimpleQueue.putN) r~rrr'rUr+r.rQrJr%r%r%r&rLs  )__all__rrr/r2rLrjrrZqueuerrZ_multiprocessingrr Z reductionZForkingPicklerrNutilr r r r robjectrrorrr%r%r%r& s$   v +__pycache__/pool.cpython-38.opt-2.pyc000064400000055122147577350250013341 0ustar00U ,a~@sdddgZddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z ddl m Z m Z ddlmZd Zd Zd Zd ZeZd dZddZGdddeZGdddZddZGdddeZd+ddZddZGdd d eZ Gd!dde!Z"Gd"d#d#e!Z#e#Z$Gd$d%d%e#Z%Gd&d'd'e!Z&Gd(d)d)e&Z'Gd*dde"Z(dS),Pool ThreadPoolN)Empty)util) get_context TimeoutError)waitINITRUNCLOSE TERMINATEcCs tt|SN)listmapargsr9/opt/alt/python38/lib64/python3.8/multiprocessing/pool.pymapstar/srcCstt|d|dS)Nrr)r itertoolsstarmaprrrr starmapstar2src@seZdZddZddZdS)RemoteTracebackcCs ||_dSrtb)selfrrrr__init__:szRemoteTraceback.__init__cCs|jSrrrrrr__str__<szRemoteTraceback.__str__N)__name__ __module__ __qualname__rrrrrrr9src@seZdZddZddZdS)ExceptionWithTracebackcCs0tt|||}d|}||_d||_dS)Nz """ %s""") tracebackformat_exceptiontypejoinexcr)rr)rrrrr@s zExceptionWithTraceback.__init__cCst|j|jffSr) rebuild_excr)rrrrr __reduce__Esz!ExceptionWithTraceback.__reduce__N)r r!r"rr+rrrrr#?sr#cCst||_|Sr)r __cause__)r)rrrrr*Hs r*cs,eZdZfddZddZddZZS)MaybeEncodingErrorcs.t||_t||_tt||j|jdSr)reprr)valuesuperr-r)rr)r/ __class__rrrTs  zMaybeEncodingError.__init__cCsd|j|jfS)Nz(Error sending result: '%s'. Reason: '%s')r/r)rrrrrYszMaybeEncodingError.__str__cCsd|jj|fS)Nz<%s: %s>)r2r rrrr__repr__]szMaybeEncodingError.__repr__)r r!r"rrr3 __classcell__rrr1rr-Ps r-rFc Cs|dk r(t|tr|dks(td||j}|j}t|drR|j|j |dk rb||d}|dks~|r||krz |} Wn(t t fk rt dYqYnX| dkrt dq| \} } } } }zd| | |f}WnHtk r0}z(|r| tk rt||j}d|f}W5d}~XYnXz|| | |fWnRtk r}z2t||d}t d ||| | d|ffW5d}~XYnXd} } }} } }|d7}qft d |dS) NrzMaxtasks {!r} is not valid_writerrz)worker got EOFError or OSError -- exitingzworker got sentinel -- exitingTFz0Possible encoding error while sending result: %szworker exiting after %d tasks) isinstanceintAssertionErrorformatputgethasattrr5close_readerEOFErrorOSErrorrdebug Exception_helper_reraises_exceptionr# __traceback__r-)inqueueoutqueue initializerinitargsZmaxtaskswrap_exceptionr:r;Z completedtaskjobifuncrkwdsresultewrappedrrrworkerasN        $ rRcCs|dSrr)ZexrrrrCsrCcs.eZdZddfdd ZfddZZS) _PoolCacheNnotifiercs||_tj||dSr)rUr0r)rrUrrNr1rrrsz_PoolCache.__init__cs t||s|jddSr)r0 __delitem__rUr:)ritemr1rrrVs z_PoolCache.__delitem__)r r!r"rrVr4rrr1rrSsrSc@seZdZdZeddZdKddZeje fdd Z d d Z d d Z eddZ eddZddZeddZeddZddZddZdifddZdLddZdMd d!ZdNd"d#Zd$d%ZdOd'd(ZdPd)d*Zdiddfd+d,ZdQd-d.ZdRd/d0ZedSd1d2Zed3d4Z ed5d6Z!ed7d8Z"ed9d:Z#d;d<Z$d=d>Z%d?d@Z&dAdBZ'edCdDZ(edEdFZ)dGdHZ*dIdJZ+dS)TrTcOs |j||SrProcess)ctxrrNrrrrYsz Pool.ProcessNrcCsg|_t|_|pt|_|t|_|j|_ t |j d|_ ||_ ||_ ||_|dkrjtphd}|dkrztd|dk rt|std||_z |WnHtk r|jD]}|jdkr|q|jD] }|q؂YnX|}tjtj|j |j|j|j|j|j|j |j!|j |j|j |j"||j fd|_#d|j#_$t%|j#_|j#&tjtj'|j|j(|j!|j|j fd|_)d|j)_$t%|j)_|j)&tjtj*|j!|j+|j fd|_,d|j,_$t%|j,_|j,&t-j.||j/|j|j |j!|j|j |j#|j)|j,|j f dd|_0t%|_dS) NrTrz&Number of processes must be at least 1zinitializer must be a callabletargetrT)rZ exitpriority)1_poolr _stater_ctx _setup_queuesqueue SimpleQueue _taskqueue_change_notifierrS_cache_maxtasksperchild _initializer _initargsos cpu_count ValueErrorcallable TypeError _processes_repopulate_poolrBexitcode terminater(_get_sentinels threadingZThreadr_handle_workersrY_inqueue _outqueue_wrap_exception_worker_handlerdaemonr start _handle_tasks _quick_put _task_handler_handle_results _quick_get_result_handlerrZFinalize_terminate_pool _terminate)r processesrGrHmaxtasksperchildcontextp sentinelsrrrrs              z Pool.__init__cCs>|j|kr:|d|t|dt|dddk r:|jddS)Nz&unclosed running multiprocessing pool )sourcere)r_ResourceWarninggetattrrer:)rZ_warnr rrr__del__s  z Pool.__del__c Cs0|j}d|jd|jd|jdt|jd S)N<.z state=z pool_size=>)r2r!r"r_lenr^)rclsrrrr3sz Pool.__repr__cCs|jjg}|jjg}||Sr)rwr>re)rZtask_queue_sentinelsZself_notifier_sentinelsrrrrss  zPool._get_sentinelscCsdd|DS)NcSsg|]}t|dr|jqS)sentinel)r<r).0rRrrr s z.Pool._get_worker_sentinels..rZworkersrrr_get_worker_sentinelsszPool._get_worker_sentinelscCsPd}ttt|D]6}||}|jdk rtd||d}||=q|S)NFcleaning up worker %dT)reversedrangerrqrrAr()poolZcleanedrLrRrrr_join_exited_workerss zPool._join_exited_workersc Cs0||j|j|j|j|j|j|j|j|j |j Sr) _repopulate_pool_staticr`rYror^rvrwrhrirgrxrrrrrp.s zPool._repopulate_poolc Csft|t|D]P} ||t|||||| fd} | jdd| _d| _| || t dqdS)Nr[rYZ PoolWorkerTz added worker) rrrRnamereplacerzr{appendrrA) rZrYrrrErFrGrHrrIrLwrrrr7s zPool._repopulate_pool_staticc Cs*t|r&t|||||||||| dSr)rrr) rZrYrrrErFrGrHrrIrrr_maintain_poolJs  zPool._maintain_poolcCs4|j|_|j|_|jjj|_|jjj|_ dSr) r`rcrvrwr5sendr}r>recvrrrrrraVs   zPool._setup_queuescCs|jtkrtddS)NzPool not running)r_r rlrrrr_check_running\s zPool._check_runningcCs||||Sr) apply_asyncr;)rrMrrNrrrapply`sz Pool.applycCs|||t|Sr) _map_asyncrr;rrMiterable chunksizerrrrgszPool.mapcCs|||t|Sr)rrr;rrrrrnsz Pool.starmapcCs|||t|||Sr)rrrrMrrcallbackerror_callbackrrr starmap_asyncvs zPool.starmap_asyncc csjz,d}t|D]\}}||||fifVqWn8tk rd}z||dt|fifVW5d}~XYnXdS)Nr) enumeraterBrC)rZ result_jobrMrrLxrPrrr_guarded_task_generation~s zPool._guarded_task_generationrcCs||dkr:t|}|j||j|||jf|S|dkrPtd|t |||}t|}|j||jt ||jfdd|DSdS)NrzChunksize must be 1+, not {0:n}css|]}|D] }|Vq qdSrrrchunkrWrrr szPool.imap..) r IMapIteratorrdr:r_job _set_lengthrlr9r _get_tasksrrrMrrrO task_batchesrrrimaps4z Pool.imapcCs||dkr:t|}|j||j|||jf|S|dkrPtd|t |||}t|}|j||jt ||jfdd|DSdS)NrzChunksize must be 1+, not {0!r}css|]}|D] }|Vq qdSrrrrrrrsz&Pool.imap_unordered..) rIMapUnorderedIteratorrdr:rrrrlr9rrrrrrrimap_unordereds0zPool.imap_unorderedcCs6|t|||}|j|jd|||fgdf|SNr)r ApplyResultrdr:r)rrMrrNrrrOrrrrs zPool.apply_asynccCs|||t|||Sr)rrrrrr map_asyncszPool.map_asyncc Cs|t|dst|}|dkrJtt|t|jd\}}|rJ|d7}t|dkrZd}t|||}t||t|||d} |j | | j ||df| S)N__len__rrr) rr<rdivmodrr^rr MapResultrdr:rr) rrMrZmapperrrrZextrarrOrrrrs,  zPool._map_asynccCs"t||d|s|q dS)N)timeout)r emptyr;)rchange_notifierrrrr_wait_for_updatess zPool._wait_for_updatesc Cspt}|jtks |rX|jtkrX|||||||| | | | ||| }|||q|dt ddS)Nzworker handler exiting) rtcurrent_threadr_r r rrrr:rrA)rcache taskqueuerZrYrrrErFrGrHrrIrrthreadZcurrent_sentinelsrrrrus zPool._handle_workersc Cspt}t|jdD]\}}d}z|D]}|jtkrBtdqz ||Wq&tk r} zB|dd\} } z||  | d| fWnt k rYnXW5d} ~ XYq&Xq&|rtd|r|dnd} || dWqW q W5d}}} Xqtdz6td| dtd |D]} |dq.Wn t k r`td YnXtd dS) Nz'task handler found thread._state != RUNFzdoing set_length()rrztask handler got sentinelz/task handler sending sentinel to result handlerz(task handler sending sentinel to workersz/task handler got OSError when sending sentinelsztask handler exiting) rtriterr;r_r rrArB_setKeyErrorr:r@) rr:rFrrrZtaskseqZ set_lengthrJrKrPidxrrrrr| sB         zPool._handle_tasksc Cst}z |}Wn$ttfk r6tdYdSX|jtkrNtdq|dkrbtdq|\}}}z||||Wnt k rYnXd}}}q|r@|jt kr@z |}Wn$ttfk rtdYdSX|dkrtdq|\}}}z||||Wnt k r0YnXd}}}qt |drtdz,t dD]}|j svq|q`Wnttfk rYnXtdt||jdS) Nz.result handler got EOFError/OSError -- exitingz,result handler found thread._state=TERMINATEzresult handler got sentinelz&result handler ignoring extra sentinelr>z"ensuring that outqueue is not full z7result handler exiting: len(cache)=%s, thread._state=%s)rtrr@r?rrAr_r rrr r<rr>pollr)rFr;rrrJrKrLobjrrrr:s\               zPool._handle_resultsccs0t|}tt||}|s dS||fVqdSr)rtuplerislice)rMitsizerrrrrvs zPool._get_taskscCs tddS)Nz:pool objects cannot be passed between processes or pickled)NotImplementedErrorrrrrr+szPool.__reduce__cCs2td|jtkr.t|_t|j_|jddS)Nz closing pool)rrAr_r r ryrer:rrrrr=s   z Pool.closecCstdt|_|dS)Nzterminating pool)rrAr r_rrrrrrrs zPool.terminatecCsjtd|jtkrtdn|jttfkr4td|j|j |j |j D] }|qXdS)Nz joining poolzPool is still runningzIn unknown state) rrAr_r rlr r ryr(r~rr^)rrrrrr(s       z Pool.joincCs@td|j|r<|jr<|jt dqdS)Nz7removing tasks from inqueue until task handler finishedr) rrAZ_rlockacquireis_aliver>rrtimesleep)rE task_handlerrrrr_help_stuff_finishs    zPool._help_stuff_finishc CsXtdt|_|dt|_td|||t||sXt| dkrXtdt|_|d|dtdt |k r| |rt |ddrtd|D]} | j dkr| qtdt |k r| td t |k r| |rTt |ddrTtd |D](} | r*td | j| q*dS) Nzfinalizing poolz&helping task handler/workers to finishrz.Cannot have cache with result_hander not alivezjoining worker handlerrrzterminating workerszjoining task handlerzjoining result handlerzjoining pool workersr)rrAr r_r:rrrr8rtrr(r<rqrrpid) rrrErFrrZworker_handlerrZresult_handlerrrrrrrsB               zPool._terminate_poolcCs ||Sr)rrrrr __enter__szPool.__enter__cCs |dSr)rr)rexc_typeZexc_valZexc_tbrrr__exit__sz Pool.__exit__)NNrNN)N)N)NNN)r)r)NNN)NNN)N),r r!r"rx staticmethodrYrwarningswarnr rr3rsrrrprrrarrrrrrrrrrrr classmethodrur|rrr+r=rrr(rrrrrrrrrsv  P                - ;    5c@s@eZdZddZddZddZddd Zdd d Zd d ZdS)rcCs>||_t|_tt|_|j|_||_||_ ||j|j<dSr) r^rtZEvent_eventnext job_counterrrf _callback_error_callback)rrrrrrrrs  zApplyResult.__init__cCs |jSr)rZis_setrrrrreadyszApplyResult.readycCs|std||jS)Nz{0!r} not ready)rrlr9_successrrrr successfulszApplyResult.successfulNcCs|j|dSr)rr rrrrrr szApplyResult.waitcCs,|||st|jr"|jS|jdSr)r rrr_valuerrrrr;s  zApplyResult.getcCsZ|\|_|_|jr$|jr$||j|jr<|js<||j|j|j|j=d|_dSr) rrrrrsetrfrr^rrLrrrrrs       zApplyResult._set)N)N) r r!r"rrrr r;rrrrrrs    rc@seZdZddZddZdS)rcCshtj||||dd|_dg||_||_|dkrNd|_|j|j|j =n||t |||_dS)NrTr) rrrr _chunksize _number_leftrrrfrbool)rrrlengthrrrrrrs    zMapResult.__init__cCs|jd8_|\}}|rv|jrv||j||j|d|j<|jdkr|jrZ||j|j|j=|jd|_ nL|s|jrd|_||_|jdkr|j r| |j|j|j=|jd|_ dS)NrrF) rrrrrrfrrrr^r)rrLZsuccess_resultsuccessrOrrrr$s&          zMapResult._setN)r r!r"rrrrrrrs rc@s:eZdZddZddZd ddZeZdd Zd d ZdS) rcCsT||_tt|_tt|_|j|_t |_ d|_ d|_ i|_||j|j<dSr)r^rtZ ConditionZLock_condrrrrf collectionsdeque_items_index_length _unsorted)rrrrrrBs  zIMapIterator.__init__cCs|Srrrrrr__iter__MszIMapIterator.__iter__Nc Cs|jz|j}Wnztk r|j|jkr>d|_td|j|z|j}Wn2tk r|j|jkrd|_tdt dYnXYnXW5QRX|\}}|r|S|dSr) rrpopleft IndexErrorrrr^ StopIterationr r)rrrWrr/rrrrPs&   zIMapIterator.nextc Cs|j|j|krn|j||jd7_|j|jkrb|j|j}|j||jd7_q,|jn ||j|<|j|jkr|j|j =d|_ W5QRXdSNr) rrrrrpopnotifyrrfrr^rrrrrhs        zIMapIterator._setc CsB|j2||_|j|jkr4|j|j|j=d|_W5QRXdSr)rrrrrfrr^)rrrrrrys    zIMapIterator._set_length)N) r r!r"rrr__next__rrrrrrr@s   rc@seZdZddZdS)rc CsV|jF|j||jd7_|j|j|jkrH|j|j=d|_W5QRXdSr) rrrrrrrfrr^rrrrrs    zIMapUnorderedIterator._setN)r r!r"rrrrrrsrc@sVeZdZdZeddZdddZdd Zd d Zed d Z eddZ ddZ dS)rFcOsddlm}|||S)NrrX)ZdummyrY)rZrrNrYrrrrYs zThreadPool.ProcessNrcCst||||dSr)rr)rrrGrHrrrrszThreadPool.__init__cCs,t|_t|_|jj|_|jj|_dSr)rbrcrvrwr:r}r;rrrrrras   zThreadPool._setup_queuescCs |jjgSr)rer>rrrrrsszThreadPool._get_sentinelscCsgSrrrrrrrsz ThreadPool._get_worker_sentinelscCsFz|jddqWntjk r(YnXt|D]}|dq2dS)NF)block)r;rbrrr:)rErrrLrrrrs  zThreadPool._help_stuff_finishcCst|dSr)rr)rrrrrrrrszThreadPool._wait_for_updates)NNr) r r!r"rxrrYrrarsrrrrrrrrs    )NrNF))__all__rrrjrbrtrr%rrr$rrrZ connectionr r r r r countrrrrBrr#r*r-rRrCdictrSobjectrrZ AsyncResultrrrrrrrr sN     -=)+E__pycache__/process.cpython-38.pyc000064400000025410147577350250013103 0ustar00U ,a.@s8ddddgZddlZddlZddlZddlZddlZddlmZzej e Z Wne k rldZ YnXddZ ddZd dZd d ZGd ddeZGd ddeZGdddeZGdddeZdaeaedaea[iZeej D]0\Z!Z"e!dddkrde!krde!ee" <qeZ#dS) BaseProcesscurrent_processactive_childrenparent_processN)WeakSetcCstS)z@ Return process object representing the current process )_current_processrr^sz'BaseProcess.__init__..)AssertionErrornext_process_counterr _identity_configcopyosgetpid _parent_pidname _parent_namer_closed_targettuple_argsdict_kwargstype__name__join_namer _danglingadd)rgrouptargetr'argskwargsrcountrrr __init__Ps"    zBaseProcess.__init__cCs|jrtddS)Nzprocess object is closed)r) ValueErrorrrrr _check_closedcszBaseProcess._check_closedcCs|jr|j|j|jdS)zQ Method to be run in sub-process; can be overridden in sub-class N)r*r,r.rrrr rungszBaseProcess.runcCsz||jdkstd|jtks0tdtjdrDtdt | ||_|jj |_ |` |`|`t|dS)z% Start child process Nzcannot start a process twicez:can only start a process object created by current processrz3daemonic processes are not allowed to have children)r<rrr&r$r%rr"getr rsentinel _sentinelr*r,r.r r4rrrr startns   zBaseProcess.startcCs||jdS)zT Terminate process; sends SIGTERM signal or uses TerminateProcess() N)r<r terminaterrrr rBszBaseProcess.terminatecCs||jdS)zT Terminate process; sends SIGKILL signal or uses TerminateProcess() N)r<rkillrrrr rCszBaseProcess.killcCsR||jtkstd|jdk s0td|j|}|dk rNt|dS)z5 Wait until child process terminates zcan only join a child processNzcan only join a started process) r<r&r$r%rrwaitr r)rtimeoutresrrr r1s  zBaseProcess.joincCs`||tkrdS|jtks*td|jdkr8dS|j}|dkrNdSt |dSdS)z1 Return whether process is alive Tzcan only test a child processNF) r<rr&r$r%rrrr r)r returncoderrr is_alives   zBaseProcess.is_alivecCsH|jdk r>|jdkr td|jd|_|`t|d|_dS)z Close the Process object. This method releases resources held by the Process object. It is an error to call this method if the child process is still running. Nz^Cannot close a process while it is still running. You should first call join() or terminate().T)rrr;closer@r rr)rrrr rIs   zBaseProcess.closecCs|jSr)r2rrrr r'szBaseProcess.namecCst|tstd||_dS)Nzname must be a string) isinstancerrr2)rr'rrr r'scCs|jddS)z4 Return whether process is a daemon rF)r"r>rrrr rszBaseProcess.daemoncCs |jdkstd||jd<dS)z1 Set whether process is a daemon Nzprocess has already startedr)rrr")rZdaemonicrrr rscCs |jdS)Nauthkey)r"rrrr rKszBaseProcess.authkeycCst||jd<dS)z2 Set authorization key of process rKN)AuthenticationStringr")rrKrrr rKscCs"||jdkr|jS|jS)zM Return exit code of process or `None` if it has yet to stop N)r<rrrrrr exitcodes zBaseProcess.exitcodecCs*||tkrtS|jo$|jjSdS)zU Return identifier (PID) of process or `None` if it has yet to start N)r<rr$r%rpidrrrr identszBaseProcess.identcCs4|z|jWStk r.tddYnXdS)z{ Return a file descriptor (Unix) or handle (Windows) suitable for waiting for process termination. zprocess not startedN)r<r@AttributeErrorr;rrrr r?s zBaseProcess.sentinelcCsd}|tkrd}nL|jrd}n@|jtkr2d}n,|jdkrBd}n|j}|dk rZd}nd}t|jd|j g}|jdk r| d|jj | d|j| ||dk rt ||}| d ||jr| d d d |S) NZstartedclosedunknowninitialZstoppedzname=%rzpid=%sz parent=%sz exitcode=%srz<%s> )rr)r&r$r%rrr/r0r2appendrN_exitcode_to_namer>rr1)rrMZstatusinforrr __repr__s0      zBaseProcess.__repr__c Csvddlm}m}z>z|jdk r,||jt da t a |t}|at|j|j|atjrntz|j|W5~X|dz|d}W5|XWntk r}zJ|jsd}n:t|jdtr|jd}nt j!"t#|jddd}W5d}~XYn2d}ddl$}t j!"d|j%|&YnXW5t|d||X|S)N)utilcontextz process exiting with exitcode %dz child process calling self.run()r z Process %s: )'rZr[ threadingZ _shutdownrWZ_flush_std_streamsZ _start_methodZ_force_start_method itertoolsr9r setr Z _close_stdinr_ParentProcessr(r&r Z_HAVE_THREAD_NATIVE_IDZ main_threadZ_set_native_idZ_finalizer_registryclearZ_run_after_forkersZ_exit_functionr= SystemExitr7rJintsysstderrwriter tracebackr' print_exc)rZparent_sentinelrZr[rMZ old_processerhrrr _bootstrap"sR         zBaseProcess._bootstrap)N)N)r0 __module__ __qualname____doc__rr:r<r=rArBrCr1rHrIpropertyr'setterrrKrMrOrNr?rXrkrrrr rGsD            c@seZdZddZdS)rLcCs,ddlm}|dkrtdtt|ffS)NrY)get_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)r[rq TypeErrorrLbytes)rrqrrr __reduce__Xs   zAuthenticationString.__reduce__N)r0rlrmrtrrrr rLWsrLc@s6eZdZddZddZeddZd dd ZeZdS) racCs4d|_||_||_d|_d|_d|_||_i|_dS)NrF)r!r2_pidr&rr)r@r")rr'rNr?rrr r:hsz_ParentProcess.__init__cCsddlm}||jgdd S)NrrDrEZmultiprocessing.connectionrDr@)rrDrrr rHrs z_ParentProcess.is_alivecCs|jSr)rurrrr rOvsz_ParentProcess.identNcCs ddlm}||jg|ddS)z6 Wait until parent process terminates rrvrwNrx)rrErDrrr r1zs z_ParentProcess.join)N) r0rlrmr:rHrorOr1rNrrrr rafs    rac@seZdZddZddZdS) _MainProcesscCs8d|_d|_d|_d|_d|_ttddd|_dS)NrZ MainProcessF z/mp)rKZ semprefix) r!r2r&rr)rLr$urandomr"rrrr r:s z_MainProcess.__init__cCsdSrrrrrr rIsz_MainProcess.closeN)r0rlrmr:rIrrrr rysryrYZSIG_r)$__all__r$resignalr_r^Z _weakrefsetrpathabspathgetcwdZ ORIGINAL_DIROSErrorrrrr objectrrsrLraryr rr9r r`r rVr __dict__itemsr'Zsignumr3rrrr  s@    ! __pycache__/synchronize.cpython-38.opt-2.pyc000064400000025350147577350250014743 0ustar00U ,aZ-@s,ddddddgZddlZddlZddlZddlZddlZdd lmZdd lmZdd lm Z zdd lm Z m Z Wne k re d YnXe ed\ZZej jZGdddeZ Gddde ZGdddeZGddde ZGddde ZGdddeZGdddeZGdddejZdS)LockRLock SemaphoreBoundedSemaphore ConditionEventN)context)process)util)SemLock sem_unlinkzThis platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770.c@s\eZdZeZddZeddZddZ ddZ d d Z d d Z d dZ eddZdS)r c Cs|dkrtj}|}tjdkp*|dk}tdD]>}z t|||| |}|_ Wnt k rlYq4Xq|q4t dt d|j|tjdkrdd} t || |j jdk rdd lm} | |j jd t j|tj|j jfd d dS) Nwin32forkdzcannot find name for semaphorezcreated semlock with handle %scSs|jdSN)_semlock _after_fork)objr@/opt/alt/python38/lib64/python3.8/multiprocessing/synchronize.pyrGsz%SemLock.__init__.._after_forkr)register semaphorer)Z exitpriority)r Z_default_contextZ get_contextZget_start_methodsysplatformrange_multiprocessingr _make_namerFileExistsErrorr debughandle _make_methodsZregister_after_forknameresource_trackerrZFinalize_cleanup) selfkindvaluemaxvaluectxr#Z unlink_nowislrrrrr__init__2s8      zSemLock.__init__cCs"ddlm}t|||ddS)Nr) unregisterr)r$r.r )r#r.rrrr%Ts zSemLock._cleanupcCs|jj|_|jj|_dSr)racquirereleaser&rrrr"Zs zSemLock._make_methodscCs |jSr)r __enter__r1rrrr2^szSemLock.__enter__cGs |jj|Sr)r__exit__r&argsrrrr3aszSemLock.__exit__cCsDt||j}tjdkr,t|j}n|j}||j|j |j fS)Nr) r assert_spawningrrrZget_spawning_popenZduplicate_for_childr!r'r)r#)r&r,hrrr __getstate__ds   zSemLock.__getstate__cCs,tjj||_td|d|dS)Nz recreated blocker with handle %rr)rr Z_rebuildrr r r"r&staterrr __setstate__mszSemLock.__setstate__cCsdtjdttjfS)Nz%s-%sZ semprefix)r current_processZ_confignextr _randrrrrrrszSemLock._make_nameN)__name__ __module__ __qualname__tempfileZ_RandomNameSequencer>r- staticmethodr%r"r2r3r8r;rrrrrr .s"  r c@s&eZdZd ddZddZddZdS) rrcCstj|t|t|ddSNr*)r r- SEMAPHORE SEM_VALUE_MAXr&r(r*rrrr-}szSemaphore.__init__cCs |jSr)r _get_valuer1rrr get_valueszSemaphore.get_valuecCs8z|j}Wntk r&d}YnXd|jj|fS)Nunknownz<%s(value=%s)>)rrI Exception __class__r?r&r(rrr__repr__s  zSemaphore.__repr__N)r)r?r@rAr-rJrOrrrrr{s c@seZdZdddZddZdS)rrcCstj|t|||ddSrDr r-rFrHrrrr-szBoundedSemaphore.__init__cCs>z|j}Wntk r&d}YnXd|jj||jjfS)NrKz<%s(value=%s, maxvalue=%s)>)rrIrLrMr?r)rNrrrrOs zBoundedSemaphore.__repr__N)rr?r@rAr-rOrrrrrs c@seZdZddZddZdS)rcCstj|tdd|ddSNrrErPr&r*rrrr-sz Lock.__init__cCszf|jr8tj}tjdkrd|dtj7}n,|jdkrLd}n|jdkr`d}nd}Wnt k r~d}YnXd |j j |fS) N MainThread|rNonerSomeOtherThreadSomeOtherProcessrKz<%s(owner=%s)>) r_is_miner r<r# threadingcurrent_threadrI_countrLrMr?)r&r#rrrrOs   z Lock.__repr__NrQrrrrrsc@seZdZddZddZdS)rcCstj|tdd|ddSrR)r r-RECURSIVE_MUTEXrSrrrr-szRLock.__init__cCsz||jrBtj}tjdkr6|dtj7}|j}n8|jdkrZd\}}n |jdkrrd\}}nd\}}Wnt k rd\}}YnXd |j j ||fS) NrTrUr)rVrr)rWnonzero)rXr^)rKrK <%s(%s, %s)>) rrYr r<r#rZr[r\rIrLrMr?)r&r#countrrrrOs      zRLock.__repr__NrQrrrrrsc@sleZdZdddZddZddZdd Zd d Zd d ZddZ dddZ dddZ ddZ dddZ dS)rNcCs>|p ||_|d|_|d|_|d|_|dSNr)r_lockr_sleeping_count _woken_count_wait_semaphorer")r&lockr*rrrr-s    zCondition.__init__cCst||j|j|j|jfSr)r r6rbrcrdrer1rrrr8s  zCondition.__getstate__cCs |\|_|_|_|_|dSr)rbrcrdrer"r9rrrr;s  zCondition.__setstate__cCs |jSr)rbr2r1rrrr2szCondition.__enter__cGs |jj|Sr)rbr3r4rrrr3szCondition.__exit__cCs|jj|_|jj|_dSr)rbr/r0r1rrrr"s zCondition._make_methodscCsJz|jj|jj}Wntk r4d}YnXd|jj|j|fS)NrKr_)rcrrIrdrLrMr?rb)r&Z num_waitersrrrrOs   zCondition.__repr__c Csj|j|jj}t|D]}|jqz|jd|WS|jt|D]}|jqTXdS)NT) rcr0rbrr\rrdr/re)r&timeoutr`r+rrrwaits      zCondition.waitrcCst|jdr|jd}qd}||krF|jdrF|j|d7}q|rpt|D]}|jqR|jdrpqbdS)NFrr)rdr/rcrer0r)r&nresZsleepersr+rrrnotifys       zCondition.notifycCs|jtjddS)N)ri)rkrmaxsizer1rrr notify_all(szCondition.notify_allcCsd|}|r|S|dk r$t|}nd}d}|s`|dk rN|t}|dkrNq`|||}q,|Sra)time monotonicrh)r&Z predicatergresultZendtimeZwaittimerrrwait_for+s  zCondition.wait_for)N)N)r)N)r?r@rAr-r8r;r2r3r"rOrhrkrmrqrrrrrs   c@s6eZdZddZddZddZddZd d d Zd S) rcCs |||_|d|_dSra)rr_condr_flagrSrrrr-CszEvent.__init__c CsD|j4|jdr,|jW5QRdSW5QRdSQRXdSNFT)rrrsr/r0r1rrris_setGs   z Event.is_setc Cs6|j&|jd|j|jW5QRXdSNF)rrrsr/r0rmr1rrrsetNs  z Event.setc Cs"|j|jdW5QRXdSrv)rrrsr/r1rrrclearTsz Event.clearNc Csh|jX|jdr |jn |j||jdrP|jW5QRdSW5QRdSQRXdSrt)rrrsr/r0rh)r&rgrrrrhXs     z Event.wait)N)r?r@rAr-rurwrxrhrrrrrAs c@sZeZdZdddZddZddZedd Zejd d Zed d Z e jd d Z dS)BarrierNc CsRddl}ddlm}||dd}|}||||||fd|_d|_dS)Nrr) BufferWrapperr+r)structheaprzZcalcsizerr;_stater\) r&Zpartiesactionrgr*r{rzwrapperZcondrrrr-js zBarrier.__init__cCs.|\|_|_|_|_|_|jd|_dS)Nr+)_parties_action_timeoutrr_wrapperZcreate_memoryviewcast_arrayr9rrrr;ss zBarrier.__setstate__cCs|j|j|j|j|jfSr)rrrrrrr1rrrr8xs zBarrier.__getstate__cCs |jdSrarr1rrrr}|szBarrier._statecCs||jd<dSrarrNrrrr}scCs |jdSNrrr1rrrr\szBarrier._countcCs||jd<dSrrrNrrrr\s)NN) r?r@rAr-r;r8propertyr}setterr\rrrrryhs    ry)__all__rZrrBrrnr r r r r ImportErrorlistrr]rFrGobjectrrrrrrryrrrr s8    Mo'__pycache__/util.cpython-38.opt-2.pyc000064400000024605147577350250013347 0ustar00U ,a~6@sddlZddlZddlZddlZddlZddlZddlmZddlm Z ddddd d d d d ddddddgZ dZ dZ dZ dZdZdZdZdadaddZddZddZddZdd Zd@d d Zd!d"Zd#d$ZeZd%d&Zd'd ZeZ e!Z"d(d)Z#d*d Z$iZ%e!Z&Gd+dde'Z(dAd,d-Z)d.d Z*da+eee)e j,e j-fd/d0Z.e/e.Gd1dde'Z0Gd2ddej1Z2ze3d3Z4Wne5k rd4Z4YnXd5dZ6d6d7Z7d8d9Z8d:d;Z9dd?Z;dS)BN)_args_from_interpreter_flags)process sub_debugdebuginfo sub_warning get_logger log_to_stderr get_temp_dirregister_after_fork is_exitingFinalizeForkAwareThreadLockForkAwareLocalclose_all_fds_exceptSUBDEBUG SUBWARNING multiprocessingz+[%(levelname)s/%(processName)s] %(message)sFcGstrtjt|f|dSN)_loggerlogrmsgargsr9/opt/alt/python38/lib64/python3.8/multiprocessing/util.pyr,scGstrtjt|f|dSr)rrDEBUGrrrr r0scGstrtjt|f|dSr)rrINFOrrrr r4scGstrtjt|f|dSr)rrrrrrr r8scCs|ddl}|z\tsj|tadt_ttdrFt t t t n$tj t diftj t difW5|XtS)Nr unregisterr)loggingZ _acquireLockZ _releaseLockrZ getLogger LOGGER_NAMEZ propagatehasattratexitr#_exit_functionregisterZ _exithandlersremoveappend)r$rrr r <s     cCsJddl}t}|t}|}|||||rB||dat S)NrT) r$r Z FormatterDEFAULT_LOGGING_FORMATZ StreamHandlerZ setFormatterZ addHandlerZsetLevel_log_to_stderrr)levelr$ZloggerZ formatterZhandlerrrr r Ws    cCs tjdkrdSttdrdSdS)NZlinuxTZgetandroidapilevelF)sysplatformr&rrrr #_platform_supports_abstract_socketsls   r1cCs@|sdSt|tr|ddkSt|tr4|ddkStddS)NFrz(address type of {address!r} unrecognized) isinstancebytesstr TypeError)Zaddressrrr is_abstract_socket_namespacets    r7cCs&||t}|dk r"d|jd<dS)Ntempdir)rcurrent_process_config)rmtreer8r9rrr _remove_temp_dirsr<cCsftjd}|dkrbddl}ddl}|jdd}td|tdt |j |fdd|tjd<|S)Nr8rzpymp-)prefixzcreated temp directory %si)r exitpriority) rr9r:getshutiltempfileZmkdtemprrr<r;)r8r@rArrr r s  c Csftt}||D]H\\}}}}z ||Wqtk r^}ztd|W5d}~XYqXqdS)Nz after forker raised exception %s)list_afterfork_registryitemssort Exceptionr)rDindexZidentfuncobjerrr _run_after_forkerss  rKcCs|tttt||f<dSr)rCnext_afterfork_counterid)rIrHrrr r sc@sBeZdZd ddZdeeejfddZddZ d d Z d d Z dS)rrNcCs|dk r&t|ts&td|t||dk r>t|||_n|dkrNtd||_ ||_ |p`i|_ |t t f|_t|_|t|j<dS)Nz3Exitpriority ({0!r}) must be None or int, not {1!s}z+Without object, exitpriority cannot be None)r3intr6formattypeweakrefref_weakref ValueError _callback_args_kwargsrL_finalizer_counter_keyosgetpid_pid_finalizer_registry)selfrIcallbackrkwargsr>rrr __init__s"  zFinalize.__init__cCsz ||j=Wntk r(|dYnbX|j|krD|dd}n$|d|j|j|j|j|j|j}d|_|_|_|_|_|SdS)Nzfinalizer no longer registeredz+finalizer ignored because different processz/finalizer calling %s with args %s and kwargs %s)rZKeyErrorr]rVrWrXrT)r_Zwrr^rr\resrrr __call__s$  zFinalize.__call__cCsDz t|j=Wntk r Yn Xd|_|_|_|_|_dSr)r^rZrcrTrVrWrXr_rrr cancels zFinalize.cancelcCs |jtkSr)rZr^rfrrr still_activeszFinalize.still_activec Csz |}Wnttfk r(d}YnX|dkr>d|jjSd|jjt|jd|jf}|jrr|dt|j7}|j r|dt|j 7}|j ddk r|dt|j d7}|dS) Nz<%s object, dead>z<%s object, callback=%s__name__z, args=z , kwargs=rz, exitpriority=>) rTAttributeErrorr6 __class__rigetattrrVrWr5rXrZ)r_rIxrrr __repr__s"   zFinalize.__repr__)rNN) ri __module__ __qualname__rbr^rr[r\rergrhrorrrr rs   c stdkr dSdkrddn fddfddttD}|jdd|D]P}t|}|dk rPtd|z |WqPtk rd dl}|YqPXqPdkrtdS) NcSs |ddk SNrrprrr z!_run_finalizers..cs|ddk o|dkSrrrrs) minpriorityrr rurvcsg|]}|r|qSrr).0key)frr #sz#_run_finalizers..T)reversez calling %sr) r^rBrEr?rrF traceback print_excclear)rwkeysry finalizerr}r)rzrwr _run_finalizers s$      rcCs tp tdkSr)_exitingrrrr r 8scCstsda|d|d|d|dk rr|D] }|jr0|d|j|jq0|D]}|d|j|qX|d|dS)NTzprocess shutting downz2running all "atexit" finalizers with priority >= 0rz!calling terminate() for daemon %szcalling join() for process %sz)running the remaining "atexit" finalizers)rZdaemonnameZ_popenZ terminatejoin)rrractive_childrenr9rtrrr r(@s        r(c@s,eZdZddZddZddZddZd S) rcCs|t|tjdSr)_resetr rrfrrr rbqszForkAwareThreadLock.__init__cCs"t|_|jj|_|jj|_dSr) threadingZLock_lockacquirereleaserfrrr rus  zForkAwareThreadLock._resetcCs |jSr)r __enter__rfrrr rzszForkAwareThreadLock.__enter__cGs |jj|Sr)r__exit__)r_rrrr r}szForkAwareThreadLock.__exit__N)rirprqrbrrrrrrr rpsc@seZdZddZddZdS)rcCst|dddS)NcSs |jSr)__dict__r)rIrrr rurvz)ForkAwareLocal.__init__..)r rfrrr rbszForkAwareLocal.__init__cCs t|dfS)Nr)rQrfrrr __reduce__szForkAwareLocal.__reduce__N)rirprqrbrrrrr rs SC_OPEN_MAXcCsNt|dtg}|tt|dD] }t||d||dq(dS)Nr)rBMAXFDrErangelenr[ closerange)fdsirrr rsc CstjdkrdSztjWnttfk r4YnXz@ttjtj}zt|ddt_Wnt|YnXWnttfk rYnXdS)NF)closefd) r/stdincloseOSErrorrUr[opendevnullO_RDONLY)fdrrr _close_stdins   rc CsTztjWnttfk r&YnXztjWnttfk rNYnXdSr)r/stdoutflushrkrUstderrrrrr _flush_std_streamssrcCsxddl}tttt|}t\}}z6||t |gd|dddddddd||dddWSt|t|XdS)NrTrF) _posixsubprocesstuplesortedmaprOr[piperZ fork_execfsencode)pathrZpassfdsrZ errpipe_readZ errpipe_writerrr spawnv_passfdss2   rcGs|D]}t|qdSr)r[r)rrrrr close_fdssrcCsZddlm}tddlm}|jddlm}|j t | | dS)Nr)support) forkserver)resource_tracker) ZtestrrZ_cleanuprrZ _forkserverZ_stoprZ_resource_trackerrZ gc_collectZ reap_children)rrrrrr _cleanup_testss     r)N)N) s       V , *    __pycache__/process.cpython-38.opt-2.pyc000064400000021326147577350250014045 0ustar00U ,a.@s8ddddgZddlZddlZddlZddlZddlZddlmZzej e Z Wne k rldZ YnXddZ ddZd dZd d ZGd ddeZGd ddeZGdddeZGdddeZdaeaedaea[iZeej D]0\Z!Z"e!dddkrde!krde!ee" <qeZ#dS) BaseProcesscurrent_processactive_childrenparent_processN)WeakSetcCstSN)_current_processr r ^sz'BaseProcess.__init__..)next_process_counterr _identity_configcopyosgetpid _parent_pidname _parent_namer_closed_targettuple_argsdict_kwargstype__name__join_namer _danglingadd)rgrouptargetr&argskwargsrcountr r r __init__Ps     zBaseProcess.__init__cCs|jrtddS)Nzprocess object is closed)r( ValueErrorrr r r _check_closedcszBaseProcess._check_closedcCs|jr|j|j|jdSr)r)r+r-rr r r rungszBaseProcess.runcCs>|t|||_|jj|_|`|`|`t |dSr) r;r rrsentinel _sentinelr)r+r-r r3rr r r startns    zBaseProcess.startcCs||jdSr)r;r terminaterr r r r@szBaseProcess.terminatecCs||jdSr)r;rkillrr r r rAszBaseProcess.killcCs*||j|}|dk r&t|dSr)r;rwaitr r)rtimeoutresr r r r0s zBaseProcess.joincCsJ||tkrdS|jdkr"dS|j}|dkr8dSt|dSdS)NTF)r;rrrr r)r returncoder r r is_alives   zBaseProcess.is_alivecCsH|jdk r>|jdkr td|jd|_|`t|d|_dS)Nz^Cannot close a process while it is still running. You should first call join() or terminate().T)rrr:closer>r rr(rr r r rGs   zBaseProcess.closecCs|jSrr1rr r r r&szBaseProcess.namecCs ||_dSrrH)rr&r r r r&scCs|jddS)NrF)r!getrr r r rszBaseProcess.daemoncCs||jd<dS)Nrr!)rZdaemonicr r r rscCs |jdSNauthkeyrJrr r r rLszBaseProcess.authkeycCst||jd<dSrK)AuthenticationStringr!)rrLr r r rLscCs"||jdkr|jS|jSr)r;rrrr r r exitcodes zBaseProcess.exitcodecCs*||tkrtS|jo$|jjSdSr)r;rr#r$rpidrr r r identszBaseProcess.identcCs4|z|jWStk r.tddYnXdS)Nzprocess not started)r;r>AttributeErrorr:rr r r r=s zBaseProcess.sentinelcCsd}|tkrd}nL|jrd}n@|jtkr2d}n,|jdkrBd}n|j}|dk rZd}nd}t|jd|j g}|jdk r| d|jj | d|j| ||dk rt ||}| d ||jr| d d d |S) NZstartedclosedunknowninitialZstoppedzname=%rzpid=%sz parent=%sz exitcode=%srz<%s> )rr(r%r#r$rrr.r/r1appendrO_exitcode_to_namerIrr0)rrNZstatusinfor r r __repr__s0      zBaseProcess.__repr__c Csvddlm}m}z>z|jdk r,||jt da t a |t}|at|j|j|atjrntz|j|W5~X|dz|d}W5|XWntk r}zJ|jsd}n:t|jdtr|jd}nt j!"t#|jddd}W5d}~XYn2d}ddl$}t j!"d|j%|&YnXW5t|d||X|S)N)utilcontextz process exiting with exitcode %dz child process calling self.run()r z Process %s: )'r[r\ threadingZ _shutdownrXZ_flush_std_streamsZ _start_methodZ_force_start_method itertoolsr8rsetr Z _close_stdinr_ParentProcessr'r%rZ_HAVE_THREAD_NATIVE_IDZ main_threadZ_set_native_idZ_finalizer_registryclearZ_run_after_forkersZ_exit_functionr< SystemExitr6 isinstanceintsysstderrwriter tracebackr& print_exc)rZparent_sentinelr[r\rNZ old_processerjr r r _bootstrap"sR         zBaseProcess._bootstrap)N)N)r/ __module__ __qualname__rr9r;r<r?r@rAr0rFrGpropertyr&setterrrLrNrPrOr=rYrmr r r r rGsB            c@seZdZddZdS)rMcCs,ddlm}|dkrtdtt|ffS)NrZ)get_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)r\rr TypeErrorrMbytes)rrrr r r __reduce__Xs   zAuthenticationString.__reduce__N)r/rnrorur r r r rMWsrMc@s6eZdZddZddZeddZd dd ZeZdS) rbcCs4d|_||_||_d|_d|_d|_||_i|_dS)Nr F)r r1_pidr%rr(r>r!)rr&rOr=r r r r9hsz_ParentProcess.__init__cCsddlm}||jgdd SNr)rB)rCZmultiprocessing.connectionrBr>)rrBr r r rFrs z_ParentProcess.is_alivecCs|jSr)rvrr r r rPvsz_ParentProcess.identNcCs ddlm}||jg|ddSrwrx)rrCrBr r r r0zs z_ParentProcess.join)N) r/rnror9rFrprPr0rOr r r r rbfs    rbc@seZdZddZddZdS) _MainProcesscCs8d|_d|_d|_d|_d|_ttddd|_dS)Nr Z MainProcessF z/mp)rLZ semprefix) r r1r%rr(rMr#urandomr!rr r r r9s z_MainProcess.__init__cCsdSrr rr r r rGsz_MainProcess.closeN)r/rnror9rGr r r r rysryrZZSIG_r)$__all__r#rgsignalr`r_Z _weakrefsetrpathabspathgetcwdZ ORIGINAL_DIROSErrorrrrr objectrrtrMrbryrrr8rrar rWr __dict__itemsr&Zsignumr2r r r r  s@    ! __pycache__/resource_sharer.cpython-38.opt-2.pyc000064400000011270147577350250015557 0ustar00U ,a@sddlZddlZddlZddlZddlZddlmZddlmZddlm Z dgZ ej dkrxe dg7Z Gd dde Z ne d g7Z Gd d d e ZGd d d e ZeZejZdS)N)process) reduction)utilstopZwin32 DupSocketc@seZdZddZddZdS)rcs(|fdd}t|j|_dS)Ncs|}||dSN)shareZ send_bytes)connpidr Znew_sockD/opt/alt/python38/lib64/python3.8/multiprocessing/resource_sharer.pysends z DupSocket.__init__..send)dup_resource_sharerregisterclose_id)selfZsockrr r r__init__s zDupSocket.__init__c Cs6t|j }|}t|W5QRSQRXdSr)rget_connectionrZ recv_bytessocketZ fromshare)rr r r r rdetach$szDupSocket.detachN__name__ __module__ __qualname__rrr r r rrsDupFdc@seZdZddZddZdS)rcs4t|fdd}fdd}t|||_dS)Ncst||dSr)rZ send_handle)r r Znew_fdr rr1szDupFd.__init__..sendcstdSr)osrr rr rr3szDupFd.__init__..close)r rrrr)rfdrrr rrr/s   zDupFd.__init__c Cs.t|j}t|W5QRSQRXdSr)rrrrZ recv_handle)rr r r rr7sz DupFd.detachNrr r r rr-sc@sJeZdZddZddZeddZddd Zd d Zd d Z ddZ dS)_ResourceSharercCs@d|_i|_g|_t|_d|_d|_d|_t |t j dS)Nr) _key_cache _old_locks threadingLock_lock _listener_address_threadrZregister_after_forkr" _afterfork)rr r rr?s z_ResourceSharer.__init__c CsZ|jJ|jdkr||jd7_||f|j|j<|j|jfW5QRSQRXdS)Nr)r(r*_startr#r$)rrrr r rrIs  z_ResourceSharer.registercCs<ddlm}|\}}||tjd}||tf|S)NrClientauthkey) connectionr/rcurrent_processr1rr getpid)Zidentr/addresskeycr r rrRs  z_ResourceSharer.get_connectionNc Csddlm}|j|jdk r||jtjd}|d||j ||j rdt d|jd|_ d|_d|_|jD]\}\}}|q|jW5QRXdS)Nrr.r0z._ResourceSharer thread did not stop when asked)r2r/r(r*rr3r1rrr+joinZis_aliverZ sub_warningr)r$itemsclear)rZtimeoutr/r7r6rrr r rr[s$       z_ResourceSharer.stopcCsj|jD]\}\}}|q |j|j|jt|_|jdk rT|j d|_d|_ d|_ dSr) r$r9r:r%appendr(r&r'r)rr*r+)rr6rrr r rr,ps    z_ResourceSharer._afterforkcCsXddlm}td|tjd|_|jj|_ t j |j d}d|_ |||_dS)Nr)Listenerz0starting listener and thread for sending handlesr0)targetT)r2r<rdebugrr3r1r)r5r*r&ZThread_serveZdaemonstartr+)rr<tr r rr-~s   z_ResourceSharer._startc Csttdrttjtzh|jT}|}|dkrHW5QRWq|\}}|j |\}}z|||W5|XW5QRXWqt st j t YqXqdS)Npthread_sigmask)hasattrsignalrB SIG_BLOCK valid_signalsr)ZacceptZrecvr$poprZ is_exitingsys excepthookexc_info)rr msgr6Zdestination_pidrrr r rr?s  z_ResourceSharer._serve)N) rrrrr staticmethodrrr,r-r?r r r rr"=s     r")r rDrrHr&rcontextrr__all__platformobjectrrr"rrr r r r s       `__pycache__/connection.cpython-38.pyc000064400000061241147577350250013566 0ustar00U ,a{@sddddgZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z m Z dd lmZejZz$ddlZdd lmZmZmZmZWn$ek rejd kr‚dZYnXd Zd ZeZdZdgZeedrdZedg7Zejd krdZedg7ZefddZ ddZ!ddZ"ddZ#ddZ$GdddZ%erhGddde%Z&Gdd d e%Z'Gd!dde(Z)dOd"dZ*ejd krdPd$dZ+n dQd%dZ+Gd&d'd'e(Z,d(d)Z-ejd krGd*d+d+e(Z.d,d-Z/d.Z0d/Z1d0Z2d1Z3d2d3Z4d4d5Z5Gd6d7d7e(Z6d8d9Z7d:d;Z8Gdd?Z:ejd krtd@dAZ;ejdRdBdZ?n,ddl@Z@ee@dCre@jAZBne@jCZBdSdDdZ?ejd krdEdFZDdGdHZEeFe'eDdIdJZGdKdLZHeFe&eGndMdFZDdNdHZEeFe'eDdS)TClientListenerPipewaitN)util)AuthenticationErrorBufferTooShort) reduction) WAIT_OBJECT_0WAIT_ABANDONED_0 WAIT_TIMEOUTINFINITEwin32i g4@AF_INETAF_UNIXAF_PIPEcCs t|SNtime monotonic)timeoutr?/opt/alt/python38/lib64/python3.8/multiprocessing/connection.py _init_timeout;srcCs t|kSrr)trrr_check_timeout>srcCsX|dkr dS|dkr&tjdtdS|dkrLtjdtttfddStd d S) z? Return an arbitrary free address for the given family r)Z localhostrrz listener-)prefixdirrz\\.\pipe\pyc-%d-%d-zunrecognized familyN) tempfileZmktemprZ get_temp_dirosgetpidnext _mmap_counter ValueErrorfamilyrrrarbitrary_addressEsr(cCsJtjdkr|dkrtd|tjdkrF|dkrFtt|sFtd|dS)zD Checks if the family is valid for the current environment. rrzFamily %s is not recognized.rN)sysplatformr%hasattrsocketr&rrr_validate_familySs   r-cCsTt|tkrdSt|tkr*|dr*dSt|tks@t|rDdStd|dS)z] Return the types of the address This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE' rz\\rrzaddress type of %r unrecognizedN)typetuplestr startswithris_abstract_socket_namespacer%)addressrrr address_type_s r4c@seZdZdZd+ddZddZddZd d Zd d Zd dZ e ddZ e ddZ e ddZ ddZddZd,ddZddZd-ddZd.d d!Zd"d#Zd/d%d&Zd'd(Zd)d*ZdS)0_ConnectionBaseNTcCs>|}|dkrtd|s(|s(td||_||_||_dS)Nrzinvalid handlez6at least one of `readable` and `writable` must be True) __index__r%_handle _readable _writable)selfhandlereadablewritablerrr__init__usz_ConnectionBase.__init__cCs|jdk r|dSrr7_closer:rrr__del__s z_ConnectionBase.__del__cCs|jdkrtddS)Nzhandle is closed)r7OSErrorrArrr _check_closeds z_ConnectionBase._check_closedcCs|jstddS)Nzconnection is write-only)r8rCrArrr_check_readablesz_ConnectionBase._check_readablecCs|jstddS)Nzconnection is read-only)r9rCrArrr_check_writablesz_ConnectionBase._check_writablecCs"|jrd|_n|tddS)NFzbad message length)r9r8closerCrArrr_bad_message_lengthsz#_ConnectionBase._bad_message_lengthcCs |jdkS)z True if the connection is closedNr7rArrrclosedsz_ConnectionBase.closedcCs|jS)z"True if the connection is readable)r8rArrrr<sz_ConnectionBase.readablecCs|jS)z"True if the connection is writable)r9rArrrr=sz_ConnectionBase.writablecCs||jS)z+File descriptor or handle of the connection)rDr7rArrrfilenosz_ConnectionBase.filenocCs$|jdk r z |W5d|_XdS)zClose the connectionNr?rArrrrGs  z_ConnectionBase.closercCs||t|}|jdkr.tt|}t|}|dkrFtd||krVtd|dkrh||}n&|dkrztdn|||krtd|||||dS)z,Send the bytes data from a bytes-like objectrrzoffset is negativezbuffer length < offsetNzsize is negativezbuffer length < offset + size)rDrF memoryviewitemsizebyteslenr% _send_bytes)r:bufoffsetsizemnrrr send_bytess"     z_ConnectionBase.send_bytescCs$|||t|dS)zSend a (picklable) objectN)rDrFrP_ForkingPicklerdumpsr:objrrrsendsz_ConnectionBase.sendcCsJ|||dk r(|dkr(td||}|dkrB||S)z7 Receive bytes data as a bytes object. Nrznegative maxlength)rDrEr% _recv_bytesrHgetvalue)r:Z maxlengthrQrrr recv_bytess z_ConnectionBase.recv_bytesc Cs||t|}|j}|t|}|dkr>tdn||krNtd|}|}|||krvt| | d| |||||||W5QRSQRXdS)zq Receive bytes data into a writeable bytes-like object. Return the number of bytes read. rznegative offsetzoffset too largeN) rDrErLrMrOr%r\tellr r]seekreadinto)r:rQrRrTrMZbytesizeresultrSrrrrecv_bytes_intos$        z_ConnectionBase.recv_bytes_intocCs&|||}t|S)zReceive a (picklable) object)rDrEr\rWloads getbuffer)r:rQrrrrecvsz_ConnectionBase.recvcCs||||S)z/Whether there is any input available to be read)rDrE_pollr:rrrrpollsz_ConnectionBase.pollcCs|SrrrArrr __enter__sz_ConnectionBase.__enter__cCs |dSrrGr:exc_type exc_valueZexc_tbrrr__exit__sz_ConnectionBase.__exit__)TT)rN)N)r)rg)__name__ __module__ __qualname__r7r>rBrDrErFrHpropertyrJr<r=rKrGrVr[r^rcrfrjrkrprrrrr5rs.       r5c@sDeZdZdZdZejfddZddZddd Z d d Z d d Z dS)PipeConnectionz Connection class based on a Windows named pipe. Overlapped I/O is used, so the handles must have been created with FILE_FLAG_OVERLAPPED. FcCs||jdSrrI)r:Z _CloseHandlerrrr@szPipeConnection._closec Cstj|j|dd\}}zHz,|tjkrBt|jgdt}|tksBt Wn| YnXW5|d\}}X|dks|t |t |kst dS)NT overlappedFr) _winapiZ WriteFiler7GetOverlappedResultERROR_IO_PENDINGWaitForMultipleObjectseventrr AssertionErrorcancelrO)r:rQoverrZnwrittenwaitresrrrrPs   zPipeConnection._send_bytesNc Cs2|jrd|_tS|dkr dnt|d}ztj|j|dd\}}dzHz,|tj krpt |jgdt}|tksptWn|YnXW5|d\}}|dkrt}|| |WS|tj kr| ||WSXWn:tk r$}z|jtjkrtnW5d}~XYnXtddS)NFTrvrz.shouldn't get here; expected KeyboardInterrupt)_got_empty_messageioBytesIOminrxReadFiler7rywritereZERROR_MORE_DATA_get_more_datarzr{r|rr r}r~rCwinerrorERROR_BROKEN_PIPEEOFError RuntimeError) r:maxsizeZbsizerrZnreadfrerrrr\&s>      zPipeConnection._recv_bytescCs.|jst|jddkrdStt|g|S)NrT)rrx PeekNamedPiper7boolrrirrrrhFs zPipeConnection._pollcCs|}t}||t|jd}|dks6t|dk rVt|||krV| tj |j|dd\}}| d\}}|dkst||kst|||S)NrrTrv) rerrrrxrr7r}rOrHrry)r:rrrQrleftrZrbytesrrrrLs    zPipeConnection._get_more_data)N) rqrrrs__doc__rrx CloseHandler@rPr\rhrrrrrru s ruc@s|eZdZdZer,ejfddZejZ ej Z ne j fddZe jZ e jZ e fddZe fddZd d Zdd d ZddZd S) Connectionzo Connection class based on an arbitrary file descriptor (Unix only), or a socket handle (Windows). cCs||jdSrrIr:r@rrrr@cszConnection._closecCs||jdSrrIrrrrr@hscCs8t|}||j|}||8}|dkr&q4||d}qdSNr)rOr7)r:rQr remainingrUrrr_sendms  zConnection._sendcCsbt}|j}|}|dkr^|||}t|}|dkrJ||krBtntd||||8}q|S)Nrzgot end of file during message)rrr7rOrrCr)r:rSreadrQr;rchunkrUrrr_recvvs   zConnection._recvcCst|}|dkrHtdd}td|}||||||n8td|}|dkrr||||n|||dS)Ni!i!Qi@)rOstructZpackr)r:rQrUZ pre_headerheaderrrrrPs        zConnection._send_bytesNcCs^|d}td|\}|dkr@|d}td|\}|dk rT||krTdS||S)Nrrr)rrZunpackr])r:rrQrSrrrr\s  zConnection._recv_bytescCst|g|}t|Sr)rr)r:rrrrrrhs zConnection._poll)N)rqrrrsrrx_multiprocessingZ closesocketr@r[Z_writerfZ_readr!rGrrrrrPr\rhrrrrr\s  rc@sReZdZdZdddZddZdd Zed d Zed d Z ddZ ddZ dS)rz Returns a listener object. This is a wrapper for a bound socket which is 'listening' for connections, or for a Windows named pipe. NrcCsp|p|rt|pt}|pt|}t||dkr>t|||_nt||||_|dk rft|tsft d||_ dS)Nrauthkey should be a byte string) r4default_familyr(r- PipeListener _listenerSocketListener isinstancerN TypeError_authkey)r:r3r'backlogauthkeyrrrr>s zListener.__init__cCs>|jdkrtd|j}|jr:t||jt||j|S)zz Accept a connection on the bound socket or named pipe of `self`. Returns a `Connection` object. Nzlistener is closed)rrCacceptrdeliver_challengeanswer_challenge)r:crrrrs    zListener.acceptcCs |j}|dk rd|_|dS)zA Close the bound socket or named pipe of `self`. N)rrG)r:ZlistenerrrrrGszListener.closecCs|jjSr)r_addressrArrrr3szListener.addresscCs|jjSr)r_last_acceptedrArrr last_acceptedszListener.last_acceptedcCs|SrrrArrrrkszListener.__enter__cCs |dSrrlrmrrrrpszListener.__exit__)NNrN) rqrrrsrr>rrGrtr3rrkrprrrrrs    cCsh|p t|}t||dkr&t|}nt|}|dk rHt|tsHtd|dk rdt||t|||S)z= Returns a connection to the address of a `Listener` rNr) r4r- PipeClient SocketClientrrNrrr)r3r'rrrrrrs    TcCsj|r>t\}}|d|dt|}t|}n$t\}}t|dd}t|dd}||fS)L Returns pair of connection objects at either end of a pipe TFr=r<)r,Z socketpair setblockingrdetachr!pipe)duplexs1s2c1c2Zfd1Zfd2rrrrs       c Cstd}|r*tj}tjtjB}tt}}ntj}tj}dt}}t||tjBtj Btj tj Btj Bd||tj tj}t||dtjtjtjtj}t|tj ddtj|dd}|d\} } | dkstt||d} t||d} | | fS) rrrrNTrvrr)r(rxPIPE_ACCESS_DUPLEX GENERIC_READ GENERIC_WRITEBUFSIZEZPIPE_ACCESS_INBOUNDCreateNamedPipeFILE_FLAG_OVERLAPPEDFILE_FLAG_FIRST_PIPE_INSTANCEPIPE_TYPE_MESSAGEPIPE_READMODE_MESSAGE PIPE_WAITNMPWAIT_WAIT_FOREVERNULL CreateFile OPEN_EXISTINGSetNamedPipeHandleStateConnectNamedPiperyr}ru) rr3ZopenmodeaccessZobsizeZibsizeZh1Zh2rw_rrrrrrrsV        c@s*eZdZdZd ddZddZddZd S) rzO Representation of a socket which is bound to an address and listening rcCsttt||_zRtjdkr2|jtjtjd|jd|j ||j ||j |_ Wn t k r|jYnX||_d|_|dkrt|stj|tj|fdd|_nd|_dS)NposixrTrrargsZ exitpriority)r,getattr_socketr!nameZ setsockoptZ SOL_SOCKETZ SO_REUSEADDRrZbindZlistenZ getsocknamerrCrGZ_familyrrr2Finalizeunlink_unlink)r:r3r'rrrrr>Gs0       zSocketListener.__init__cCs&|j\}|_|dt|S)NT)rrrrrrr:srrrr`s zSocketListener.acceptcCs0z|jW5|j}|dk r*d|_|XdSr)rrrG)r:rrrrrGes zSocketListener.closeN)r)rqrrrsrr>rrGrrrrrCs rc CsPt|}ttt|.}|d||t|W5QRSQRXdS)zO Return a connection object connected to the socket given by `address` TN)r4r,rrZconnectrr)r3r'rrrrros   rc@s8eZdZdZd ddZd ddZdd Zed d ZdS)rz0 Representation of a named pipe NcCsL||_|jddg|_d|_td|jtj|tj|j|jfdd|_ dS)NT)firstz listener created with address=%rrr) r _new_handle _handle_queuerr sub_debugrr_finalize_pipe_listenerrG)r:r3rrrrr>s zPipeListener.__init__Fc CsHtjtjB}|r|tjO}t|j|tjtjBtjBtj t t tj tj Sr) rxrrrrrrrrZPIPE_UNLIMITED_INSTANCESrrr)r:rflagsrrrrs   zPipeListener._new_handlec Cs|j||jd}ztj|dd}Wn0tk r^}z|jtjkrNW5d}~XYn\Xzrr staticmethodrrrrrrs  rc Cst}z6t|dt|tjtjBdtjtjtjtj}Wqt k rz}z |j tj tj fksht |rjW5d}~XYqXqqt|tjddt|S)zU Return a connection object connected to the pipe given by `address` rN)rrxZ WaitNamedPiperrrrrrrCrZERROR_SEM_TIMEOUTZERROR_PIPE_BUSYrrrru)r3rhrrrrrs8  rs #CHALLENGE#s #WELCOME#s #FAILURE#cCsddl}t|ts$tdt|tt}| t || ||d }| d}||krl| tn| ttddS)Nr Authkey must be bytes, not {0!s}md5zdigest received was wrong)hmacrrNr%formatr.r!urandomMESSAGE_LENGTHrV CHALLENGEnewdigestr^WELCOMEFAILURErZ connectionrrmessagerZresponserrrrs      rcCsddl}t|ts$tdt||d}|dtttksNt d||ttd}| ||d }| ||d}|t krtddS)Nrrrz message = %rrzdigest sent was rejected)rrrNr%rr.r^rOrr}rrrVrrrrrrrs      rc@s$eZdZddZddZddZdS)ConnectionWrappercCs6||_||_||_dD]}t||}t|||qdS)N)rKrGrjr^rV)_conn_dumps_loadsrsetattr)r:connrXrdattrrZrrrr>s  zConnectionWrapper.__init__cCs||}|j|dSr)rrrV)r:rZrrrrr[s zConnectionWrapper.sendcCs|j}||Sr)rr^rrrrrrfs zConnectionWrapper.recvN)rqrrrsr>r[rfrrrrrsrcCst|fdddddS)Nrutf-8) xmlrpclibrXencode)rZrrr _xml_dumps srcCst|d\\}}|S)Nr)rrddecode)rrZmethodrrr _xml_loadssr c@seZdZddZdS) XmlListenercCs"ddlmat|}t|ttSr) xmlrpc.clientclientrrrrrr rYrrrrs  zXmlListener.acceptN)rqrrrsrrrrrr sr cOsddlmatt||ttSr)r r rrrrr )rkwdsrrr XmlClients rcCst|}g}|rt|d|}|tkr*qn\t|krFtt|krTnn |t8}n2t|krptt|kr~nn |t8}ntd|||||dd}d}q |S)NFzShould not get hererr) listrxr{r r rOr rr)ZhandlesrLreadyrrrr_exhaustive_wait%s    rc s^|dkrt}n|dkrd}nt|dd}t|}ig}tt}z@|D]&}zt|d} Wn tk r||<YqPXzt | dd\}}Wn8tk r}zd|j}}|tkrƂW5d}~XYnX|t jkr||||j <qP|rjtddd krjz|d \}}Wn*tk rP}z |j}W5d}~XYnX|sjt |drjd|_ |d}qPt|}W5|D]}|q|D]}z|d\}}Wn6tk r}z|j}|tkrW5d}~XYnX|t j kr|j } ||dkrt |drd|_qXfd d |Dfd d|DS) Wait till an object in object_list is ready/readable. Returns list of those objects in object_list which are ready/readable. Nrrg?TrrK)rFc3s|]}|VqdSrr).0r)waithandle_to_objrr szwait..csg|]}|kr|qSrr)ro) ready_objectsrr swait..)rintrsetr~ryrCr _ready_errorsrxZERROR_OPERATION_ABORTEDr|addr+rrAttributeErrorr6rrzrr)Zgetwindowsversionrkeysupdate) object_listrZov_listZ ready_handlesrrrrrrKr)rrrr;sh               PollSelectorc Cst}|D]}||tjq |dk r4t|}||}|r\dd|DW5QRS|dk r4|t}|dkr4|W5QRSq4W5QRXdS)rNcSsg|]\}}|jqSr)Zfileobj)rkeyZeventsrrrrsrr) _WaitSelectorregister selectorsZ EVENT_READrrZselect)r%rZselectorrZZdeadlinerrrrrs   c CsZ|}t|tjtj6}ddlm}||}t||j |j ffW5QRSQRXdS)Nr)resource_sharer) rKr,ZfromfdrZ SOCK_STREAMrr+Z DupSocketrebuild_connectionr<r=)rr;rr+dsrrrreduce_connections   r.cCs|}t|||Srrr)r-r<r=Zsockrrrr,sr,cCsB|jr tjnd|jrtjndB}t||}t||j|jffSr) r<rxZFILE_GENERIC_READr=ZFILE_GENERIC_WRITEr Z DupHandlerKrebuild_pipe_connection)rrdhrrrreduce_pipe_connections r2cCs|}t|||Sr)rru)r1r<r=r;rrrr0sr0cCs t|}t||j|jffSr)r ZDupFdrKr,r<r=)rdfrrrr.scCs|}t|||Srr/)r3r<r=fdrrrr,s)NN)T)T)N)N)I__all__rr!r)r,rrr itertoolsrrrrr contextr ZForkingPicklerrWrxr r r r ImportErrorr*rZCONNECTION_TIMEOUTcountr$rZfamiliesr+rrr(r-r4r5rurobjectrrrrrrrrrrrrrrrr r rrrZERROR_NETNAME_DELETEDr rr*r&r(ZSelectSelectorr.r,r)r2r0rrrr s           PT=    ,, 8   P    __pycache__/context.cpython-38.pyc000064400000031351147577350250013112 0ustar00U ,a+@sddlZddlZddlZddlmZddlmZdZGdddeZGdd d eZ Gd d d eZ Gd d d eZ Gddde Z GdddejZGddde ZejdkrRGdddejZGdddejZGdddejZGddde ZGddde ZGdd d e Zeeed!Zejd"krDeed#Zn eed$Zn8Gd%ddejZGd&dde Zd#eiZeed#Zd'd(ZeZd)d*Zd+d,Zd-d.ZdS)/N)process) reductionc@s eZdZdS) ProcessErrorN__name__ __module__ __qualname__rrrd?Z(e(j)d@d?Z(dAdBZ*d S)O BaseContextcCs"t}|dkrtdn|SdS)z(Returns the number of CPUs in the systemNzcannot determine number of cpus)os cpu_countNotImplementedError)selfZnumrrr r)s zBaseContext.cpu_countcCs&ddlm}||d}||S)zReturns a manager associated with a running server process The managers methods such as `Lock()`, `Condition()` and `Queue()` can be used to create shared objects. r) SyncManagerctx)Zmanagersr get_contextstart)rrmrrr Manager1s zBaseContext.ManagerTcCsddlm}||S)z1Returns two connection object connected by a piper)Pipe) connectionr)rZduplexrrrr r<s zBaseContext.PipecCsddlm}||dS)z#Returns a non-recursive lock objectr)Lockr) synchronizerr)rrrrr rAs zBaseContext.LockcCsddlm}||dS)zReturns a recursive lock objectr)RLockr)rrr)rrrrr rFs zBaseContext.RLockNcCsddlm}|||dS)zReturns a condition objectr) Conditionr)rr r)rlockr rrr r Ks zBaseContext.ConditionrcCsddlm}|||dS)zReturns a semaphore objectr) Semaphorer)rr"r)rvaluer"rrr r"Ps zBaseContext.SemaphorecCsddlm}|||dS)z"Returns a bounded semaphore objectr)BoundedSemaphorer)rr$r)rr#r$rrr r$Us zBaseContext.BoundedSemaphorecCsddlm}||dS)zReturns an event objectr)Eventr)rr%r)rr%rrr r%Zs zBaseContext.EventcCs ddlm}|||||dS)zReturns a barrier objectr)Barrierr)rr&r)rZpartiesactionZtimeoutr&rrr r&_s zBaseContext.BarrierrcCsddlm}|||dS)Returns a queue objectr)Queuer)queuesr)r)rmaxsizer)rrr r)ds zBaseContext.QueuecCsddlm}|||dS)r(r) JoinableQueuer)r*r,r)rr+r,rrr r,is zBaseContext.JoinableQueuecCsddlm}||dS)r(r) SimpleQueuer)r*r-r)rr-rrr r-ns zBaseContext.SimpleQueuercCs"ddlm}||||||dS)zReturns a process pool objectr)Pool)context)Zpoolr.r)rZ processesZ initializerZinitargsZmaxtasksperchildr.rrr r.ss  zBaseContext.PoolcGsddlm}||f|S)zReturns a shared objectr)RawValue) sharedctypesr0)rtypecode_or_typeargsr0rrr r0zs zBaseContext.RawValuecCsddlm}|||S)zReturns a shared arrayr)RawArray)r1r4)rr2size_or_initializerr4rrr r4s zBaseContext.RawArray)r!cGs&ddlm}||f|||dS)z$Returns a synchronized shared objectr)Valuer!r)r1r6r)rr2r!r3r6rrr r6s  zBaseContext.ValuecCs ddlm}|||||dS)z#Returns a synchronized shared arrayr)Arrayr7)r1r8r)rr2r5r!r8rrr r8s zBaseContext.ArraycCs,tjdkr(ttddr(ddlm}|dS)zCheck whether this is a fake forked process in a frozen executable. If so then run code specified by commandline and exit. win32frozenFr)freeze_supportN)sysplatformgetattrspawnr;)rr;rrr r;s zBaseContext.freeze_supportcCsddlm}|S)zZReturn package logger -- if it does not already exist then it is created. r) get_logger)utilr@)rr@rrr r@s zBaseContext.get_loggercCsddlm}||S)z8Turn on logging and add a handler which prints to stderrr) log_to_stderr)rArB)rlevelrBrrr rBs zBaseContext.log_to_stderrcCsddlm}dS)zVInstall support for sending connections and sockets between processes r)rN)r)rrrrr allow_connection_picklingsz%BaseContext.allow_connection_picklingcCsddlm}||dS)zSets the path to a python.exe or pythonw.exe binary used to run child processes instead of sys.executable when using the 'spawn' start method. Useful for people embedding Python. r)set_executableN)r?rF)r executablerFrrr rFs zBaseContext.set_executablecCsddlm}||dS)zkSet list of module names to try to load in forkserver process. This is really just a hint. r)set_forkserver_preloadN) forkserverrH)rZ module_namesrHrrr rHs z"BaseContext.set_forkserver_preloadcCsH|dkr |Sz t|}Wn"tk r:td|dYnX||S)Nzcannot find context for %r)_concrete_contextsKeyError ValueError_check_available)rmethodrrrr rs zBaseContext.get_contextFcCs|jSN)_namerZ allow_nonerrr get_start_methodszBaseContext.get_start_methodcCs tddS)Nz+cannot set start method of concrete context)rLrrNZforcerrr set_start_methodszBaseContext.set_start_methodcCs tdS)z_Controls how objects will be reduced to a form that can be shared with other processes.r)globalsgetrrrr reducerszBaseContext.reducercCs|td<dS)Nr)rU)rrrrr rXscCsdSrOrrWrrr rMszBaseContext._check_available)T)N)r)r)NN)r)r)NNrN)N)N)F)F)+rr r rr r r staticmethodrZcurrent_processZparent_processZactive_childrenrrrrrr r"r$r%r&r)r,r-r.r0r4r6r8r;r@rBrErFrHrrRrTpropertyrXsetterrMrrrr rsR                rc@seZdZdZeddZdS)ProcessNcCstj|SrO)_default_contextrr\_Popen) process_objrrr r^szProcess._Popenrr r Z _start_methodrYr^rrrr r\sr\csFeZdZeZddZd fdd ZdddZdd d Zd d ZZ S)DefaultContextcCs||_d|_dSrO)r]_actual_context)rr/rrr __init__szDefaultContext.__init__Ncs0|dkr |jdkr|j|_|jSt|SdSrO)rbr]superr)rrN __class__rr rs  zDefaultContext.get_contextFcCs<|jdk r|std|dkr,|r,d|_dS|||_dS)Nzcontext has already been set)rb RuntimeErrorrrSrrr rTs  zDefaultContext.set_start_methodcCs"|jdkr|rdS|j|_|jjSrO)rbr]rPrQrrr rRs  zDefaultContext.get_start_methodcCsBtjdkrdgStjdkr"ddgnddg}tjr:|d|SdS)Nr9r?darwinforkrI)r<r=rHAVE_SEND_HANDLEappend)rmethodsrrr get_all_start_methodss   z$DefaultContext.get_all_start_methods)N)F)F) rr r r\rcrrTrRrm __classcell__rrrer ras   rar9c@seZdZdZeddZdS) ForkProcessricCsddlm}||SNr)Popen)Z popen_forkrqr_rqrrr r^s zForkProcess._PopenNr`rrrr rosroc@seZdZdZeddZdS) SpawnProcessr?cCsddlm}||Srp)Zpopen_spawn_posixrqrrrrr r^s SpawnProcess._PopenNr`rrrr rssrsc@seZdZdZeddZdS)ForkServerProcessrIcCsddlm}||Srp)Zpopen_forkserverrqrrrrr r^ s zForkServerProcess._PopenNr`rrrr rusruc@seZdZdZeZdS) ForkContextriN)rr r rPror\rrrr rv%srvc@seZdZdZeZdS SpawnContextr?Nrr r rPrsr\rrrr rx)srxc@seZdZdZeZddZdS)ForkServerContextrIcCstjstddS)Nz%forkserver start method not available)rrjrLrWrrr rM0sz"ForkServerContext._check_availableN)rr r rPrur\rMrrrr rz-srz)rir?rIrhr?ric@seZdZdZeddZdS)rsr?cCsddlm}||Srp)Zpopen_spawn_win32rqrrrrr r^Ds rtNr`rrrr rsBsc@seZdZdZeZdSrwryrrrr rxIscCst|t_dSrO)rJr]rb)rNrrr _force_start_methodVsr{cCs ttddS)Nspawning_popen)r>_tlsrrrr get_spawning_popen_sr~cCs |t_dSrO)r}r|)popenrrr set_spawning_popenbsrcCs tdkrtdt|jdS)NzF%s objects should only be shared between processes through inheritance)r~rgtyper)objrrr assert_spawninges  r) rr<Z threadingrDrr__all__ Exceptionrr r robjectrZ BaseProcessr\rar=rorsrurvrxrzrJr]r{Zlocalr}r~rrrrrr sL  ?,   __pycache__/pool.cpython-38.pyc000064400000060720147577350250012401 0ustar00U ,a~@sdddgZddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z ddl m Z m Z ddlmZd Zd Zd Zd ZeZd dZddZGdddeZGdddZddZGdddeZd+ddZddZGdd d eZ Gd!dde!Z"Gd"d#d#e!Z#e#Z$Gd$d%d%e#Z%Gd&d'd'e!Z&Gd(d)d)e&Z'Gd*dde"Z(dS),Pool ThreadPoolN)Empty)util) get_context TimeoutError)waitINITRUNCLOSE TERMINATEcCs tt|SN)listmapargsr9/opt/alt/python38/lib64/python3.8/multiprocessing/pool.pymapstar/srcCstt|d|dS)Nrr)r itertoolsstarmaprrrr starmapstar2src@seZdZddZddZdS)RemoteTracebackcCs ||_dSrtb)selfrrrr__init__:szRemoteTraceback.__init__cCs|jSrrrrrr__str__<szRemoteTraceback.__str__N)__name__ __module__ __qualname__rrrrrrr9src@seZdZddZddZdS)ExceptionWithTracebackcCs0tt|||}d|}||_d||_dS)Nz """ %s""") tracebackformat_exceptiontypejoinexcr)rr)rrrrr@s zExceptionWithTraceback.__init__cCst|j|jffSr) rebuild_excr)rrrrr __reduce__Esz!ExceptionWithTraceback.__reduce__N)r r!r"rr+rrrrr#?sr#cCst||_|Sr)r __cause__)r)rrrrr*Hs r*cs0eZdZdZfddZddZddZZS)MaybeEncodingErrorzVWraps possible unpickleable errors, so they can be safely sent through the socket.cs.t||_t||_tt||j|jdSr)reprr)valuesuperr-r)rr)r/ __class__rrrTs  zMaybeEncodingError.__init__cCsd|j|jfS)Nz(Error sending result: '%s'. Reason: '%s')r/r)rrrrrYszMaybeEncodingError.__str__cCsd|jj|fS)Nz<%s: %s>)r2r rrrr__repr__]szMaybeEncodingError.__repr__)r r!r"__doc__rrr3 __classcell__rrr1rr-Ps r-rFc Cs|dk r(t|tr|dks(td||j}|j}t|drR|j|j |dk rb||d}|dks~|r||krz |} Wn(t t fk rt dYqYnX| dkrt dq| \} } } } }zd| | |f}WnHtk r0}z(|r| tk rt||j}d|f}W5d}~XYnXz|| | |fWnRtk r}z2t||d}t d ||| | d|ffW5d}~XYnXd} } }} } }|d7}qft d |dS) NrzMaxtasks {!r} is not valid_writerrz)worker got EOFError or OSError -- exitingzworker got sentinel -- exitingTFz0Possible encoding error while sending result: %szworker exiting after %d tasks) isinstanceintAssertionErrorformatputgethasattrr6close_readerEOFErrorOSErrorrdebug Exception_helper_reraises_exceptionr# __traceback__r-)inqueueoutqueue initializerinitargsZmaxtaskswrap_exceptionr;r<Z completedtaskjobifuncrkwdsresultewrappedrrrworkerasN        $ rScCs|dS)z@Pickle-able helper function for use by _guarded_task_generation.Nr)ZexrrrrDsrDcs2eZdZdZddfdd ZfddZZS) _PoolCachez Class that implements a cache for the Pool class that will notify the pool management threads every time the cache is emptied. The notification is done by the use of a queue that is provided when instantiating the cache. Nnotifiercs||_tj||dSr)rVr0r)rrVrrOr1rrrsz_PoolCache.__init__cs t||s|jddSr)r0 __delitem__rVr;)ritemr1rrrWs z_PoolCache.__delitem__)r r!r"r4rrWr5rrr1rrTsrTc@seZdZdZdZeddZdLddZej e fd d Z d d Z d dZ eddZeddZddZeddZeddZddZddZdifddZdMdd ZdNd!d"ZdOd#d$Zd%d&ZdPd(d)ZdQd*d+Zdiddfd,d-ZdRd.d/ZdSd0d1ZedTd2d3Ze d4d5Z!ed6d7Z"ed8d9Z#ed:d;Z$dd?Z&d@dAZ'dBdCZ(edDdEZ)e dFdGZ*dHdIZ+dJdKZ,dS)UrzS Class which supports an async version of applying functions to arguments. TcOs |j||SrProcess)ctxrrOrrrrZsz Pool.ProcessNrcCsg|_t|_|pt|_|t|_|j|_ t |j d|_ ||_ ||_ ||_|dkrjtphd}|dkrztd|dk rt|std||_z |WnHtk r|jD]}|jdkr|q|jD] }|q؂YnX|}tjtj|j |j|j|j|j|j|j |j!|j |j|j |j"||j fd|_#d|j#_$t%|j#_|j#&tjtj'|j|j(|j!|j|j fd|_)d|j)_$t%|j)_|j)&tjtj*|j!|j+|j fd|_,d|j,_$t%|j,_|j,&t-j.||j/|j|j |j!|j|j |j#|j)|j,|j f dd|_0t%|_dS) NrUrz&Number of processes must be at least 1zinitializer must be a callabletargetrT)rZ exitpriority)1_poolr _stater_ctx _setup_queuesqueue SimpleQueue _taskqueue_change_notifierrT_cache_maxtasksperchild _initializer _initargsos cpu_count ValueErrorcallable TypeError _processes_repopulate_poolrCexitcode terminater(_get_sentinels threadingZThreadr_handle_workersrZ_inqueue _outqueue_wrap_exception_worker_handlerdaemonr start _handle_tasks _quick_put _task_handler_handle_results _quick_get_result_handlerrZFinalize_terminate_pool _terminate)r processesrHrImaxtasksperchildcontextp sentinelsrrrrs              z Pool.__init__cCs>|j|kr:|d|t|dt|dddk r:|jddS)Nz&unclosed running multiprocessing pool )sourcerf)r`ResourceWarninggetattrrfr;)rZ_warnr rrr__del__s  z Pool.__del__c Cs0|j}d|jd|jd|jdt|jd S)N<.z state=z pool_size=>)r2r!r"r`lenr_)rclsrrrr3sz Pool.__repr__cCs|jjg}|jjg}||Sr)rxr?rf)rZtask_queue_sentinelsZself_notifier_sentinelsrrrrts  zPool._get_sentinelscCsdd|DS)NcSsg|]}t|dr|jqS)sentinel)r=r).0rSrrr s z.Pool._get_worker_sentinels..rZworkersrrr_get_worker_sentinelsszPool._get_worker_sentinelscCsPd}ttt|D]6}||}|jdk rtd||d}||=q|S)zCleanup after any worker processes which have exited due to reaching their specified lifetime. Returns True if any workers were cleaned up. FNcleaning up worker %dT)reversedrangerrrrrBr()poolZcleanedrMrSrrr_join_exited_workerss zPool._join_exited_workersc Cs0||j|j|j|j|j|j|j|j|j |j Sr) _repopulate_pool_staticrarZrpr_rwrxrirjrhryrrrrrq.s zPool._repopulate_poolc Csft|t|D]P} ||t|||||| fd} | jdd| _d| _| || t dqdS)zBring the number of pool processes up to the specified number, for use after reaping workers which have exited. r\rZZ PoolWorkerTz added workerN) rrrSnamereplacer{r|appendrrB) r[rZrrrFrGrHrIrrJrMwrrrr7s zPool._repopulate_pool_staticc Cs*t|r&t|||||||||| dS)zEClean up any exited workers and start replacements for them. N)rrr) r[rZrrrFrGrHrIrrJrrr_maintain_poolJs  zPool._maintain_poolcCs4|j|_|j|_|jjj|_|jjj|_ dSr) rardrwrxr6sendr~r?recvrrrrrrbVs   zPool._setup_queuescCs|jtkrtddS)NzPool not running)r`r rmrrrr_check_running\s zPool._check_runningcCs||||S)zT Equivalent of `func(*args, **kwds)`. Pool must be running. ) apply_asyncr<)rrNrrOrrrapply`sz Pool.applycCs|||t|S)zx Apply `func` to each element in `iterable`, collecting the results in a list that is returned. ) _map_asyncrr<rrNiterable chunksizerrrrgszPool.mapcCs|||t|S)z Like `map()` method but the elements of the `iterable` are expected to be iterables as well and will be unpacked as arguments. Hence `func` and (a, b) becomes func(a, b). )rrr<rrrrrnsz Pool.starmapcCs|||t|||S)z= Asynchronous version of `starmap()` method. )rrrrNrrcallbackerror_callbackrrr starmap_asyncvs zPool.starmap_asyncc csjz,d}t|D]\}}||||fifVqWn8tk rd}z||dt|fifVW5d}~XYnXdS)zProvides a generator of tasks for imap and imap_unordered with appropriate handling for iterables which throw exceptions during iteration.rN) enumeraterCrD)rZ result_jobrNrrMxrQrrr_guarded_task_generation~s zPool._guarded_task_generationrcCs||dkr:t|}|j||j|||jf|S|dkrPtd|t |||}t|}|j||jt ||jfdd|DSdS)zP Equivalent of `map()` -- can be MUCH slower than `Pool.map()`. rzChunksize must be 1+, not {0:n}css|]}|D] }|Vq qdSrrrchunkrXrrr szPool.imap..N) r IMapIteratorrer;r_job _set_lengthrmr:r _get_tasksrrrNrrrP task_batchesrrrimaps4z Pool.imapcCs||dkr:t|}|j||j|||jf|S|dkrPtd|t |||}t|}|j||jt ||jfdd|DSdS)zL Like `imap()` method but ordering of results is arbitrary. rzChunksize must be 1+, not {0!r}css|]}|D] }|Vq qdSrrrrrrrsz&Pool.imap_unordered..N) rIMapUnorderedIteratorrer;rrrrmr:rrrrrrrimap_unordereds0zPool.imap_unorderedcCs6|t|||}|j|jd|||fgdf|S)z; Asynchronous version of `apply()` method. rN)r ApplyResultrer;r)rrNrrOrrrPrrrrs zPool.apply_asynccCs|||t|||S)z9 Asynchronous version of `map()` method. )rrrrrr map_asyncszPool.map_asyncc Cs|t|dst|}|dkrJtt|t|jd\}}|rJ|d7}t|dkrZd}t|||}t||t|||d} |j | | j ||df| S)zY Helper function to implement map, starmap and their async counterparts. __len__Nrrr) rr=rdivmodrr_rr MapResultrer;rr) rrNrZmapperrrrZextrarrPrrrrs,  zPool._map_asynccCs"t||d|s|q dS)N)timeout)r emptyr<)rchange_notifierrrrr_wait_for_updatess zPool._wait_for_updatesc Cspt}|jtks |rX|jtkrX|||||||| | | | ||| }|||q|dt ddS)Nzworker handler exiting) rucurrent_threadr`r r rrrr;rrB)rcache taskqueuer[rZrrrFrGrHrIrrJrrthreadZcurrent_sentinelsrrrrvs zPool._handle_workersc Cspt}t|jdD]\}}d}z|D]}|jtkrBtdqz ||Wq&tk r} zB|dd\} } z||  | d| fWnt k rYnXW5d} ~ XYq&Xq&|rtd|r|dnd} || dWqW q W5d}}} Xqtdz6td| dtd |D]} |dq.Wn t k r`td YnXtd dS) Nz'task handler found thread._state != RUNFzdoing set_length()rrztask handler got sentinelz/task handler sending sentinel to result handlerz(task handler sending sentinel to workersz/task handler got OSError when sending sentinelsztask handler exiting) ruriterr<r`r rrBrC_setKeyErrorr;rA) rr;rGrrrZtaskseqZ set_lengthrKrLrQidxrrrrr} sB         zPool._handle_tasksc Cst}z |}Wn$ttfk r6tdYdSX|jtkr`|jtksTt dtdq|dkrttdq|\}}}z|| ||Wnt k rYnXd}}}q|rR|jtkrRz |}Wn$ttfk rtdYdSX|dkrtdq|\}}}z|| ||Wnt k rBYnXd}}}qt |drtdz,t dD]}|jsq|qrWnttfk rYnXtd t||jdS) Nz.result handler got EOFError/OSError -- exitingzThread not in TERMINATEz,result handler found thread._state=TERMINATEzresult handler got sentinelz&result handler ignoring extra sentinelr?z"ensuring that outqueue is not full z7result handler exiting: len(cache)=%s, thread._state=%s)rurrAr@rrBr`r r r9rrr=rr?pollr)rGr<rrrKrLrMobjrrrr:s^               zPool._handle_resultsccs0t|}tt||}|s dS||fVqdSr)rtuplerislice)rNitsizerrrrrvs zPool._get_taskscCs tddS)Nz:pool objects cannot be passed between processes or pickled)NotImplementedErrorrrrrr+szPool.__reduce__cCs2td|jtkr.t|_t|j_|jddS)Nz closing pool)rrBr`r r rzrfr;rrrrr>s   z Pool.closecCstdt|_|dS)Nzterminating pool)rrBr r`rrrrrrss zPool.terminatecCsjtd|jtkrtdn|jttfkr4td|j|j |j |j D] }|qXdS)Nz joining poolzPool is still runningzIn unknown state) rrBr`r rmr r rzr(rrr_)rrrrrr(s       z Pool.joincCs@td|j|r<|jr<|jt dqdS)Nz7removing tasks from inqueue until task handler finishedr) rrBZ_rlockacquireis_aliver?rrtimesleep)rF task_handlerrrrr_help_stuff_finishs    zPool._help_stuff_finishc CsXtdt|_|dt|_td|||t||sXt| dkrXtdt|_|d|dtdt |k r| |rt |ddrtd|D]} | j dkr| qtdt |k r| td t |k r| |rTt |ddrTtd |D](} | r*td | j| q*dS) Nzfinalizing poolz&helping task handler/workers to finishrz.Cannot have cache with result_hander not alivezjoining worker handlerrszterminating workerszjoining task handlerzjoining result handlerzjoining pool workersr)rrBr r`r;rrrr9rurr(r=rrrspid) rrrFrGrrZworker_handlerrZresult_handlerrrrrrrsB               zPool._terminate_poolcCs ||Sr)rrrrr __enter__szPool.__enter__cCs |dSr)rs)rexc_typeZexc_valZexc_tbrrr__exit__sz Pool.__exit__)NNrNN)N)N)NNN)r)r)NNN)NNN)N)-r r!r"r4ry staticmethodrZrwarningswarnr rr3rtrrrqrrrbrrrrrrrrrrrr classmethodrvr}rrr+r>rsr(rrrrrrrrrsx  P                - ;    5c@s@eZdZddZddZddZddd Zdd d Zd d ZdS)rcCs>||_t|_tt|_|j|_||_||_ ||j|j<dSr) r_ruZEvent_eventnext job_counterrrg _callback_error_callback)rrrrrrrrs  zApplyResult.__init__cCs |jSr)rZis_setrrrrreadyszApplyResult.readycCs|std||jS)Nz{0!r} not ready)rrmr:_successrrrr successfulszApplyResult.successfulNcCs|j|dSr)rr rrrrrr szApplyResult.waitcCs,|||st|jr"|jS|jdSr)r rrr_valuerrrrr<s  zApplyResult.getcCsZ|\|_|_|jr$|jr$||j|jr<|js<||j|j|j|j=d|_dSr) rrrrrsetrgrr_rrMrrrrrs       zApplyResult._set)N)N) r r!r"rrrr r<rrrrrrs    rc@seZdZddZddZdS)rcCshtj||||dd|_dg||_||_|dkrNd|_|j|j|j =n||t |||_dS)NrTr) rrrr _chunksize _number_leftrrrgrbool)rrrlengthrrrrrrs    zMapResult.__init__cCs|jd8_|\}}|rv|jrv||j||j|d|j<|jdkr|jrZ||j|j|j=|jd|_ nL|s|jrd|_||_|jdkr|j r| |j|j|j=|jd|_ dS)NrrF) rrrrrrgrrrr_r)rrMZsuccess_resultsuccessrPrrrr$s&          zMapResult._setN)r r!r"rrrrrrrs rc@s:eZdZddZddZd ddZeZdd Zd d ZdS) rcCsT||_tt|_tt|_|j|_t |_ d|_ d|_ i|_||j|j<dS)Nr)r_ruZ ConditionZLock_condrrrrg collectionsdeque_items_index_length _unsorted)rrrrrrBs  zIMapIterator.__init__cCs|Srrrrrr__iter__MszIMapIterator.__iter__Nc Cs|jz|j}Wnztk r|j|jkr>d|_td|j|z|j}Wn2tk r|j|jkrd|_tdt dYnXYnXW5QRX|\}}|r|S|dSr) rrpopleft IndexErrorrrr_ StopIterationr r)rrrXrr/rrrrPs&   zIMapIterator.nextc Cs|j|j|krn|j||jd7_|j|jkrb|j|j}|j||jd7_q,|jn ||j|<|j|jkr|j|j =d|_ W5QRXdSNr) rrrrrpopnotifyrrgrr_rrrrrhs        zIMapIterator._setc CsB|j2||_|j|jkr4|j|j|j=d|_W5QRXdSr)rrrrrgrr_)rrrrrrys    zIMapIterator._set_length)N) r r!r"rrr__next__rrrrrrr@s   rc@seZdZddZdS)rc CsV|jF|j||jd7_|j|j|jkrH|j|j=d|_W5QRXdSr) rrrrrrrgrr_rrrrrs    zIMapUnorderedIterator._setN)r r!r"rrrrrrsrc@sVeZdZdZeddZdddZdd Zd d Zed d Z eddZ ddZ dS)rFcOsddlm}|||S)NrrY)ZdummyrZ)r[rrOrZrrrrZs zThreadPool.ProcessNrcCst||||dSr)rr)rrrHrIrrrrszThreadPool.__init__cCs,t|_t|_|jj|_|jj|_dSr)rcrdrwrxr;r~r<rrrrrrbs   zThreadPool._setup_queuescCs |jjgSr)rfr?rrrrrtszThreadPool._get_sentinelscCsgSrrrrrrrsz ThreadPool._get_worker_sentinelscCsFz|jddqWntjk r(YnXt|D]}|dq2dS)NF)block)r<rcrrr;)rFrrrMrrrrs  zThreadPool._help_stuff_finishcCst|dSr)rr)rrrrrrrrszThreadPool._wait_for_updates)NNr) r r!r"ryrrZrrbrtrrrrrrrrs    )NrNF))__all__rrrkrcrurr%rrr$rrrZ connectionr r r r r countrrrrCrr#r*r-rSrDdictrTobjectrrZ AsyncResultrrrrrrrr sN     -=)+E__pycache__/reduction.cpython-38.pyc000064400000020032147577350250013414 0ustar00U ,a(%@sddlmZddlZddlZddlZddlZddlZddlZddlZddl m Z ddddd gZ ej d kpe ed oe ed oe ejd ZGdddejZejZd6dd Zej d kre dddg7Z ddlZd7ddddZddZddZddZGdddeZnHe dddg7Z ddlZej dkZddZddZd dZd!dZd"dZd#d$ZGd%d&d&Z ee!e j"ed'd(Z#ee!e$j%e#ee!e&j'e#d)d*Z(d+d,Z)eej*e(ej d krd-d.Z+d/d0Z,eeje+nd1d.Z+d2d0Z,eeje+Gd3d4d4ed5Z-dS)8)ABCMetaN)context send_handle recv_handleForkingPicklerregisterdumpwin32ZCMSG_LEN SCM_RIGHTSsendmsgcsJeZdZdZiZejZfddZe ddZ e d ddZ e j Z ZS) rz)Pickler subclass used by multiprocessing.cs*tj||j|_|j|jdSN)super__init___copyreg_dispatch_tablecopydispatch_tableupdate_extra_reducersselfargs __class__>/opt/alt/python38/lib64/python3.8/multiprocessing/reduction.pyr&s  zForkingPickler.__init__cCs||j|<dS)z&Register a reduce function for a type.N)r)clstypereducerrrr+szForkingPickler.registerNcCs t}|||||Sr )ioBytesIOr getbuffer)robjprotocolZbufrrrdumps0szForkingPickler.dumps)N)__name__ __module__ __qualname____doc__rcopyregrrr classmethodrr$pickleloads __classcell__rrrrr!s   cCst|||dS)z3Replacement for pickle.dump() using ForkingPickler.N)rr )r"filer#rrrr :s DupHandle duplicate steal_handleF)source_processcCs6t}|dkr|}|dkr |}t|||d|tjS)zrrrrdsc@s"eZdZdZdddZddZdS)r/zPicklable wrapper for a handle.Nc Cs\|dkrt}ttjd|}ztt|||dd|_W5t|X||_ ||_ dS)NFr) osgetpidr3r8r9r:r5r4_handle_access_pid)rr7accesspidprocrrrrjs  zDupHandle.__init__c CsZ|jtkr|jSttjd|j}z"t||jt |j dtj WSt|XdS)z1Get the handle. This should only be called once.FN) rGrCrDrEr3r8r9r:r5r4rFr;)rrJrrrrBys zDupHandle.detach)N)r%r&r'r(rrBrrrrr/hs DupFdsendfdsrecvfdsdarwincCsVtd|}tt|dg}||gtjtj|fgtrR|ddkrRt ddS)z,Send an array of fds over an AF_UNIX socket.irAz%did not receive acknowledgement of fdN) arraybyteslenr socket SOL_SOCKETr ACKNOWLEDGErA RuntimeError)sockZfdsmsgrrrrLs  c Cstd}|j|}|dt|\}}}}|s:|s:tztrJ|dt|dkrft dt||d\}} } |tj kr| tj krt| |jdkrt | | t|d|dkrtdt||dt|WSWnt tfk rYnXt dd S) z/Receive an array of fds over an AF_UNIX socket.rOrrQzreceived %d items of ancdatarrPz Len is {0:n} but msg[0] is {1!r}zInvalid data receivedN)rRitemsizeZrecvmsgrUZ CMSG_SPACEEOFErrorrWr=rTrXrVr ValueErrorZ frombytesAssertionErrorformatlist IndexError) rYsizeaZ bytes_sizerZZancdataflagsZaddrZ cmsg_levelZ cmsg_typeZ cmsg_datarrrrMs<      c Cs2t|tjtj}t||gW5QRXdSr<)rUfromfdfilenoAF_UNIX SOCK_STREAMrL)r>r7r?srrrrsc Cs<t|tjtj}t|ddW5QRSQRXdS)r@rrN)rUrerfrgrhrM)r>rirrrrscCsFt}|dk r |||Str:ddlm}||StddS)zReturn a wrapper for an fd.Nr)resource_sharerz&SCM_RIGHTS appears not to be available)rZget_spawning_popenrKZduplicate_for_childHAVE_SEND_HANDLErjr])fdZ popen_objrjrrrrKs  cCs2|jdkrt|j|jjffSt|j|jjffSdSr )__self__getattrr__func__r%mrrr_reduce_methods rsc@seZdZddZdS)_CcCsdSr r)rrrrfsz_C.fN)r%r&r'rurrrrrtsrtcCst|j|jffSr )ro __objclass__r%rqrrr_reduce_method_descriptorsrwcCst|j|j|jpiffSr )_rebuild_partialfuncrkeywords)prrr_reduce_partialsr|cCstj|f||Sr ) functoolspartial)ryrrzrrrrxsrxcCsddlm}t||ffS)Nr) DupSocket)rjr_rebuild_socket)rirrrr_reduce_sockets rcCs|Sr )rB)ZdsrrrrsrcCs"t|}t||j|j|jffSr )rKrfrfamilyrproto)ridfrrrrs cCs|}tj||||dS)N)rf)rBrU)rrrrrmrrrrsc@sdeZdZdZeZeZeZeZeZe j dkr8e Z e Z e Z n eZeZeZeZeZeZeZeZddZdS)AbstractReducerzAbstract base class for use in implementing a Reduction class suitable for use in replacing the standard reduction mechanism used in multiprocessing.r cGsNtttjttttjttttj ttt j t tt j tdSr )rrrtrursr`appendrwint__add__r}r~r|rUrrrrrrs  zAbstractReducer.__init__N)r%r&r'r(rrr rrsysplatformr1r0r/rLrMrKrsrwrxrrrrrrrrs& r) metaclass)N)NF).abcrr)r}rrCr+rUrrlr__all__rhasattrrkZPicklerrrr r3r0r1rrobjectr/rRrWrLrMrKrsrtrrurwr`rrrr|rxr~rrrrrrr sj          #    __pycache__/resource_sharer.cpython-38.pyc000064400000012227147577350250014622 0ustar00U ,a@sddlZddlZddlZddlZddlZddlmZddlmZddlm Z dgZ ej dkrxe dg7Z Gd dde Z ne d g7Z Gd d d e ZGd d d e ZeZejZdS)N)process) reduction)utilstopZwin32 DupSocketc@s eZdZdZddZddZdS)rzPicklable wrapper for a socket.cs(|fdd}t|j|_dS)Ncs|}||dSN)shareZ send_bytes)connpidr Znew_sockD/opt/alt/python38/lib64/python3.8/multiprocessing/resource_sharer.pysends z DupSocket.__init__..send)dup_resource_sharerregisterclose_id)selfZsockrr r r__init__s zDupSocket.__init__c Cs6t|j }|}t|W5QRSQRXdS)z1Get the socket. This should only be called once.N)rget_connectionrZ recv_bytessocketZ fromshare)rr r r r rdetach$szDupSocket.detachN__name__ __module__ __qualname____doc__rrr r r rrsDupFdc@s eZdZdZddZddZdS)rz-Wrapper for fd which can be used at any time.cs4t|fdd}fdd}t|||_dS)Ncst||dSr)rZ send_handle)r r Znew_fdr rr1szDupFd.__init__..sendcstdSr)osrr r r rr3szDupFd.__init__..close)r!rrrr)rfdrrr r rr/s   zDupFd.__init__c Cs.t|j}t|W5QRSQRXdS)z-Get the fd. This should only be called once.N)rrrrZ recv_handle)rr r r rr7sz DupFd.detachNrr r r rr-sc@sNeZdZdZddZddZeddZdd d Zd d Z d dZ ddZ dS)_ResourceSharerz.Manager for resources using background thread.cCs@d|_i|_g|_t|_d|_d|_d|_t |t j dS)Nr) _key_cache _old_locks threadingLock_lock _listener_address_threadrZregister_after_forkr# _afterfork)rr r rr?s z_ResourceSharer.__init__c CsZ|jJ|jdkr||jd7_||f|j|j<|j|jfW5QRSQRXdS)z+Register resource, returning an identifier.Nr)r)r+_startr$r%)rrrr r rrIs  z_ResourceSharer.registercCs<ddlm}|\}}||tjd}||tf|S)z s       `__pycache__/popen_fork.cpython-38.opt-1.pyc000064400000005030147577350250014522 0ustar00U ,a @s6ddlZddlZddlmZdgZGdddeZdS)N)utilPopenc@s`eZdZdZddZddZejfddZdd d Z d d Z d dZ ddZ ddZ ddZdS)rforkcCs"td|_d|_||dSN)rZ_flush_std_streams returncode finalizer_launch)self process_objr ?/opt/alt/python38/lib64/python3.8/multiprocessing/popen_fork.py__init__szPopen.__init__cCs|Srr )r fdr r r duplicate_for_childszPopen.duplicate_for_childc Cs|jdkrzzt|j|\}}Wn(tk rH}z WYdSd}~XYnX||jkrzt|rnt| |_n t||_|jSr)roswaitpidpidOSError WIFSIGNALEDWTERMSIG WEXITSTATUS)r flagrstser r r polls    z Popen.pollNcCsN|jdkrH|dk r0ddlm}||jg|s0dS||dkrBtjndS|jS)Nr)waitg)rZmultiprocessing.connectionrsentinelrrWNOHANG)r timeoutrr r r r(s  z Popen.waitcCsZ|jdkrVzt|j|Wn8tk r0Yn&tk rT|jdddkrPYnXdS)Ng?)r)rrkillrProcessLookupErrorrr)r Zsigr r r _send_signal2s zPopen._send_signalcCs|tjdSr)r"signalSIGTERMr r r r terminate<szPopen.terminatecCs|tjdSr)r"r#SIGKILLr%r r r r ?sz Popen.killc Csd}t\}}t\}}t|_|jdkrdz$t|t||j|d}W5t|Xn0t|t|t|tj ||f|_ ||_ dS)Nrr)Zparent_sentinel) rpiperr_exitclose _bootstraprZFinalizeZ close_fdsrr)r r codeZparent_rZchild_wZchild_rZparent_wr r r r Bs          z Popen._launchcCs|jdk r|dSr)rr%r r r r*Us z Popen.close)N)__name__ __module__ __qualname__methodrrrrrrr"r&r r r*r r r r r s  )rr#r__all__objectrr r r r s __pycache__/synchronize.cpython-38.pyc000064400000026052147577350250014003 0ustar00U ,aZ-@s,ddddddgZddlZddlZddlZddlZddlZdd lmZdd lmZdd lm Z zdd lm Z m Z Wne k re d YnXe ed\ZZej jZGdddeZ Gddde ZGdddeZGddde ZGddde ZGdddeZGdddeZGdddejZdS)LockRLock SemaphoreBoundedSemaphore ConditionEventN)context)process)util)SemLock sem_unlinkzThis platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770.c@s\eZdZeZddZeddZddZ ddZ d d Z d d Z d dZ eddZdS)r c Cs|dkrtj}|}tjdkp*|dk}tdD]>}z t|||| |}|_ Wnt k rlYq4Xq|q4t dt d|j|tjdkrdd} t || |j jdk rdd lm} | |j jd t j|tj|j jfd d dS) Nwin32forkdzcannot find name for semaphorezcreated semlock with handle %scSs|jdSN)_semlock _after_fork)objr@/opt/alt/python38/lib64/python3.8/multiprocessing/synchronize.pyrGsz%SemLock.__init__.._after_forkr)register semaphorer)Z exitpriority)r Z_default_contextZ get_contextZget_start_methodsysplatformrange_multiprocessingr _make_namerFileExistsErrorr debughandle _make_methodsZregister_after_forknameresource_trackerrZFinalize_cleanup) selfkindvaluemaxvaluectxr#Z unlink_nowislrrrrr__init__2s8      zSemLock.__init__cCs"ddlm}t|||ddS)Nr) unregisterr)r$r.r )r#r.rrrr%Ts zSemLock._cleanupcCs|jj|_|jj|_dSr)racquirereleaser&rrrr"Zs zSemLock._make_methodscCs |jSr)r __enter__r1rrrr2^szSemLock.__enter__cGs |jj|Sr)r__exit__r&argsrrrr3aszSemLock.__exit__cCsDt||j}tjdkr,t|j}n|j}||j|j |j fS)Nr) r assert_spawningrrrZget_spawning_popenZduplicate_for_childr!r'r)r#)r&r,hrrr __getstate__ds   zSemLock.__getstate__cCs,tjj||_td|d|dS)Nz recreated blocker with handle %rr)rr Z_rebuildrr r r"r&staterrr __setstate__mszSemLock.__setstate__cCsdtjdttjfS)Nz%s-%sZ semprefix)r current_processZ_confignextr _randrrrrrrszSemLock._make_nameN)__name__ __module__ __qualname__tempfileZ_RandomNameSequencer>r- staticmethodr%r"r2r3r8r;rrrrrr .s"  r c@s&eZdZd ddZddZddZdS) rrcCstj|t|t|ddSNr*)r r- SEMAPHORE SEM_VALUE_MAXr&r(r*rrrr-}szSemaphore.__init__cCs |jSr)r _get_valuer1rrr get_valueszSemaphore.get_valuecCs8z|j}Wntk r&d}YnXd|jj|fS)Nunknownz<%s(value=%s)>)rrI Exception __class__r?r&r(rrr__repr__s  zSemaphore.__repr__N)r)r?r@rAr-rJrOrrrrr{s c@seZdZdddZddZdS)rrcCstj|t|||ddSrDr r-rFrHrrrr-szBoundedSemaphore.__init__cCs>z|j}Wntk r&d}YnXd|jj||jjfS)NrKz<%s(value=%s, maxvalue=%s)>)rrIrLrMr?r)rNrrrrOs zBoundedSemaphore.__repr__N)rr?r@rAr-rOrrrrrs c@seZdZddZddZdS)rcCstj|tdd|ddSNrrErPr&r*rrrr-sz Lock.__init__cCszf|jr8tj}tjdkrd|dtj7}n,|jdkrLd}n|jdkr`d}nd}Wnt k r~d}YnXd |j j |fS) N MainThread|rNonerSomeOtherThreadSomeOtherProcessrKz<%s(owner=%s)>) r_is_miner r<r# threadingcurrent_threadrI_countrLrMr?)r&r#rrrrOs   z Lock.__repr__NrQrrrrrsc@seZdZddZddZdS)rcCstj|tdd|ddSrR)r r-RECURSIVE_MUTEXrSrrrr-szRLock.__init__cCsz||jrBtj}tjdkr6|dtj7}|j}n8|jdkrZd\}}n |jdkrrd\}}nd\}}Wnt k rd\}}YnXd |j j ||fS) NrTrUr)rVrr)rWnonzero)rXr^)rKrK <%s(%s, %s)>) rrYr r<r#rZr[r\rIrLrMr?)r&r#countrrrrOs      zRLock.__repr__NrQrrrrrsc@sleZdZdddZddZddZdd Zd d Zd d ZddZ dddZ dddZ ddZ dddZ dS)rNcCs>|p ||_|d|_|d|_|d|_|dSNr)r_lockr_sleeping_count _woken_count_wait_semaphorer")r&lockr*rrrr-s    zCondition.__init__cCst||j|j|j|jfSr)r r6rbrcrdrer1rrrr8s  zCondition.__getstate__cCs |\|_|_|_|_|dSr)rbrcrdrer"r9rrrr;s  zCondition.__setstate__cCs |jSr)rbr2r1rrrr2szCondition.__enter__cGs |jj|Sr)rbr3r4rrrr3szCondition.__exit__cCs|jj|_|jj|_dSr)rbr/r0r1rrrr"s zCondition._make_methodscCsJz|jj|jj}Wntk r4d}YnXd|jj|j|fS)NrKr_)rcrrIrdrLrMr?rb)r&Z num_waitersrrrrOs   zCondition.__repr__c Cs~|jjstd|j|jj}t|D]}|jq2z|j d|WS|jt|D]}|j qhXdS)Nz,must acquire() condition before using wait()T) rbrrYAssertionErrorrcr0r\rrdr/re)r&timeoutr`r+rrrwaits      zCondition.waitrcCs|jjstd|jdr(td|jdrN|jd}|s(tdq(d}||krz|jdrz|j|d7}qR|rt |D]}|jq|jdrqdS)Nzlock is not ownedFznotify: Bug in sleeping_count.acquire- res should not be Falserr) rbrrYrgrer/rdrcr0r)r&nresZsleepersr+rrrnotifys$       zCondition.notifycCs|jtjddS)N)rj)rlrmaxsizer1rrr notify_all(szCondition.notify_allcCsd|}|r|S|dk r$t|}nd}d}|s`|dk rN|t}|dkrNq`|||}q,|Sra)time monotonicri)r&Z predicaterhresultZendtimeZwaittimerrrwait_for+s  zCondition.wait_for)N)N)r)N)r?r@rAr-r8r;r2r3r"rOrirlrnrrrrrrrs   c@s6eZdZddZddZddZddZd d d Zd S) rcCs |||_|d|_dSra)rr_condr_flagrSrrrr-CszEvent.__init__c CsD|j4|jdr,|jW5QRdSW5QRdSQRXdSNFT)rsrtr/r0r1rrris_setGs   z Event.is_setc Cs6|j&|jd|j|jW5QRXdSNF)rsrtr/r0rnr1rrrsetNs  z Event.setc Cs"|j|jdW5QRXdSrw)rsrtr/r1rrrclearTsz Event.clearNc Csh|jX|jdr |jn |j||jdrP|jW5QRdSW5QRdSQRXdSru)rsrtr/r0ri)r&rhrrrriXs     z Event.wait)N)r?r@rAr-rvrxryrirrrrrAs c@sZeZdZdddZddZddZedd Zejd d Zed d Z e jd d Z dS)BarrierNc CsRddl}ddlm}||dd}|}||||||fd|_d|_dS)Nrr) BufferWrapperr+r)structheapr{Zcalcsizerr;_stater\) r&Zpartiesactionrhr*r|r{wrapperZcondrrrr-js zBarrier.__init__cCs.|\|_|_|_|_|_|jd|_dS)Nr+)_parties_action_timeoutrs_wrapperZcreate_memoryviewcast_arrayr9rrrr;ss zBarrier.__setstate__cCs|j|j|j|j|jfSr)rrrrsrr1rrrr8xs zBarrier.__getstate__cCs |jdSrarr1rrrr~|szBarrier._statecCs||jd<dSrarrNrrrr~scCs |jdSNrrr1rrrr\szBarrier._countcCs||jd<dSrrrNrrrr\s)NN) r?r@rAr-r;r8propertyr~setterr\rrrrrzhs    rz)__all__rZrrBrror r r r r ImportErrorlistrr]rFrGobjectrrrrrrrzrrrr s8    Mo'__pycache__/queues.cpython-38.opt-1.pyc000064400000022426147577350250013677 0ustar00U ,a-@sdddgZddlZddlZddlZddlZddlZddlZddlZddlm Z m Z ddl Z ddl m Z ddl mZejjZdd lmZmZmZmZmZGd ddeZeZGd ddeZGd ddeZdS) Queue SimpleQueue JoinableQueueN)EmptyFull) connection)context)debuginfoFinalizeregister_after_fork is_exitingc@seZdZd*ddZddZddZdd Zd+d d Zd,ddZddZ ddZ ddZ ddZ ddZ ddZddZddZd d!Zed"d#Zed$d%Zed&d'Zed(d)Zd S)-rrcCs|dkrddlm}||_tjdd\|_|_||_t |_ t j dkrTd|_n ||_|||_d|_|t j dkrt|tjdS)Nrr) SEM_VALUE_MAXFZduplexwin32)Z synchronizer_maxsizerPipe_reader_writerLock_rlockosgetpid_opidsysplatform_wlockZBoundedSemaphore_sem _ignore_epipe _after_forkr rselfmaxsizectxr%;/opt/alt/python38/lib64/python3.8/multiprocessing/queues.py__init__$s       zQueue.__init__cCs.t||j|j|j|j|j|j|j|j fSN) r assert_spawningrrrrrrrrr"r%r%r& __getstate__9s zQueue.__getstate__c Cs0|\|_|_|_|_|_|_|_|_|dSr() rrrrrrrrr r"stater%r%r& __setstate__>szQueue.__setstate__cCsbtdtt|_t|_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_pollr*r%r%r&r Cs   zQueue._after_forkTNc Csf|jrtd|d|j||s(t|j.|jdkrB||j ||j W5QRXdSNzQueue z is closed) r8 ValueErrorracquirerr1r5 _start_threadr4appendnotifyr"objblocktimeoutr%r%r&putPs  z Queue.putc Cs|jrtd|d|rH|dkrH|j|}W5QRX|jnr|rXt|}|j||sjt zB|r|t}| |st n | st |}|jW5|jXt |Sr@) r8rArr=rreleasetime monotonicrBrr?_ForkingPicklerloads)r"rHrIresZdeadliner%r%r&get\s*      z Queue.getcCs|j|jjSr()rr_semlockZ _get_valuer*r%r%r&qsizevsz Queue.qsizecCs | Sr(r?r*r%r%r&emptyzsz Queue.emptycCs |jjSr()rrR_is_zeror*r%r%r&full}sz Queue.fullcCs |dSNF)rQr*r%r%r& get_nowaitszQueue.get_nowaitcCs ||dSrX)rJr"rGr%r%r& put_nowaitszQueue.put_nowaitcCs2d|_z|jW5|j}|r,d|_|XdS)NT)r8r9rclose)r"r\r%r%r&r\sz Queue.closecCstd|jr|dS)NzQueue.join_thread())r r6r*r%r%r& join_threadszQueue.join_threadcCs6tdd|_z|jWntk r0YnXdS)NzQueue.cancel_join_thread()T)r r7r6ZcancelAttributeErrorr*r%r%r&cancel_join_threads zQueue.cancel_join_threadc Cstd|jtjtj|j|j|j|j |j j |j |j |jfdd|_d|j_td|jtd|jst|jtjt|jgdd|_t|tj|j|jgd d|_dS) NzQueue._start_thread()ZQueueFeederThread)targetargsnameTzdoing self._thread.start()z... done self._thread.start())Z exitpriority )r r4clearr/ZThreadr_feedr1r;rrr\r_on_queue_feeder_errorrr5Zdaemonstartr7r _finalize_joinweakrefrefr6_finalize_closer9r*r%r%r&rCs<     zQueue._start_threadcCs4td|}|dk r(|tdntddS)Nzjoining queue threadz... queue thread joinedz... queue thread already dead)r join)Ztwrthreadr%r%r&ris  zQueue._finalize_joinc Cs.td||t|W5QRXdS)Nztelling queue thread to quit)r rD _sentinelrE)buffernotemptyr%r%r&rls zQueue._finalize_closec CsXtd|j}|j} |j} |j} t} tjdkr<|j} |j}nd} z|z|sT| W5| Xzb| }|| krtd|WWdSt |}| dkr||qb| z ||W5|XqbWnt k rYnXWq@t k rP}zV|rt |ddt jkrWY6dStr.td|WYdS||||W5d}~XYq@Xq@dS)Nz$starting thread to feed data to piperz%feeder thread got sentinel -- exitingerrnorzerror in queue thread: %s)r rBrKwaitpopleftrorrrNdumps IndexError ExceptiongetattrrrZEPIPErr )rprqr:Z writelockr\Z ignore_epipeonerrorZ queue_semZnacquireZnreleaseZnwaitZbpopleftsentinelZwacquireZwreleaserGer%r%r&rfsN         z Queue._feedcCsddl}|dS)z Private API hook called when feeding data in the background thread raises an exception. For overriding by concurrent.futures. rN) traceback print_exc)r{rGr|r%r%r&rg szQueue._on_queue_feeder_error)r)TN)TN)__name__ __module__ __qualname__r'r+r.r rJrQrSrUrWrYr[r\r]r_rC staticmethodrirlrfrgr%r%r%r&r"s.       =c@s@eZdZdddZddZddZdd d Zd d ZddZd S)rrcCs*tj|||d|d|_||_dS)N)r$r)rr'Z Semaphore_unfinished_tasksr0_condr!r%r%r&r'#s zJoinableQueue.__init__cCst||j|jfSr()rr+rrr*r%r%r&r+(szJoinableQueue.__getstate__cCs,t||dd|dd\|_|_dS)N)rr.rrr,r%r%r&r.+szJoinableQueue.__setstate__TNc Cs|jrtd|d|j||s(t|jJ|j8|jdkrJ||j ||j |j W5QRXW5QRXdSr@)r8rArrBrr1rr5rCr4rDrrKrErFr%r%r&rJ/s   zJoinableQueue.putc Cs@|j0|jdstd|jjr2|jW5QRXdS)NFz!task_done() called too many times)rrrBrArRrVZ notify_allr*r%r%r& task_done<s   zJoinableQueue.task_donec Cs,|j|jjs|jW5QRXdSr()rrrRrVrsr*r%r%r&rmCs zJoinableQueue.join)r)TN) r~rrr'r+r.rJrrmr%r%r%r&r!s   c@s<eZdZddZddZddZddZd d Zd d Zd S)rcCsHtjdd\|_|_||_|jj|_tj dkr:d|_ n ||_ dS)NFrr) rrrrrrr>r?rrr)r"r$r%r%r&r'Ns    zSimpleQueue.__init__cCs | Sr(rTr*r%r%r&rUWszSimpleQueue.emptycCst||j|j|j|jfSr()r r)rrrrr*r%r%r&r+Zs zSimpleQueue.__getstate__cCs"|\|_|_|_|_|jj|_dSr()rrrrr>r?r,r%r%r&r.^szSimpleQueue.__setstate__c Cs&|j|j}W5QRXt|Sr()rrr<rNrO)r"rPr%r%r&rQbszSimpleQueue.getc CsDt|}|jdkr"|j|n|j|j|W5QRXdSr()rNrurrr:rZr%r%r&rJhs   zSimpleQueue.putN) r~rrr'rUr+r.rQrJr%r%r%r&rLs  )__all__rrr/r2rLrjrrZqueuerrZ_multiprocessingrr Z reductionZForkingPicklerrNutilr r r r robjectrrorrr%r%r%r& s$   v +__pycache__/resource_sharer.cpython-38.opt-1.pyc000064400000012134147577350250015556 0ustar00U ,a@sddlZddlZddlZddlZddlZddlmZddlmZddlm Z dgZ ej dkrxe dg7Z Gd dde Z ne d g7Z Gd d d e ZGd d d e ZeZejZdS)N)process) reduction)utilstopZwin32 DupSocketc@s eZdZdZddZddZdS)rzPicklable wrapper for a socket.cs(|fdd}t|j|_dS)Ncs|}||dSN)shareZ send_bytes)connpidr Znew_sockD/opt/alt/python38/lib64/python3.8/multiprocessing/resource_sharer.pysends z DupSocket.__init__..send)dup_resource_sharerregisterclose_id)selfZsockrr r r__init__s zDupSocket.__init__c Cs6t|j }|}t|W5QRSQRXdS)z1Get the socket. This should only be called once.N)rget_connectionrZ recv_bytessocketZ fromshare)rr r r r rdetach$szDupSocket.detachN__name__ __module__ __qualname____doc__rrr r r rrsDupFdc@s eZdZdZddZddZdS)rz-Wrapper for fd which can be used at any time.cs4t|fdd}fdd}t|||_dS)Ncst||dSr)rZ send_handle)r r Znew_fdr rr1szDupFd.__init__..sendcstdSr)osrr r r rr3szDupFd.__init__..close)r!rrrr)rfdrrr r rr/s   zDupFd.__init__c Cs.t|j}t|W5QRSQRXdS)z-Get the fd. This should only be called once.N)rrrrZ recv_handle)rr r r rr7sz DupFd.detachNrr r r rr-sc@sNeZdZdZddZddZeddZdd d Zd d Z d dZ ddZ dS)_ResourceSharerz.Manager for resources using background thread.cCs@d|_i|_g|_t|_d|_d|_d|_t |t j dS)Nr) _key_cache _old_locks threadingLock_lock _listener_address_threadrZregister_after_forkr# _afterfork)rr r rr?s z_ResourceSharer.__init__c CsZ|jJ|jdkr||jd7_||f|j|j<|j|jfW5QRSQRXdS)z+Register resource, returning an identifier.Nr)r)r+_startr$r%)rrrr r rrIs  z_ResourceSharer.registercCs<ddlm}|\}}||tjd}||tf|S)z s       `__pycache__/reduction.cpython-38.opt-2.pyc000064400000016466147577350250014374 0ustar00U ,a(%@sddlmZddlZddlZddlZddlZddlZddlZddlZddl m Z ddddd gZ ej d kpe ed oe ed oe ejd ZGdddejZejZd6dd Zej d kre dddg7Z ddlZd7ddddZddZddZddZGdddeZnHe dddg7Z ddlZej dkZddZddZd dZd!dZd"dZd#d$ZGd%d&d&Z ee!e j"ed'd(Z#ee!e$j%e#ee!e&j'e#d)d*Z(d+d,Z)eej*e(ej d krd-d.Z+d/d0Z,eeje+nd1d.Z+d2d0Z,eeje+Gd3d4d4ed5Z-dS)8)ABCMetaN)context send_handle recv_handleForkingPicklerregisterdumpwin32ZCMSG_LEN SCM_RIGHTSsendmsgcsFeZdZiZejZfddZeddZ edddZ e j Z Z S) rcs*tj||j|_|j|jdSN)super__init___copyreg_dispatch_tablecopydispatch_tableupdate_extra_reducersselfargs __class__>/opt/alt/python38/lib64/python3.8/multiprocessing/reduction.pyr&s  zForkingPickler.__init__cCs||j|<dSr )r)clstypereducerrrr+szForkingPickler.registerNcCs t}|||||Sr )ioBytesIOr getbuffer)robjprotocolZbufrrrdumps0szForkingPickler.dumps)N)__name__ __module__ __qualname__rcopyregrrr classmethodrr$pickleloads __classcell__rrrrr!s   cCst|||dSr )rr )r"filer#rrrr :s DupHandle duplicate steal_handleF)source_processcCs6t}|dkr|}|dkr |}t|||d|tjS)Nr)_winapiGetCurrentProcessDuplicateHandleDUPLICATE_SAME_ACCESS)handleZtarget_processZ inheritabler1Zcurrent_processrrrr/Gsc CsFttjd|}z$t||tddtjtjBWSt|XdSNFr)r2 OpenProcessPROCESS_DUP_HANDLE CloseHandler4r3r5DUPLICATE_CLOSE_SOURCE)Z source_pidr6Zsource_process_handlerrrr0Ss cCst|tj|}||dSr )r.r2r5send)connr6destination_pidZdhrrrr_scCs |Sr )recvdetach)r=rrrrdsc@seZdZdddZddZdS)r.Nc Cs\|dkrt}ttjd|}ztt|||dd|_W5t|X||_ ||_ dSr7) osgetpidr2r8r9r:r4r3_handle_access_pid)rr6accesspidprocrrrrjs  zDupHandle.__init__c CsZ|jtkr|jSttjd|j}z"t||jt |j dtj WSt|XdS)NF) rErArBrCr2r8r9r:r4r3rDr;)rrHrrrr@ys zDupHandle.detach)N)r%r&r'rr@rrrrr.hs DupFdsendfdsrecvfdsdarwincCsVtd|}tt|dg}||gtjtj|fgtrR|ddkrRt ddS)NirAz%did not receive acknowledgement of fd) arraybyteslenr socket SOL_SOCKETr ACKNOWLEDGEr? RuntimeError)sockZfdsmsgrrrrJs  c Cstd}|j|}|dt|\}}}}|s:|s:tztrJ|dt|dkrft dt||d\}} } |tj kr| tj krt| |jdkrt | | t|d|dkrtdt||dt|WSWnt tfk rYnXt ddS) NrMrrOzreceived %d items of ancdatarrNz Len is {0:n} but msg[0] is {1!r}zInvalid data received)rPitemsizeZrecvmsgrSZ CMSG_SPACEEOFErrorrUr<rRrVrTr ValueErrorZ frombytesAssertionErrorformatlist IndexError) rWsizeaZ bytes_sizerXZancdataflagsZaddrZ cmsg_levelZ cmsg_typeZ cmsg_datarrrrKs<      c Cs2t|tjtj}t||gW5QRXdSr )rSfromfdfilenoAF_UNIX SOCK_STREAMrJ)r=r6r>srrrrsc Cs<t|tjtj}t|ddW5QRSQRXdS)Nrr)rSrcrdrerfrK)r=rgrrrrscCsFt}|dk r |||Str:ddlm}||StddS)Nr)resource_sharerz&SCM_RIGHTS appears not to be available)rZget_spawning_popenrIZduplicate_for_childHAVE_SEND_HANDLErhr[)fdZ popen_objrhrrrrIs  cCs2|jdkrt|j|jjffSt|j|jjffSdSr )__self__getattrr__func__r%mrrr_reduce_methods rqc@seZdZddZdS)_CcCsdSr r)rrrrfsz_C.fN)r%r&r'rsrrrrrrsrrcCst|j|jffSr )rm __objclass__r%rorrr_reduce_method_descriptorsrucCst|j|j|jpiffSr )_rebuild_partialfuncrkeywords)prrr_reduce_partialsrzcCstj|f||Sr ) functoolspartial)rwrrxrrrrvsrvcCsddlm}t||ffS)Nr) DupSocket)rhr}_rebuild_socket)rgr}rrr_reduce_sockets rcCs|Sr )r@)Zdsrrrr~sr~cCs"t|}t||j|j|jffSr )rIrdr~familyrproto)rgdfrrrrs cCs|}tj||||dS)N)rd)r@rS)rrrrrkrrrr~sc@s`eZdZeZeZeZeZeZej dkr4e Z e Z e Z n e Z eZeZeZeZeZeZeZddZdS)AbstractReducerr cGsNtttjttttjttttj ttt j t tt j tdSr )rrrrrsrqr^appendruint__add__r{r|rzrSrrrrrrs  zAbstractReducer.__init__N)r%r&r'rrr rrsysplatformr0r/r.rJrKrIrqrurvrr~rrrrrrs$ r) metaclass)N)NF).abcrr(r{rrAr*rSrrjr__all__rhasattrriZPicklerrrr r2r/r0rrobjectr.rPrUrJrKrIrqrrrrsrur^rrrrzrvr|rr~rrrrr sj          #    __pycache__/heap.cpython-38.pyc000064400000016744147577350250012354 0ustar00U ,aj-@sddlZddlmZddlZddlZddlZddlZddlZddlm Z m Z ddl m Z dgZ ejdkrddlZGdd d eZn,Gd d d eZd d Zd dZe eeGdddeZGdddeZdS)N) defaultdict) reductionassert_spawning)util BufferWrapperZwin32c@s0eZdZdZeZddZddZddZ dS) ArenazL A shared memory area backed by anonymous memory (Windows). cCsx||_tdD]B}dtt|jf}tjd||d}tdkrHqZ| qt d||_ ||_ |j|j f|_ dS)Ndz pym-%d-%sZtagnamerzCannot find name for new mmap)sizerangeosgetpidnext_randmmap_winapiZ GetLastErrorcloseFileExistsErrornamebuffer_state)selfr irZbufr9/opt/alt/python38/lib64/python3.8/multiprocessing/heap.py__init__&s   Arena.__init__cCst||jSN)rr)rrrr __getstate__5szArena.__getstate__cCs,|\|_|_|_tjd|j|jd|_dS)Nr r )r rrrr)rstaterrr __setstate__9szArena.__setstate__N) __name__ __module__ __qualname____doc__tempfileZ_RandomNameSequencerrr r"rrrrrs rc@s8eZdZdZejdkrdgZngZd ddZddZd S) rzJ A shared memory area backed by a temporary file (POSIX). Zlinuxz/dev/shmr cCsx||_||_|dkrbtjdt||d\|_}t|t |tj |jft |j|t |j|j|_ dS)Nr zpym-%d-)prefixdir)r fdr'Zmkstemprr _choose_dirunlinkrFinalizer ftruncaterr)rr r*rrrrrMs   rcCs6|jD]&}t|}|j|j|kr|SqtSr)_dir_candidatesrstatvfsf_bavailf_frsizerZ get_temp_dir)rr dstrrrr+[s    zArena._choose_dirN)r ) r#r$r%r&sysplatformr/rr+rrrrrCs   cCs(|jdkrtdt|jt|jffS)Nr zDArena is unpicklable because forking was enabled when it was created)r* ValueError rebuild_arenar rZDupFd)arrr reduce_arenads r:cCst||Sr)rdetach)r Zdupfdrrrr8jsr8c@szeZdZdZdZdZejfddZe ddZ ddZ d d Z d d Z d dZddZddZddZddZddZdS)Heapi@cCsXt|_t|_||_g|_i|_i|_ i|_ t t |_ g|_g|_d|_d|_dSNr)rr_lastpid threadingZLock_lock_size_lengths _len_to_seq_start_to_block_stop_to_blockrset_allocated_blocks_arenas_pending_free_blocks _n_mallocs_n_frees)rr rrrr{s   z Heap.__init__cCs|d}|||@S)Nrr)nZ alignmentmaskrrr_roundupsz Heap._roundupcCsZ|t|j|tj}|j|jkr0|jd9_td|t|}|j ||d|fS)Nz"allocating a new mmap of length %dr) rOmaxrBrPAGESIZE_DOUBLE_ARENA_SIZE_UNTILrinforrIappend)rr lengtharenarrr _new_arenas   zHeap._new_arenacCs|j}||jkrdS|j|}|r(t|j|df=|j||f=|j||j |}||d|f|s~|j |=|j |dSr>) r _DISCARD_FREE_SPACE_LARGER_THANrHpopAssertionErrorrErFrIremoverDrC)rrWrVblocksseqrrr_discard_arenas      zHeap._discard_arenac Cs|t|j|}|t|jkr&||S|j|}|j|}|}|sV|j|=|j|=|\}}}|j||f=|j||f=|Sr) bisectZ bisect_leftrClenrXrDrZrErF) rr rrVr^blockrWstartstoprrr_mallocs      z Heap._mallocc Cs|\}}}z|j||f}Wntk r0YnX||\}}z|j||f}Wntk rfYnX||\}}|||f}||}z|j||Wn.tk r|g|j|<t|j|YnX||j||f<||j||f<dSr) rFKeyError_absorbrErDrUr`ZinsortrC) rrbrWrcrdZ prev_block_Z next_blockrVrrr_add_free_blocks(   zHeap._add_free_blockcCs^|\}}}|j||f=|j||f=||}|j|}|||sV|j|=|j|||fSr)rErFrDr\rC)rrbrWrcrdrVr^rrrrgs      z Heap._absorbcCs4|\}}}|j|}|||f|s0||dSr)rHr\r_)rrbrWrcrdr]rrr_remove_allocated_blocks   zHeap._remove_allocated_blockcCsBz|j}Wntk r&Yq>YnX||||qdSr)rJrZ IndexErrorrirjrrbrrr_free_pending_blockss   zHeap._free_pending_blockscCs~t|jkr$tdt|j|jds>|j|n s&   $! P__pycache__/popen_spawn_win32.cpython-38.opt-2.pyc000064400000006436147577350250015747 0ustar00U ,a@sddlZddlZddlZddlZddlZddlmZmZmZddl m Z ddl m Z dgZ dZ ejdkoreed d Zejd Zd d Zeejej ZddZGdddeZdS)N) reductionget_spawning_popenset_spawning_popen)spawn)utilPopeniZwin32frozenFzpythonservice.execCs ||kptj|tj|kSN)ospathnormcase)Zp1Zp2rF/opt/alt/python38/lib64/python3.8/multiprocessing/popen_spawn_win32.py_path_eqsrcGs|D]}t|qdSr )_winapi CloseHandle)Zhandleshandlerrr_close_handlessrc@sFeZdZdZddZddZdddZd d Zd d ZeZ d dZ dS)rrc CsTt|j}tdd\}}t|d}tjt |d}d dd|D}t }t rt |tjrtj}tj}tj|d<nd}t|ddd } z0t||ddd d|dd \} } } } t| Wnt|YnX| |_d|_| |_t| |_t|t|jt|f|_t|zt !|| t !|| W5tdXW5QRXdS) Nr)Z parent_pidZ pipe_handle css|]}d|VqdS)z"%s"Nr).0xrrr 9sz!Popen.__init__..__PYVENV_LAUNCHER__wbT)closefdF)"rZget_preparation_data_namerZ CreatePipemsvcrtZopen_osfhandleZget_command_liner getpidjoinZget_executableWINENVrsys executable_base_executableenvironcopyopenZ CreateProcessrpid returncode_handleintsentinelrZFinalizer finalizerrrdump)selfZ process_objZ prep_dataZrhandleZwhandleZwfdcmdZ python_exeenvZto_childZhpZhtr'tidrrr__init__,sT          zPopen.__init__cCst||jSr )rZ duplicater+)r.rrrrduplicate_for_childaszPopen.duplicate_for_childNcCst|jdkrn|dkrtj}ntdt|dd}tt|j|}|tjkrnt|j}|t krht j }||_|jS)Nrig?) r(rZINFINITEmaxr*ZWaitForSingleObjectr)Z WAIT_OBJECT_0ZGetExitCodeProcess TERMINATEsignalSIGTERM)r.timeoutZmsecsrescoderrrwaites   z Popen.waitcCs |jddS)Nrr8)r;r.rrrpollusz Popen.pollcCsL|jdkrHztt|jtWn&tk rF|jdddkrBYnXdS)Ng?r<)r(rZTerminateProcessr*r)r5OSErrorr;r=rrr terminatexs  zPopen.terminatecCs |dSr )r,r=rrrclosesz Popen.close)N) __name__ __module__ __qualname__methodr2r3r;r>r@killrArrrrr&s5 )r rr6r!rcontextrrrrr__all__r5platformgetattrZWINEXEr"lowerendswithZ WINSERVICErr#r robjectrrrrrs   __pycache__/popen_spawn_posix.cpython-38.pyc000064400000004257147577350250015206 0ustar00U ,a@spddlZddlZddlmZmZddlmZddlmZddlmZdgZ Gdd d e Z Gd ddej Z dS) N) reductionset_spawning_popen) popen_fork)spawn)utilPopenc@seZdZddZddZdS)_DupFdcCs ||_dSNfdselfr rF/opt/alt/python38/lib64/python3.8/multiprocessing/popen_spawn_posix.py__init__sz_DupFd.__init__cCs|jSr r )rrrrdetachsz _DupFd.detachN)__name__ __module__ __qualname__rrrrrrr sr cs4eZdZdZeZfddZddZddZZ S)rrcsg|_t|dSr )_fdssuperr)r process_obj __class__rrrszPopen.__init__cCs|j||Sr )rappendr rrrduplicate_for_child"s zPopen.duplicate_for_childc CsXddlm}|}|j|t|j}t }t |zt ||t ||W5t dXd}}}} z~t\}}t\}} tj||d} |j||gt t| |j|_||_t| ddd} | |W5QRXW5g} || fD]} | dk r| | qt |t j| |_||fD]} | dk r6t| q6XdS)Nr)resource_tracker) tracker_fdZ pipe_handlewbF)closefd)rZgetfdrrrZget_preparation_data_nameioBytesIOrrdumprZFinalizeZ close_fds finalizerosclosepipeZget_command_lineextendZspawnv_passfdsZget_executablepidsentinelopenwrite getbuffer)rrrrZ prep_datafpZparent_rZchild_wZchild_rZparent_wZ fds_to_closer cmdfrrr_launch&sB            z Popen._launch) rrrmethodr ZDupFdrrr3 __classcell__rrrrrs  ) r#r'contextrrr!rrr__all__objectr rrrrrs    __pycache__/popen_spawn_posix.cpython-38.opt-1.pyc000064400000004257147577350250016145 0ustar00U ,a@spddlZddlZddlmZmZddlmZddlmZddlmZdgZ Gdd d e Z Gd ddej Z dS) N) reductionset_spawning_popen) popen_fork)spawn)utilPopenc@seZdZddZddZdS)_DupFdcCs ||_dSNfdselfr rF/opt/alt/python38/lib64/python3.8/multiprocessing/popen_spawn_posix.py__init__sz_DupFd.__init__cCs|jSr r )rrrrdetachsz _DupFd.detachN)__name__ __module__ __qualname__rrrrrrr sr cs4eZdZdZeZfddZddZddZZ S)rrcsg|_t|dSr )_fdssuperr)r process_obj __class__rrrszPopen.__init__cCs|j||Sr )rappendr rrrduplicate_for_child"s zPopen.duplicate_for_childc CsXddlm}|}|j|t|j}t }t |zt ||t ||W5t dXd}}}} z~t\}}t\}} tj||d} |j||gt t| |j|_||_t| ddd} | |W5QRXW5g} || fD]} | dk r| | qt |t j| |_||fD]} | dk r6t| q6XdS)Nr)resource_tracker) tracker_fdZ pipe_handlewbF)closefd)rZgetfdrrrZget_preparation_data_nameioBytesIOrrdumprZFinalizeZ close_fds finalizerosclosepipeZget_command_lineextendZspawnv_passfdsZget_executablepidsentinelopenwrite getbuffer)rrrrZ prep_datafpZparent_rZchild_wZchild_rZparent_wZ fds_to_closer cmdfrrr_launch&sB            z Popen._launch) rrrmethodr ZDupFdrrr3 __classcell__rrrrrs  ) r#r'contextrrr!rrr__all__objectr rrrrrs    __pycache__/forkserver.cpython-38.pyc000064400000020266147577350250013621 0ustar00U ,a0@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl m Z ddl mZddl mZddl mZd d d d gZd ZedZGdddeZdddZddZddZddZeZejZejZejZejZdS)N) connection)process) reduction)resource_tracker)spawn)utilensure_runningget_inherited_fdsconnect_to_new_processset_forkserver_preloadqc@sDeZdZddZddZddZddZd d Zd d Zd dZ dS) ForkServercCs.d|_d|_d|_d|_t|_dg|_dS)N__main__)_forkserver_address_forkserver_alive_fd_forkserver_pid_inherited_fds threadingZLock_lock_preload_modulesselfr?/opt/alt/python38/lib64/python3.8/multiprocessing/forkserver.py__init__"s  zForkServer.__init__c Cs|j|W5QRXdSN)r_stop_unlockedrrrr_stop*szForkServer._stopcCsV|jdkrdSt|jd|_t|jdd|_t|jsLt|jd|_dS)Nr) roscloserwaitpidris_abstract_socket_namespacerunlinkrrrrr/s    zForkServer._stop_unlockedcCs&tdd|jDstd||_dS)z>Set list of module names to try to load in forkserver process.css|]}t|tkVqdSr)typestr).0modrrr @sz4ForkServer.set_forkserver_preload..z&module_names must be a list of stringsN)allr TypeError)rZ modules_namesrrrr >sz!ForkServer.set_forkserver_preloadcCs|jS)zReturn list of fds inherited from parent process. This returns None if the current process was not started by fork server. )rrrrrr DszForkServer.get_inherited_fdsc Cs|t|dtkr tdttj}||jt \}}t \}}|||j t g}||7}zNz&t||||fWW4W5QRSt |t |YnXW5t |t |XW5QRXdS)a;Request forkserver to create a child process. Returns a pair of fds (status_r, data_w). The calling process can read the child process's pid and (eventually) its returncode from status_r. The calling process should write to data_w the pickled preparation and process data. z too many fdsN)r lenMAXFDS_TO_SEND ValueErrorsocketAF_UNIXZconnectrr piperrZgetfdr!rZsendfds)rfdsZclientZparent_rchild_wchild_rZparent_wZallfdsrrrr Ls(        z!ForkServer.connect_to_new_processc s|j~t|jdk r`t|jtj\}}|sBW5QRdSt|jd|_ d|_d|_d}|j rddht d}fdd| D}ni}ttj}td}||t|st|d |t\}}ztzV||g} ||||j |f;}t } | gt} | d |g7} t| | | }Wnt|YnXW5t|X||_ ||_||_W5QRXW5QRXdS) zMake sure that a fork server is running. This can be called from any process. Note that usually a child process will just reuse the forkserver started by its parent, so ensure_running() will do nothing. NzCfrom multiprocessing.forkserver import main; main(%d, %d, %r, **%r) main_pathsys_pathignorecsi|]\}}|kr||qSrr)r'xyZ desired_keysrr sz-ForkServer.ensure_running..r1iz-c)rrr rr r"WNOHANGr!rrrrZget_preparation_dataitemsr0r1rZarbitrary_addressZbindrr#chmodZlistenr2filenoZget_executableZ_args_from_interpreter_flagsZspawnv_passfds) rpidZstatuscmddatalistenerZaddressalive_rZalive_wZ fds_to_passZexeargsrr;rr isN              zForkServer.ensure_runningN) __name__ __module__ __qualname__rrrr r r r rrrrr src Cs|rdd|kr8|dk r8dt_zt|W5t`X|D]&}z t|Wq<tk r`Yqk r}z|j?t?j@kr̂W5d}~XYnXqW5QRXW5QRXdS)zRun forkserver.rNTFcWsdSrr)Z_unusedrrrsigchld_handlerszmain..sigchld_handlercSsi|]\}}|t||qSr)signal)r'sigvalrrrr<szmain..)r@cSsg|]\}}|jqSr)Zfileobj)r'keyZeventsrrr szmain..rz Not at EOF?irzChild {0:n} status is {1:n}z.forkserver: waitpid returned unexpected pid %dzToo many ({0:n}) fds to send)ArZcurrent_processZ _inheritingrZimport_main_path __import__ ImportErrorrZ _close_stdinr r2 set_blockingrKSIGCHLDSIGINTSIG_IGNr> set_wakeup_fdr0r1 selectorsZDefaultSelectorZ getsockname _forkserverrregisterZ EVENT_READZselectreadAssertionError SystemExitr"r=ChildProcessErrorpop WIFSIGNALEDWTERMSIG WIFEXITEDformat WEXITSTATUS write_signedBrokenPipeErrorr!warningswarnZacceptrZrecvfdsr.r- RuntimeErrorfork_exitextendvalues _serve_one Exceptionsys excepthookexc_infostderrflushOSErrorerrnoZ ECONNABORTED)Z listener_fdrEZpreloadr6r7modnameZsig_rZsig_wrJhandlersZ old_handlersZ pid_to_fdrDZselectorZrfdsrAstsr4 returncodesr3r5code unused_fdsfderrrmains                         rc Cshtd|D]\}}t||q|D]}t|q,|^t_tj_ t_ t |}t ||}|S)NrQ)rKrXr>r r!rZrrZ_resource_trackerZ_fdrduprZ_main) r5r3r~ryrLrMrZparent_sentinelr}rrrro1s    rocCsNd}tj}t||kr@t||t|}|s6td||7}q t|dS)NrPzunexpected EOFr) SIGNED_STRUCTsizer-r r\EOFErrorZunpack)rrCZlengthr|rrr read_signedHs  rcCs<t|}|r8t||}|dkr*td||d}q dS)Nrzshould not get here)rZpackr writerj)rnmsgnbytesrrrrfRs   rf)NN) rwr rYrKr0Zstructrqrrhrrcontextrrrr__all__r.ZStructrobjectrrrorrfrZr r r r rrrrs>           __pycache__/resource_tracker.cpython-38.opt-2.pyc000064400000011221147577350250015722 0ustar00U ,a!@sddlZddlZddlZddlZddlZddlmZddlmZdddgZe edZ ej ej fZ d d d iZejd krddlZddlZeejejd GdddeZeZejZejZejZejZddZdS)N)spawn)utilensure_runningregister unregisterpthread_sigmaskZnoopcCsdSNr r r E/opt/alt/python38/lib64/python3.8/multiprocessing/resource_tracker.py!r posix)Z semaphoreZ shared_memoryc@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)ResourceTrackercCst|_d|_d|_dSr ) threadingZLock_lock_fd_pidselfr r r __init__0s zResourceTracker.__init__c CsT|jD|jdkr W5QRdSt|jd|_t|jdd|_W5QRXdS)Nr)rrosclosewaitpidrrr r r _stop5s  zResourceTracker._stopcCs||jSr )rrrr r r getfdBszResourceTracker.getfdc Cst|jb|jdk r~|r*W5QRdSt|jz|jdk rPt|jdWntk rfYnXd|_d|_t dg}z| t j Wntk rYnXd}t\}}zzr| |t}|gt}|d||g7}z&trttjtt|||}W5tr,ttjtXWnt|YnX||_||_W5t|XW5QRXdS)NrzUresource_tracker: process died unexpectedly, relaunching. Some resources might leak.z:from multiprocessing.resource_tracker import main;main(%d)z-c)rr _check_aliverrrrChildProcessErrorwarningswarnappendsysstderrfileno ExceptionpiperZget_executablerZ_args_from_interpreter_flags _HAVE_SIGMASKsignalr SIG_UNBLOCK_IGNORED_SIGNALS SIG_BLOCKZspawnv_passfds)rZ fds_to_passcmdrwZexeargspidr r r rFsJ         zResourceTracker.ensure_runningcCs2zt|jdWntk r(YdSXdSdS)Ns PROBE:0:noop FT)rwriterOSErrorrr r r rs zResourceTracker._check_alivecCs|d||dS)NREGISTER_sendrnamertyper r r rszResourceTracker.registercCs|d||dS)N UNREGISTERr3r5r r r rszResourceTracker.unregistercCsB|d|||d}t|dkr0tdt|j|}dS)Nz {0}:{1}:{2} asciiiz name too long)rformatencodelen ValueErrorrr0r)rr+r6r7msgnbytesr r r r4s  zResourceTracker._sendN) __name__ __module__ __qualname__rrrrrrrr4r r r r r.s @ rc Csttjtjttjtjtr2ttjttj tj fD]&}z | Wq>t k rbYq>Xq>ddt D}zt|d}|D]}z|dd\}}}t |d} | dkrtd|d ||d kr|||n2|d kr|||n|d krn td |Wqt k rTztjtWn YnXYqXqW5QRXW5|D]\}}|rztdt||fWnt k rYnX|D]V}zLzt ||Wn6t k r}ztd||fW5d}~XYnXW5XqqnXdS)NcSsi|] }|tqSr )set).0r7r r r szmain..zQresource_tracker: There appear to be %d leaked %s objects to clean up at shutdownzresource_tracker: %r: %srbr9:zCannot register z. for automatic cleanup: unknown resource type r2r8ZPROBEzunrecognized command %r)r'SIGINTSIG_IGNSIGTERMr&rr(r)r!stdinstdoutrr$_CLEANUP_FUNCSkeysitemsrrr<openstripdecodesplitgetr=addremove RuntimeError excepthookexc_info) fdfcacher7Z rtype_cacher6eliner+Z cleanup_funcr r r mains^      (r_)rr'r!rrrr__all__hasattrr&rHrJr)rMr6Z_multiprocessingZ _posixshmemupdateZ sem_unlinkZ shm_unlinkobjectrZ_resource_trackerrrrrr_r r r r s4      w__pycache__/__init__.cpython-38.opt-2.pyc000064400000001245147577350250014124 0ustar00U ,a@sdddlZddlmZddeejDZeddeDdZd Z d ej kr`ej d ej d <dS) N)contextcCsg|]}|ds|qS)_) startswith).0xr=/opt/alt/python38/lib64/python3.8/multiprocessing/__init__.py s r ccs|]}|ttj|fVqdS)N)getattrr_default_context)rnamerrr sr__main__Z __mp_main__) sysrdirr __all__globalsupdateZSUBDEBUGZ SUBWARNINGmodulesrrrr s  __pycache__/popen_fork.cpython-38.pyc000064400000005143147577350250013570 0ustar00U ,a @s6ddlZddlZddlmZdgZGdddeZdS)N)utilPopenc@s`eZdZdZddZddZejfddZdd d Z d d Z d dZ ddZ ddZ ddZdS)rforkcCs"td|_d|_||dSN)rZ_flush_std_streams returncode finalizer_launch)self process_objr ?/opt/alt/python38/lib64/python3.8/multiprocessing/popen_fork.py__init__szPopen.__init__cCs|Srr )r fdr r r duplicate_for_childszPopen.duplicate_for_childc Cs|jdkrzt|j|\}}Wn(tk rH}z WYdSd}~XYnX||jkrt|rnt| |_n$t|std |t ||_|jS)NzStatus is {:n}) roswaitpidpidOSError WIFSIGNALEDWTERMSIG WIFEXITEDAssertionErrorformat WEXITSTATUS)r flagrstser r r polls    z Popen.pollNcCsN|jdkrH|dk r0ddlm}||jg|s0dS||dkrBtjndS|jS)Nr)waitg)rZmultiprocessing.connectionrsentinelrrWNOHANG)r timeoutrr r r r(s  z Popen.waitcCsZ|jdkrVzt|j|Wn8tk r0Yn&tk rT|jdddkrPYnXdS)Ng?)r")rrkillrProcessLookupErrorrr)r Zsigr r r _send_signal2s zPopen._send_signalcCs|tjdSr)r%signalSIGTERMr r r r terminate<szPopen.terminatecCs|tjdSr)r%r&SIGKILLr(r r r r#?sz Popen.killc Csd}t\}}t\}}t|_|jdkrdz$t|t||j|d}W5t|Xn0t|t|t|tj ||f|_ ||_ dS)Nrr)Zparent_sentinel) rpiperr_exitclose _bootstraprZFinalizeZ close_fdsrr )r r codeZparent_rZchild_wZchild_rZparent_wr r r r Bs          z Popen._launchcCs|jdk r|dSr)rr(r r r r-Us z Popen.close)N)__name__ __module__ __qualname__methodrrrr!rrr%r)r#r r-r r r r r s  )rr&r__all__objectrr r r r s __pycache__/context.cpython-38.opt-2.pyc000064400000026465147577350250014064 0ustar00U ,a+@sddlZddlZddlZddlmZddlmZdZGdddeZGdd d eZ Gd d d eZ Gd d d eZ Gddde Z GdddejZGddde ZejdkrRGdddejZGdddejZGdddejZGddde ZGddde ZGdd d e Zeeed!Zejd"krDeed#Zn eed$Zn8Gd%ddejZGd&dde Zd#eiZeed#Zd'd(ZeZd)d*Zd+d,Zd-d.ZdS)/N)process) reductionc@s eZdZdS) ProcessErrorN__name__ __module__ __qualname__rrrd?Z(e(j)d@d?Z(dAdBZ*d S)O BaseContextcCs"t}|dkrtdn|SdS)Nzcannot determine number of cpus)os cpu_countNotImplementedError)selfZnumrrr r)s zBaseContext.cpu_countcCs&ddlm}||d}||S)Nr) SyncManagerctx)Zmanagersr get_contextstart)rrmrrr Manager1s zBaseContext.ManagerTcCsddlm}||S)Nr)Pipe) connectionr)rZduplexrrrr r<s zBaseContext.PipecCsddlm}||dS)Nr)Lockr) synchronizerr)rrrrr rAs zBaseContext.LockcCsddlm}||dS)Nr)RLockr)rrr)rrrrr rFs zBaseContext.RLockNcCsddlm}|||dS)Nr) Conditionr)rr r)rlockr rrr r Ks zBaseContext.ConditionrcCsddlm}|||dS)Nr) Semaphorer)rr"r)rvaluer"rrr r"Ps zBaseContext.SemaphorecCsddlm}|||dS)Nr)BoundedSemaphorer)rr$r)rr#r$rrr r$Us zBaseContext.BoundedSemaphorecCsddlm}||dS)Nr)Eventr)rr%r)rr%rrr r%Zs zBaseContext.EventcCs ddlm}|||||dS)Nr)Barrierr)rr&r)rZpartiesactionZtimeoutr&rrr r&_s zBaseContext.BarrierrcCsddlm}|||dS)Nr)Queuer)queuesr(r)rmaxsizer(rrr r(ds zBaseContext.QueuecCsddlm}|||dS)Nr) JoinableQueuer)r)r+r)rr*r+rrr r+is zBaseContext.JoinableQueuecCsddlm}||dS)Nr) SimpleQueuer)r)r,r)rr,rrr r,ns zBaseContext.SimpleQueuercCs"ddlm}||||||dS)Nr)Pool)context)Zpoolr-r)rZ processesZ initializerZinitargsZmaxtasksperchildr-rrr r-ss  zBaseContext.PoolcGsddlm}||f|S)Nr)RawValue) sharedctypesr/)rtypecode_or_typeargsr/rrr r/zs zBaseContext.RawValuecCsddlm}|||S)Nr)RawArray)r0r3)rr1size_or_initializerr3rrr r3s zBaseContext.RawArray)r!cGs&ddlm}||f|||dS)Nr)Valuer!r)r0r5r)rr1r!r2r5rrr r5s  zBaseContext.ValuecCs ddlm}|||||dS)Nr)Arrayr6)r0r7r)rr1r4r!r7rrr r7s zBaseContext.ArraycCs,tjdkr(ttddr(ddlm}|dS)Nwin32frozenFr)freeze_support)sysplatformgetattrspawnr:)rr:rrr r:s zBaseContext.freeze_supportcCsddlm}|S)Nr) get_logger)utilr?)rr?rrr r?s zBaseContext.get_loggercCsddlm}||S)Nr) log_to_stderr)r@rA)rlevelrArrr rAs zBaseContext.log_to_stderrcCsddlm}dS)Nr)r)r)rrrrr allow_connection_picklingsz%BaseContext.allow_connection_picklingcCsddlm}||dS)Nr)set_executable)r>rE)r executablerErrr rEs zBaseContext.set_executablecCsddlm}||dS)Nr)set_forkserver_preload) forkserverrG)rZ module_namesrGrrr rGs z"BaseContext.set_forkserver_preloadcCsH|dkr |Sz t|}Wn"tk r:td|dYnX||S)Nzcannot find context for %r)_concrete_contextsKeyError ValueError_check_available)rmethodrrrr rs zBaseContext.get_contextFcCs|jSN)_namerZ allow_nonerrr get_start_methodszBaseContext.get_start_methodcCs tddS)Nz+cannot set start method of concrete context)rKrrMZforcerrr set_start_methodszBaseContext.set_start_methodcCs tdSNr)globalsgetrrrr reducerszBaseContext.reducercCs|td<dSrT)rU)rrrrr rXscCsdSrNrrWrrr rLszBaseContext._check_available)T)N)r)r)NN)r)r)NNrN)N)N)F)F)+rr r rr r r staticmethodrZcurrent_processZparent_processZactive_childrenrrrrrr r"r$r%r&r(r+r,r-r/r3r5r7r:r?rArDrErGrrQrSpropertyrXsetterrLrrrr rsR                rc@seZdZdZeddZdS)ProcessNcCstj|SrN)_default_contextrr\_Popen) process_objrrr r^szProcess._Popenrr r Z _start_methodrYr^rrrr r\sr\csFeZdZeZddZd fdd ZdddZdd d Zd d ZZ S)DefaultContextcCs||_d|_dSrN)r]_actual_context)rr.rrr __init__szDefaultContext.__init__Ncs0|dkr |jdkr|j|_|jSt|SdSrN)rbr]superr)rrM __class__rr rs  zDefaultContext.get_contextFcCs<|jdk r|std|dkr,|r,d|_dS|||_dS)Nzcontext has already been set)rb RuntimeErrorrrRrrr rSs  zDefaultContext.set_start_methodcCs"|jdkr|rdS|j|_|jjSrN)rbr]rOrPrrr rQs  zDefaultContext.get_start_methodcCsBtjdkrdgStjdkr"ddgnddg}tjr:|d|SdS)Nr8r>darwinforkrH)r;r<rHAVE_SEND_HANDLEappend)rmethodsrrr get_all_start_methodss   z$DefaultContext.get_all_start_methods)N)F)F) rr r r\rcrrSrQrm __classcell__rrrer ras   rar8c@seZdZdZeddZdS) ForkProcessricCsddlm}||SNr)Popen)Z popen_forkrqr_rqrrr r^s zForkProcess._PopenNr`rrrr rosroc@seZdZdZeddZdS) SpawnProcessr>cCsddlm}||Srp)Zpopen_spawn_posixrqrrrrr r^s SpawnProcess._PopenNr`rrrr rssrsc@seZdZdZeddZdS)ForkServerProcessrHcCsddlm}||Srp)Zpopen_forkserverrqrrrrr r^ s zForkServerProcess._PopenNr`rrrr rusruc@seZdZdZeZdS) ForkContextriN)rr r rOror\rrrr rv%srvc@seZdZdZeZdS SpawnContextr>Nrr r rOrsr\rrrr rx)srxc@seZdZdZeZddZdS)ForkServerContextrHcCstjstddS)Nz%forkserver start method not available)rrjrKrWrrr rL0sz"ForkServerContext._check_availableN)rr r rOrur\rLrrrr rz-srz)rir>rHrhr>ric@seZdZdZeddZdS)rsr>cCsddlm}||Srp)Zpopen_spawn_win32rqrrrrr r^Ds rtNr`rrrr rsBsc@seZdZdZeZdSrwryrrrr rxIscCst|t_dSrN)rIr]rb)rMrrr _force_start_methodVsr{cCs ttddS)Nspawning_popen)r=_tlsrrrr get_spawning_popen_sr~cCs |t_dSrN)r}r|)popenrrr set_spawning_popenbsrcCs tdkrtdt|jdS)NzF%s objects should only be shared between processes through inheritance)r~rgtyper)objrrr assert_spawninges  r) rr;Z threadingrCrr__all__ Exceptionrr r robjectrZ BaseProcessr\rar<rorsrurvrxrzrIr]r{Zlocalr}r~rrrrrr sL  ?,   __pycache__/util.cpython-38.opt-1.pyc000064400000026271147577350250013347 0ustar00U ,a~6@sddlZddlZddlZddlZddlZddlZddlmZddlm Z ddddd d d d d ddddddgZ dZ dZ dZ dZdZdZdZdadaddZddZddZddZdd Zd@d d Zd!d"Zd#d$ZeZd%d&Zd'd ZeZ e!Z"d(d)Z#d*d Z$iZ%e!Z&Gd+dde'Z(dAd,d-Z)d.d Z*da+eee)e j,e j-fd/d0Z.e/e.Gd1dde'Z0Gd2ddej1Z2ze3d3Z4Wne5k rd4Z4YnXd5dZ6d6d7Z7d8d9Z8d:d;Z9dd?Z;dS)BN)_args_from_interpreter_flags)process sub_debugdebuginfo sub_warning get_logger log_to_stderr get_temp_dirregister_after_fork is_exitingFinalizeForkAwareThreadLockForkAwareLocalclose_all_fds_exceptSUBDEBUG SUBWARNING multiprocessingz+[%(levelname)s/%(processName)s] %(message)sFcGstrtjt|f|dSN)_loggerlogrmsgargsr9/opt/alt/python38/lib64/python3.8/multiprocessing/util.pyr,scGstrtjt|f|dSr)rrDEBUGrrrr r0scGstrtjt|f|dSr)rrINFOrrrr r4scGstrtjt|f|dSr)rrrrrrr r8scCs|ddl}|z\tsj|tadt_ttdrFt t t t n$tj t diftj t difW5|XtS)z0 Returns logger used by multiprocessing rN unregisterr)loggingZ _acquireLockZ _releaseLockrZ getLogger LOGGER_NAMEZ propagatehasattratexitr#_exit_functionregisterZ _exithandlersremoveappend)r$rrr r <s     cCsJddl}t}|t}|}|||||rB||dat S)zB Turn on logging and add a handler which prints to stderr rNT) r$r Z FormatterDEFAULT_LOGGING_FORMATZ StreamHandlerZ setFormatterZ addHandlerZsetLevel_log_to_stderrr)levelr$ZloggerZ formatterZhandlerrrr r Ws    cCs tjdkrdSttdrdSdS)NZlinuxTZgetandroidapilevelF)sysplatformr&rrrr #_platform_supports_abstract_socketsls   r1cCs@|sdSt|tr|ddkSt|tr4|ddkStddS)NFrz(address type of {address!r} unrecognized) isinstancebytesstr TypeError)Zaddressrrr is_abstract_socket_namespacets    r7cCs&||t}|dk r"d|jd<dS)Ntempdir)rcurrent_process_config)rmtreer8r9rrr _remove_temp_dirsr<cCsftjd}|dkrbddl}ddl}|jdd}td|tdt |j |fdd|tjd<|S)Nr8rzpymp-)prefixzcreated temp directory %si)r exitpriority) rr9r:getshutiltempfileZmkdtemprrr<r;)r8r@rArrr r s  c Csftt}||D]H\\}}}}z ||Wqtk r^}ztd|W5d}~XYqXqdS)Nz after forker raised exception %s)list_afterfork_registryitemssort Exceptionr)rDindexZidentfuncobjerrr _run_after_forkerss  rKcCs|tttt||f<dSr)rCnext_afterfork_counterid)rIrHrrr r sc@sFeZdZdZdddZdeeejfddZ dd Z d d Z d d Z dS)rzA Class which supports object finalization using weakrefs rNcCs|dk r&t|ts&td|t||dk r>t|||_n|dkrNtd||_ ||_ |p`i|_ |t t f|_t|_|t|j<dS)Nz3Exitpriority ({0!r}) must be None or int, not {1!s}z+Without object, exitpriority cannot be None)r3intr6formattypeweakrefref_weakref ValueError _callback_args_kwargsrL_finalizer_counter_keyosgetpid_pid_finalizer_registry)selfrIcallbackrkwargsr>rrr __init__s"  zFinalize.__init__cCsz ||j=Wntk r(|dYnbX|j|krD|dd}n$|d|j|j|j|j|j|j}d|_|_|_|_|_|SdS)zQ Run the callback unless it has already been called or cancelled zfinalizer no longer registeredz+finalizer ignored because different processNz/finalizer calling %s with args %s and kwargs %s)rZKeyErrorr]rVrWrXrT)r_Zwrr^rr\resrrr __call__s$  zFinalize.__call__cCsDz t|j=Wntk r Yn Xd|_|_|_|_|_dS)z3 Cancel finalization of the object N)r^rZrcrTrVrWrXr_rrr cancels zFinalize.cancelcCs |jtkS)zS Return whether this finalizer is still waiting to invoke callback )rZr^rfrrr still_activeszFinalize.still_activec Csz |}Wnttfk r(d}YnX|dkr>d|jjSd|jjt|jd|jf}|jrr|dt|j7}|j r|dt|j 7}|j ddk r|dt|j d7}|dS) Nz<%s object, dead>z<%s object, callback=%s__name__z, args=z , kwargs=rz, exitpriority=>) rTAttributeErrorr6 __class__rigetattrrVrWr5rXrZ)r_rIxrrr __repr__s"   zFinalize.__repr__)rNN) ri __module__ __qualname____doc__rbr^rr[r\rergrhrorrrr rs   c stdkr dSdkrddn fddfddttD}|jdd|D]P}t|}|dk rPtd |z |WqPtk rd dl}|YqPXqPdkrtdS) z Run all finalizers whose exit priority is not None and at least minpriority Finalizers with highest priority are called first; finalizers with the same priority will be called in reverse order of creation. NcSs |ddk SNrrprrr z!_run_finalizers..cs|ddk o|dkSrsrrt) minpriorityrr rvrwcsg|]}|r|qSrr).0key)frr #sz#_run_finalizers..T)reversez calling %sr) r^rBrEr?rrF traceback print_excclear)rxkeysrz finalizerr~r)r{rxr _run_finalizers s$      rcCs tp tdkS)z6 Returns true if the process is shutting down N)_exitingrrrr r 8scCstsda|d|d|d|dk rr|D] }|jr0|d|j|jq0|D]}|d|j|qX|d|dS)NTzprocess shutting downz2running all "atexit" finalizers with priority >= 0rz!calling terminate() for daemon %szcalling join() for process %sz)running the remaining "atexit" finalizers)rZdaemonnameZ_popenZ terminatejoin)rrractive_childrenr9rurrr r(@s        r(c@s,eZdZddZddZddZddZd S) rcCs|t|tjdSr)_resetr rrfrrr rbqszForkAwareThreadLock.__init__cCs"t|_|jj|_|jj|_dSr) threadingZLock_lockacquirereleaserfrrr rus  zForkAwareThreadLock._resetcCs |jSr)r __enter__rfrrr rzszForkAwareThreadLock.__enter__cGs |jj|Sr)r__exit__)r_rrrr r}szForkAwareThreadLock.__exit__N)rirprqrbrrrrrrr rpsc@seZdZddZddZdS)rcCst|dddS)NcSs |jSr)__dict__r)rIrrr rvrwz)ForkAwareLocal.__init__..)r rfrrr rbszForkAwareLocal.__init__cCs t|dfS)Nr)rQrfrrr __reduce__szForkAwareLocal.__reduce__N)rirprqrbrrrrr rs SC_OPEN_MAXcCsNt|dtg}|tt|dD] }t||d||dq(dS)Nr)rBMAXFDrErangelenr[ closerange)fdsirrr rsc CstjdkrdSztjWnttfk r4YnXz@ttjtj}zt|ddt_Wnt|YnXWnttfk rYnXdS)NF)closefd) r/stdincloseOSErrorrUr[opendevnullO_RDONLY)fdrrr _close_stdins   rc CsTztjWnttfk r&YnXztjWnttfk rNYnXdSr)r/stdoutflushrkrUstderrrrrr _flush_std_streamssrcCsxddl}tttt|}t\}}z6||t |gd|dddddddd||dddWSt|t|XdS)NrTrF) _posixsubprocesstuplesortedmaprOr[piperZ fork_execfsencode)pathrZpassfdsrZ errpipe_readZ errpipe_writerrr spawnv_passfdss2   rcGs|D]}t|qdS)z/Close each file descriptor given as an argumentN)r[r)rrrrr close_fdssrcCsZddlm}tddlm}|jddlm}|j t | | dS)zKCleanup multiprocessing resources when multiprocessing tests completed.r)support) forkserver)resource_trackerN) ZtestrrZ_cleanuprrZ _forkserverZ_stoprZ_resource_trackerrZ gc_collectZ reap_children)rrrrrr _cleanup_testss     r)N)N) s       V , *    __pycache__/connection.cpython-38.opt-2.pyc000064400000054746147577350250014542 0ustar00U ,a{@sddddgZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z m Z dd lmZejZz$ddlZdd lmZmZmZmZWn$ek rejd kr‚dZYnXd Zd ZeZdZdgZeedrdZedg7Zejd krdZedg7ZefddZ ddZ!ddZ"ddZ#ddZ$GdddZ%erhGddde%Z&Gdd d e%Z'Gd!dde(Z)dOd"dZ*ejd krdPd$dZ+n dQd%dZ+Gd&d'd'e(Z,d(d)Z-ejd krGd*d+d+e(Z.d,d-Z/d.Z0d/Z1d0Z2d1Z3d2d3Z4d4d5Z5Gd6d7d7e(Z6d8d9Z7d:d;Z8Gdd?Z:ejd krtd@dAZ;ejdRdBdZ?n,ddl@Z@ee@dCre@jAZBne@jCZBdSdDdZ?ejd krdEdFZDdGdHZEeFe'eDdIdJZGdKdLZHeFe&eGndMdFZDdNdHZEeFe'eDdS)TClientListenerPipewaitN)util)AuthenticationErrorBufferTooShort) reduction) WAIT_OBJECT_0WAIT_ABANDONED_0 WAIT_TIMEOUTINFINITEwin32i g4@AF_INETAF_UNIXAF_PIPEcCs t|SNtime monotonic)timeoutr?/opt/alt/python38/lib64/python3.8/multiprocessing/connection.py _init_timeout;srcCs t|kSrr)trrr_check_timeout>srcCsX|dkr dS|dkr&tjdtdS|dkrLtjdtttfddStd dS) Nr)Z localhostrrz listener-)prefixdirrz\\.\pipe\pyc-%d-%d-zunrecognized family) tempfileZmktemprZ get_temp_dirosgetpidnext _mmap_counter ValueErrorfamilyrrrarbitrary_addressEsr(cCsJtjdkr|dkrtd|tjdkrF|dkrFtt|sFtd|dS)NrrzFamily %s is not recognized.r)sysplatformr%hasattrsocketr&rrr_validate_familySs   r-cCsTt|tkrdSt|tkr*|dr*dSt|tks@t|rDdStd|dS)Nrz\\rrzaddress type of %r unrecognized)typetuplestr startswithris_abstract_socket_namespacer%)addressrrr address_type_s r4c@seZdZdZd+ddZddZddZd d Zd d Zd dZ e ddZ e ddZ e ddZ ddZddZd,ddZddZd-ddZd.d d!Zd"d#Zd/d%d&Zd'd(Zd)d*ZdS)0_ConnectionBaseNTcCs>|}|dkrtd|s(|s(td||_||_||_dS)Nrzinvalid handlez6at least one of `readable` and `writable` must be True) __index__r%_handle _readable _writable)selfhandlereadablewritablerrr__init__usz_ConnectionBase.__init__cCs|jdk r|dSrr7_closer:rrr__del__s z_ConnectionBase.__del__cCs|jdkrtddS)Nzhandle is closed)r7OSErrorrArrr _check_closeds z_ConnectionBase._check_closedcCs|jstddS)Nzconnection is write-only)r8rCrArrr_check_readablesz_ConnectionBase._check_readablecCs|jstddS)Nzconnection is read-only)r9rCrArrr_check_writablesz_ConnectionBase._check_writablecCs"|jrd|_n|tddS)NFzbad message length)r9r8closerCrArrr_bad_message_lengthsz#_ConnectionBase._bad_message_lengthcCs |jdkSrr7rArrrclosedsz_ConnectionBase.closedcCs|jSr)r8rArrrr<sz_ConnectionBase.readablecCs|jSr)r9rArrrr=sz_ConnectionBase.writablecCs||jSr)rDr7rArrrfilenosz_ConnectionBase.filenocCs$|jdk r z |W5d|_XdSrr?rArrrrGs  z_ConnectionBase.closercCs||t|}|jdkr.tt|}t|}|dkrFtd||krVtd|dkrh||}n&|dkrztdn|||krtd|||||dS)Nrrzoffset is negativezbuffer length < offsetzsize is negativezbuffer length < offset + size)rDrF memoryviewitemsizebyteslenr% _send_bytes)r:bufoffsetsizemnrrr send_bytess"     z_ConnectionBase.send_bytescCs$|||t|dSr)rDrFrP_ForkingPicklerdumpsr:objrrrsendsz_ConnectionBase.sendcCsJ|||dk r(|dkr(td||}|dkrB||S)Nrznegative maxlength)rDrEr% _recv_bytesrHgetvalue)r:Z maxlengthrQrrr recv_bytess z_ConnectionBase.recv_bytesc Cs||t|}|j}|t|}|dkr>tdn||krNtd|}|}|||krvt| | d| |||||||W5QRSQRXdS)Nrznegative offsetzoffset too large) rDrErLrMrOr%r\tellr r]seekreadinto)r:rQrRrTrMZbytesizeresultrSrrrrecv_bytes_intos$        z_ConnectionBase.recv_bytes_intocCs&|||}t|Sr)rDrEr\rWloads getbuffer)r:rQrrrrecvsz_ConnectionBase.recvcCs||||Sr)rDrE_pollr:rrrrpollsz_ConnectionBase.pollcCs|SrrrArrr __enter__sz_ConnectionBase.__enter__cCs |dSrrGr:exc_type exc_valueZexc_tbrrr__exit__sz_ConnectionBase.__exit__)TT)rN)N)r)rg)__name__ __module__ __qualname__r7r>rBrDrErFrHpropertyrJr<r=rKrGrVr[r^rcrfrjrkrprrrrr5rs.       r5c@s@eZdZdZejfddZddZd ddZd d Z d d Z dS)PipeConnectionFcCs||jdSrrI)r:Z _CloseHandlerrrr@szPipeConnection._closec Cshtj|j|dd\}}z      zPipeConnection._recv_bytescCs.|jst|jddkrdStt|g|S)NrT)rrx PeekNamedPiper7boolrrirrrrhFs zPipeConnection._pollcCs|}t}||t|jd}|dk rJt|||krJ|tj |j|dd\}}| d\}}|||S)NrTrv) rerrrrxrr7rOrHrry)r:r~rrQrleftrZrbytesrrrrLs zPipeConnection._get_more_data)N) rqrrrsrrx CloseHandler@rPr\rhrrrrrru s  ruc@sxeZdZer(ejfddZejZej Z ne j fddZe j Ze jZ efddZe fddZdd Zdd d Zd dZd S) ConnectioncCs||jdSrrIr:r@rrrr@cszConnection._closecCs||jdSrrIrrrrr@hscCs8t|}||j|}||8}|dkr&q4||d}qdSNr)rOr7)r:rQr remainingrUrrr_sendms  zConnection._sendcCsbt}|j}|}|dkr^|||}t|}|dkrJ||krBtntd||||8}q|S)Nrzgot end of file during message)rrr7rOrrCr)r:rSreadrQr;rchunkrUrrr_recvvs   zConnection._recvcCst|}|dkrHtdd}td|}||||||n8td|}|dkrr||||n|||dS)Ni!i!Qi@)rOstructZpackr)r:rQrUZ pre_headerheaderrrrrPs        zConnection._send_bytesNcCs^|d}td|\}|dkr@|d}td|\}|dk rT||krTdS||S)Nrrr)rrZunpackr])r:rrQrSrrrr\s  zConnection._recv_bytescCst|g|}t|Sr)rr)r:rrrrrrhs zConnection._poll)N)rqrrrsrx_multiprocessingZ closesocketr@r[Z_writerfZ_readr!rGrrrrrPr\rhrrrrr\s  rc@sNeZdZdddZddZddZed d Zed d Zd dZ ddZ dS)rNrcCsp|p|rt|pt}|pt|}t||dkr>t|||_nt||||_|dk rft|tsft d||_ dSNrzauthkey should be a byte string) r4default_familyr(r- PipeListener _listenerSocketListener isinstancerN TypeError_authkey)r:r3r'backlogauthkeyrrrr>s zListener.__init__cCs>|jdkrtd|j}|jr:t||jt||j|S)Nzlistener is closed)rrCacceptrdeliver_challengeanswer_challenge)r:crrrrs    zListener.acceptcCs |j}|dk rd|_|dSr)rrG)r:ZlistenerrrrrGszListener.closecCs|jjSr)r_addressrArrrr3szListener.addresscCs|jjSr)r_last_acceptedrArrr last_acceptedszListener.last_acceptedcCs|SrrrArrrrkszListener.__enter__cCs |dSrrlrmrrrrpszListener.__exit__)NNrN) rqrrrsr>rrGrtr3rrkrprrrrrs    cCsh|p t|}t||dkr&t|}nt|}|dk rHt|tsHtd|dk rdt||t|||Sr) r4r- PipeClient SocketClientrrNrrr)r3r'rrrrrrs    TcCsj|r>t\}}|d|dt|}t|}n$t\}}t|dd}t|dd}||fS)NTFr=r<)r,Z socketpair setblockingrdetachr!pipe)duplexs1s2c1c2Zfd1Zfd2rrrrs       c Cstd}|r*tj}tjtjB}tt}}ntj}tj}dt}}t||tjBtj Btj tj Btj Bd||tj tj}t||dtjtjtjtj}t|tj ddtj|dd}|d\} } t||d} t||d} | | fS)NrrrTrvrr)r(rxPIPE_ACCESS_DUPLEX GENERIC_READ GENERIC_WRITEBUFSIZEZPIPE_ACCESS_INBOUNDCreateNamedPipeFILE_FLAG_OVERLAPPEDFILE_FLAG_FIRST_PIPE_INSTANCEPIPE_TYPE_MESSAGEPIPE_READMODE_MESSAGE PIPE_WAITNMPWAIT_WAIT_FOREVERNULL CreateFile OPEN_EXISTINGSetNamedPipeHandleStateConnectNamedPiperyru) rr3ZopenmodeaccessZobsizeZibsizeZh1Zh2rw_rrrrrrrsT       c@s&eZdZd ddZddZddZdS) rrcCsttt||_zRtjdkr2|jtjtjd|jd|j ||j ||j |_ Wn t k r|jYnX||_d|_|dkrt|stj|tj|fdd|_nd|_dS)NposixrTrrargsZ exitpriority)r,getattr_socketr!nameZ setsockoptZ SOL_SOCKETZ SO_REUSEADDRrZbindZlistenZ getsocknamerrCrGZ_familyrrr2Finalizeunlink_unlink)r:r3r'rrrrr>Gs0       zSocketListener.__init__cCs&|j\}|_|dt|SNT)rrrrrrr:srrrr`s zSocketListener.acceptcCs0z|jW5|j}|dk r*d|_|XdSr)rrrG)r:rrrrrGes zSocketListener.closeN)r)rqrrrsr>rrGrrrrrCs rc CsPt|}ttt|.}|d||t|W5QRSQRXdSr)r4r,rrZconnectrr)r3r'rrrrros   rc@s4eZdZd ddZd ddZddZed d ZdS) rNcCsL||_|jddg|_d|_td|jtj|tj|j|jfdd|_ dS)NT)firstz listener created with address=%rrr) r _new_handle _handle_queuerr sub_debugrr_finalize_pipe_listenerrG)r:r3rrrrr>s zPipeListener.__init__Fc CsHtjtjB}|r|tjO}t|j|tjtjBtjBtj t t tj tj Sr) rxrrrrrrrrZPIPE_UNLIMITED_INSTANCESrrr)r:rflagsrrrrs   zPipeListener._new_handlec Cs|j||jd}ztj|dd}Wn0tk r^}z|jtjkrNW5d}~XYnPXzrr staticmethodrrrrrrs  rc Cst}z6t|dt|tjtjBdtjtjtjtj}Wqt k rz}z |j tj tj fksht |rjW5d}~XYqXqqt|tjddt|S)Nr)rrxZ WaitNamedPiperrrrrrrCrZERROR_SEM_TIMEOUTZERROR_PIPE_BUSYrrrru)r3rhrrrrrs8  rs #CHALLENGE#s #WELCOME#s #FAILURE#cCsddl}t|ts$tdt|tt}| t || ||d }| d}||krl| tn| ttddS)Nr Authkey must be bytes, not {0!s}md5zdigest received was wrong)hmacrrNr%formatr.r!urandomMESSAGE_LENGTHrV CHALLENGEnewdigestr^WELCOMEFAILURErZ connectionrrmessagerZresponserrrrs      rcCsxddl}t|ts$tdt||d}|ttd}| ||d }| ||d}|t krtt ddS)Nrrrrzdigest sent was rejected)rrrNr%rr.r^rOrrrrVrrrrrrrs     rc@s$eZdZddZddZddZdS)ConnectionWrappercCs6||_||_||_dD]}t||}t|||qdS)N)rKrGrjr^rV)_conn_dumps_loadsrsetattr)r:connrXrdattrrZrrrr>s  zConnectionWrapper.__init__cCs||}|j|dSr)rrrV)r:rZrrrrr[s zConnectionWrapper.sendcCs|j}||Sr)rr^rrrrrrfs zConnectionWrapper.recvN)rqrrrsr>r[rfrrrrrsrcCst|fdddddS)Nrutf-8) xmlrpclibrXencode)rZrrr _xml_dumps srcCst|d\\}}|S)Nr)rrddecode)rrZmethodrrr _xml_loadssrc@seZdZddZdS) XmlListenercCs"ddlmat|}t|ttSr) xmlrpc.clientclientrrrrrrrYrrrrs  zXmlListener.acceptN)rqrrrsrrrrrr sr cOsddlmatt||ttSr)r r rrrrr)rkwdsrrr XmlClients r cCst|}g}|rt|d|}|tkr*qn\t|krFtt|krTnn |t8}n2t|krptt|kr~nn |t8}ntd|||||dd}d}q |S)NFzShould not get hererr) listrxr{r r rOr rr)ZhandlesrLreadyrrrr_exhaustive_wait%s    rc s^|dkrt}n|dkrd}nt|dd}t|}ig}tt}z@|D]&}zt|d} Wn tk r||<YqPXzt | dd\}}Wn8tk r}zd|j}}|tkrƂW5d}~XYnX|t jkr||||j <qP|rjtdddkrjz|d \}}Wn*tk rP}z |j}W5d}~XYnX|sjt |drjd|_ |d}qPt|}W5|D]}|q|D]}z|d\}}Wn6tk r}z|j}|tkrW5d}~XYnX|t j kr|j } ||dkrt |drd|_qXfd d |Dfd d |DS)Nrrg?TrrK)rFc3s|]}|VqdSrr).0r)waithandle_to_objrr szwait..csg|]}|kr|qSrr)ro) ready_objectsrr swait..)rintrsetr}ryrCr _ready_errorsrxZERROR_OPERATION_ABORTEDr|addr+rrAttributeErrorr6rrzrr)Zgetwindowsversionrkeysupdate) object_listrZov_listZ ready_handlesr~rrrrrKr)rrrr;sh               PollSelectorc Cst}|D]}||tjq |dk r4t|}||}|r\dd|DW5QRS|dk r4|t}|dkr4|W5QRSq4W5QRXdS)NcSsg|]\}}|jqSr)Zfileobj)rkeyZeventsrrrrsrr) _WaitSelectorregister selectorsZ EVENT_READrrZselect)r"rZselectorrZZdeadlinerrrrrs   c CsZ|}t|tjtj6}ddlm}||}t||j |j ffW5QRSQRXdS)Nr)resource_sharer) rKr,ZfromfdrZ SOCK_STREAMrr(Z DupSocketrebuild_connectionr<r=)rr;rr(dsrrrreduce_connections   r+cCs|}t|||Srrr)r*r<r=Zsockrrrr)sr)cCsB|jr tjnd|jrtjndB}t||}t||j|jffSr) r<rxZFILE_GENERIC_READr=ZFILE_GENERIC_WRITEr Z DupHandlerKrebuild_pipe_connection)rrdhrrrreduce_pipe_connections r/cCs|}t|||Sr)rru)r.r<r=r;rrrr-sr-cCs t|}t||j|jffSr)r ZDupFdrKr)r<r=)rdfrrrr+scCs|}t|||Srr,)r0r<r=fdrrrr)s)NN)T)T)N)N)I__all__rr!r)r,rrr itertoolsrrrrr contextr ZForkingPicklerrWrxr r r r ImportErrorr*rZCONNECTION_TIMEOUTcountr$rZfamiliesr+rrr(r-r4r5rurobjectrrrrrrrrrrrrrrrrr r rrZERROR_NETNAME_DELETEDrrr'r#r%ZSelectSelectorr+r)r&r/r-rrrr s           PT=    ,, 8   P    __pycache__/popen_spawn_win32.cpython-38.opt-1.pyc000064400000006557147577350250015752 0ustar00U ,a@sddlZddlZddlZddlZddlZddlmZmZmZddl m Z ddl m Z dgZ dZ ejdkoreed d Zejd Zd d Zeejej ZddZGdddeZdS)N) reductionget_spawning_popenset_spawning_popen)spawn)utilPopeniZwin32frozenFzpythonservice.execCs ||kptj|tj|kSN)ospathnormcase)Zp1Zp2rF/opt/alt/python38/lib64/python3.8/multiprocessing/popen_spawn_win32.py_path_eqsrcGs|D]}t|qdSr )_winapi CloseHandle)Zhandleshandlerrr_close_handlessrc@sJeZdZdZdZddZddZddd Zd d Zd d Z e Z ddZ dS)rz@ Start a subprocess to run the code of a process object rc CsTt|j}tdd\}}t|d}tjt |d}d dd|D}t }t rt |tjrtj}tj}tj|d<nd}t|ddd } z0t||ddd d|dd \} } } } t| Wnt|YnX| |_d|_| |_t| |_t|t|jt|f|_t|zt !|| t !|| W5tdXW5QRXdS) Nr)Z parent_pidZ pipe_handle css|]}d|VqdS)z"%s"Nr).0xrrr 9sz!Popen.__init__..__PYVENV_LAUNCHER__wbT)closefdF)"rZget_preparation_data_namerZ CreatePipemsvcrtZopen_osfhandleZget_command_liner getpidjoinZget_executableWINENVrsys executable_base_executableenvironcopyopenZ CreateProcessrpid returncode_handleintsentinelrZFinalizer finalizerrrdump)selfZ process_objZ prep_dataZrhandleZwhandleZwfdcmdZ python_exeenvZto_childZhpZhtr'tidrrr__init__,sT          zPopen.__init__cCst||jSr )rZ duplicater+)r.rrrrduplicate_for_childaszPopen.duplicate_for_childNcCst|jdkrn|dkrtj}ntdt|dd}tt|j|}|tjkrnt|j}|t krht j }||_|jS)Nrig?) r(rZINFINITEmaxr*ZWaitForSingleObjectr)Z WAIT_OBJECT_0ZGetExitCodeProcess TERMINATEsignalSIGTERM)r.timeoutZmsecsrescoderrrwaites   z Popen.waitcCs |jddS)Nrr8)r;r.rrrpollusz Popen.pollcCsL|jdkrHztt|jtWn&tk rF|jdddkrBYnXdS)Ng?r<)r(rZTerminateProcessr*r)r5OSErrorr;r=rrr terminatexs  zPopen.terminatecCs |dSr )r,r=rrrclosesz Popen.close)N) __name__ __module__ __qualname____doc__methodr2r3r;r>r@killrArrrrr&s5 )r rr6r!rcontextrrrrr__all__r5platformgetattrZWINEXEr"lowerendswithZ WINSERVICErr#r robjectrrrrrs   __pycache__/popen_fork.cpython-38.opt-2.pyc000064400000005030147577350250014523 0ustar00U ,a @s6ddlZddlZddlmZdgZGdddeZdS)N)utilPopenc@s`eZdZdZddZddZejfddZdd d Z d d Z d dZ ddZ ddZ ddZdS)rforkcCs"td|_d|_||dSN)rZ_flush_std_streams returncode finalizer_launch)self process_objr ?/opt/alt/python38/lib64/python3.8/multiprocessing/popen_fork.py__init__szPopen.__init__cCs|Srr )r fdr r r duplicate_for_childszPopen.duplicate_for_childc Cs|jdkrzzt|j|\}}Wn(tk rH}z WYdSd}~XYnX||jkrzt|rnt| |_n t||_|jSr)roswaitpidpidOSError WIFSIGNALEDWTERMSIG WEXITSTATUS)r flagrstser r r polls    z Popen.pollNcCsN|jdkrH|dk r0ddlm}||jg|s0dS||dkrBtjndS|jS)Nr)waitg)rZmultiprocessing.connectionrsentinelrrWNOHANG)r timeoutrr r r r(s  z Popen.waitcCsZ|jdkrVzt|j|Wn8tk r0Yn&tk rT|jdddkrPYnXdS)Ng?)r)rrkillrProcessLookupErrorrr)r Zsigr r r _send_signal2s zPopen._send_signalcCs|tjdSr)r"signalSIGTERMr r r r terminate<szPopen.terminatecCs|tjdSr)r"r#SIGKILLr%r r r r ?sz Popen.killc Csd}t\}}t\}}t|_|jdkrdz$t|t||j|d}W5t|Xn0t|t|t|tj ||f|_ ||_ dS)Nrr)Zparent_sentinel) rpiperr_exitclose _bootstraprZFinalizeZ close_fdsrr)r r codeZparent_rZchild_wZchild_rZparent_wr r r r Bs          z Popen._launchcCs|jdk r|dSr)rr%r r r r*Us z Popen.close)N)__name__ __module__ __qualname__methodrrrrrrr"r&r r r*r r r r r s  )rr#r__all__objectrr r r r s __pycache__/popen_spawn_win32.cpython-38.pyc000064400000006624147577350250015006 0ustar00U ,a@sddlZddlZddlZddlZddlZddlmZmZmZddl m Z ddl m Z dgZ dZ ejdkoreed d Zejd Zd d Zeejej ZddZGdddeZdS)N) reductionget_spawning_popenset_spawning_popen)spawn)utilPopeniZwin32frozenFzpythonservice.execCs ||kptj|tj|kSN)ospathnormcase)Zp1Zp2rF/opt/alt/python38/lib64/python3.8/multiprocessing/popen_spawn_win32.py_path_eqsrcGs|D]}t|qdSr )_winapi CloseHandle)Zhandleshandlerrr_close_handlessrc@sJeZdZdZdZddZddZddd Zd d Zd d Z e Z ddZ dS)rz@ Start a subprocess to run the code of a process object rc CsTt|j}tdd\}}t|d}tjt |d}d dd|D}t }t rt |tjrtj}tj}tj|d<nd}t|ddd } z0t||ddd d|dd \} } } } t| Wnt|YnX| |_d|_| |_t| |_t|t|jt|f|_t|zt !|| t !|| W5tdXW5QRXdS) Nr)Z parent_pidZ pipe_handle css|]}d|VqdS)z"%s"Nr).0xrrr 9sz!Popen.__init__..__PYVENV_LAUNCHER__wbT)closefdF)"rZget_preparation_data_namerZ CreatePipemsvcrtZopen_osfhandleZget_command_liner getpidjoinZget_executableWINENVrsys executable_base_executableenvironcopyopenZ CreateProcessrpid returncode_handleintsentinelrZFinalizer finalizerrrdump)selfZ process_objZ prep_dataZrhandleZwhandleZwfdcmdZ python_exeenvZto_childZhpZhtr'tidrrr__init__,sT          zPopen.__init__cCs|tkstt||jSr )rAssertionErrorrZ duplicater+)r.rrrrduplicate_for_childaszPopen.duplicate_for_childNcCst|jdkrn|dkrtj}ntdt|dd}tt|j|}|tjkrnt|j}|t krht j }||_|jS)Nrig?) r(rZINFINITEmaxr*ZWaitForSingleObjectr)Z WAIT_OBJECT_0ZGetExitCodeProcess TERMINATEsignalSIGTERM)r.timeoutZmsecsrescoderrrwaites   z Popen.waitcCs |jddS)Nrr9)r<r.rrrpollusz Popen.pollcCsL|jdkrHztt|jtWn&tk rF|jdddkrBYnXdS)Ng?r=)r(rZTerminateProcessr*r)r6OSErrorr<r>rrr terminatexs  zPopen.terminatecCs |dSr )r,r>rrrclosesz Popen.close)N) __name__ __module__ __qualname____doc__methodr2r4r<r?rAkillrBrrrrr&s5 )r rr7r!rcontextrrrrr__all__r6platformgetattrZWINEXEr"lowerendswithZ WINSERVICErr#r robjectrrrrrs   __pycache__/popen_forkserver.cpython-38.opt-1.pyc000064400000004600147577350250015753 0ustar00U ,a@sddlZddlZddlmZmZejs.edddlmZddlm Z ddlm Z ddlm Z d gZ Gd d d e ZGd d d e jZdS) N) reductionset_spawning_popenz,No support for sending fds between processes) forkserver) popen_fork)spawn)utilPopenc@seZdZddZddZdS)_DupFdcCs ||_dSN)ind)selfr rE/opt/alt/python38/lib64/python3.8/multiprocessing/popen_forkserver.py__init__sz_DupFd.__init__cCst|jSr )rZget_inherited_fdsr )r rrrdetachsz _DupFd.detachN)__name__ __module__ __qualname__rrrrrrr sr csBeZdZdZeZfddZddZddZe j fdd Z Z S) r rcsg|_t|dSr )_fdssuperr)r process_obj __class__rrr!szPopen.__init__cCs|j|t|jdS)Nr)rappendlen)r fdrrrduplicate_for_child%s zPopen.duplicate_for_childc Cst|j}t}t|zt||t||W5tdXt |j \|_ }t |}t|tj||j f|_t|ddd}||W5QRXt|j |_dS)NwbT)closefd)rZget_preparation_data_nameioBytesIOrrdumprZconnect_to_new_processrsentinelosduprZFinalizeZ close_fds finalizeropenwrite getbuffer read_signedpid)r rZ prep_dataZbufwZ _parent_wfrrr_launch)s     z Popen._launchc Csr|jdkrlddlm}|tjkr$dnd}||jg|s:dSzt|j|_Wntt fk rjd|_YnX|jS)Nr)wait) returncodeZmultiprocessing.connectionr0r%WNOHANGr$rr+OSErrorEOFError)r flagr0Ztimeoutrrrpoll=s   z Popen.poll) rrrmethodr ZDupFdrrr/r%r3r7 __classcell__rrrrr s  )r!r%contextrrZHAVE_SEND_HANDLE ImportErrorrrrr__all__objectr r rrrrs     __pycache__/connection.cpython-38.opt-1.pyc000064400000060665147577350250014536 0ustar00U ,a{@sddddgZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z m Z dd lmZejZz$ddlZdd lmZmZmZmZWn$ek rejd kr‚dZYnXd Zd ZeZdZdgZeedrdZedg7Zejd krdZedg7ZefddZ ddZ!ddZ"ddZ#ddZ$GdddZ%erhGddde%Z&Gdd d e%Z'Gd!dde(Z)dOd"dZ*ejd krdPd$dZ+n dQd%dZ+Gd&d'd'e(Z,d(d)Z-ejd krGd*d+d+e(Z.d,d-Z/d.Z0d/Z1d0Z2d1Z3d2d3Z4d4d5Z5Gd6d7d7e(Z6d8d9Z7d:d;Z8Gdd?Z:ejd krtd@dAZ;ejdRdBdZ?n,ddl@Z@ee@dCre@jAZBne@jCZBdSdDdZ?ejd krdEdFZDdGdHZEeFe'eDdIdJZGdKdLZHeFe&eGndMdFZDdNdHZEeFe'eDdS)TClientListenerPipewaitN)util)AuthenticationErrorBufferTooShort) reduction) WAIT_OBJECT_0WAIT_ABANDONED_0 WAIT_TIMEOUTINFINITEwin32i g4@AF_INETAF_UNIXAF_PIPEcCs t|SNtime monotonic)timeoutr?/opt/alt/python38/lib64/python3.8/multiprocessing/connection.py _init_timeout;srcCs t|kSrr)trrr_check_timeout>srcCsX|dkr dS|dkr&tjdtdS|dkrLtjdtttfddStd d S) z? Return an arbitrary free address for the given family r)Z localhostrrz listener-)prefixdirrz\\.\pipe\pyc-%d-%d-zunrecognized familyN) tempfileZmktemprZ get_temp_dirosgetpidnext _mmap_counter ValueErrorfamilyrrrarbitrary_addressEsr(cCsJtjdkr|dkrtd|tjdkrF|dkrFtt|sFtd|dS)zD Checks if the family is valid for the current environment. rrzFamily %s is not recognized.rN)sysplatformr%hasattrsocketr&rrr_validate_familySs   r-cCsTt|tkrdSt|tkr*|dr*dSt|tks@t|rDdStd|dS)z] Return the types of the address This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE' rz\\rrzaddress type of %r unrecognizedN)typetuplestr startswithris_abstract_socket_namespacer%)addressrrr address_type_s r4c@seZdZdZd+ddZddZddZd d Zd d Zd dZ e ddZ e ddZ e ddZ ddZddZd,ddZddZd-ddZd.d d!Zd"d#Zd/d%d&Zd'd(Zd)d*ZdS)0_ConnectionBaseNTcCs>|}|dkrtd|s(|s(td||_||_||_dS)Nrzinvalid handlez6at least one of `readable` and `writable` must be True) __index__r%_handle _readable _writable)selfhandlereadablewritablerrr__init__usz_ConnectionBase.__init__cCs|jdk r|dSrr7_closer:rrr__del__s z_ConnectionBase.__del__cCs|jdkrtddS)Nzhandle is closed)r7OSErrorrArrr _check_closeds z_ConnectionBase._check_closedcCs|jstddS)Nzconnection is write-only)r8rCrArrr_check_readablesz_ConnectionBase._check_readablecCs|jstddS)Nzconnection is read-only)r9rCrArrr_check_writablesz_ConnectionBase._check_writablecCs"|jrd|_n|tddS)NFzbad message length)r9r8closerCrArrr_bad_message_lengthsz#_ConnectionBase._bad_message_lengthcCs |jdkS)z True if the connection is closedNr7rArrrclosedsz_ConnectionBase.closedcCs|jS)z"True if the connection is readable)r8rArrrr<sz_ConnectionBase.readablecCs|jS)z"True if the connection is writable)r9rArrrr=sz_ConnectionBase.writablecCs||jS)z+File descriptor or handle of the connection)rDr7rArrrfilenosz_ConnectionBase.filenocCs$|jdk r z |W5d|_XdS)zClose the connectionNr?rArrrrGs  z_ConnectionBase.closercCs||t|}|jdkr.tt|}t|}|dkrFtd||krVtd|dkrh||}n&|dkrztdn|||krtd|||||dS)z,Send the bytes data from a bytes-like objectrrzoffset is negativezbuffer length < offsetNzsize is negativezbuffer length < offset + size)rDrF memoryviewitemsizebyteslenr% _send_bytes)r:bufoffsetsizemnrrr send_bytess"     z_ConnectionBase.send_bytescCs$|||t|dS)zSend a (picklable) objectN)rDrFrP_ForkingPicklerdumpsr:objrrrsendsz_ConnectionBase.sendcCsJ|||dk r(|dkr(td||}|dkrB||S)z7 Receive bytes data as a bytes object. Nrznegative maxlength)rDrEr% _recv_bytesrHgetvalue)r:Z maxlengthrQrrr recv_bytess z_ConnectionBase.recv_bytesc Cs||t|}|j}|t|}|dkr>tdn||krNtd|}|}|||krvt| | d| |||||||W5QRSQRXdS)zq Receive bytes data into a writeable bytes-like object. Return the number of bytes read. rznegative offsetzoffset too largeN) rDrErLrMrOr%r\tellr r]seekreadinto)r:rQrRrTrMZbytesizeresultrSrrrrecv_bytes_intos$        z_ConnectionBase.recv_bytes_intocCs&|||}t|S)zReceive a (picklable) object)rDrEr\rWloads getbuffer)r:rQrrrrecvsz_ConnectionBase.recvcCs||||S)z/Whether there is any input available to be read)rDrE_pollr:rrrrpollsz_ConnectionBase.pollcCs|SrrrArrr __enter__sz_ConnectionBase.__enter__cCs |dSrrGr:exc_type exc_valueZexc_tbrrr__exit__sz_ConnectionBase.__exit__)TT)rN)N)r)rg)__name__ __module__ __qualname__r7r>rBrDrErFrHpropertyrJr<r=rKrGrVr[r^rcrfrjrkrprrrrr5rs.       r5c@sDeZdZdZdZejfddZddZddd Z d d Z d d Z dS)PipeConnectionz Connection class based on a Windows named pipe. Overlapped I/O is used, so the handles must have been created with FILE_FLAG_OVERLAPPED. FcCs||jdSrrI)r:Z _CloseHandlerrrr@szPipeConnection._closec Cshtj|j|dd\}}z      zPipeConnection._recv_bytescCs.|jst|jddkrdStt|g|S)NrT)rrx PeekNamedPiper7boolrrirrrrhFs zPipeConnection._pollcCs|}t}||t|jd}|dk rJt|||krJ|tj |j|dd\}}| d\}}|||S)NrTrv) rerrrrxrr7rOrHrry)r:r~rrQrleftrZrbytesrrrrLs zPipeConnection._get_more_data)N) rqrrrs__doc__rrx CloseHandler@rPr\rhrrrrrru s ruc@s|eZdZdZer,ejfddZejZ ej Z ne j fddZe jZ e jZ e fddZe fddZd d Zdd d ZddZd S) Connectionzo Connection class based on an arbitrary file descriptor (Unix only), or a socket handle (Windows). cCs||jdSrrIr:r@rrrr@cszConnection._closecCs||jdSrrIrrrrr@hscCs8t|}||j|}||8}|dkr&q4||d}qdSNr)rOr7)r:rQr remainingrUrrr_sendms  zConnection._sendcCsbt}|j}|}|dkr^|||}t|}|dkrJ||krBtntd||||8}q|S)Nrzgot end of file during message)rrr7rOrrCr)r:rSreadrQr;rchunkrUrrr_recvvs   zConnection._recvcCst|}|dkrHtdd}td|}||||||n8td|}|dkrr||||n|||dS)Ni!i!Qi@)rOstructZpackr)r:rQrUZ pre_headerheaderrrrrPs        zConnection._send_bytesNcCs^|d}td|\}|dkr@|d}td|\}|dk rT||krTdS||S)Nrrr)rrZunpackr])r:rrQrSrrrr\s  zConnection._recv_bytescCst|g|}t|Sr)rr)r:rrrrrrhs zConnection._poll)N)rqrrrsrrx_multiprocessingZ closesocketr@r[Z_writerfZ_readr!rGrrrrrPr\rhrrrrr\s  rc@sReZdZdZdddZddZdd Zed d Zed d Z ddZ ddZ dS)rz Returns a listener object. This is a wrapper for a bound socket which is 'listening' for connections, or for a Windows named pipe. NrcCsp|p|rt|pt}|pt|}t||dkr>t|||_nt||||_|dk rft|tsft d||_ dS)Nrauthkey should be a byte string) r4default_familyr(r- PipeListener _listenerSocketListener isinstancerN TypeError_authkey)r:r3r'backlogauthkeyrrrr>s zListener.__init__cCs>|jdkrtd|j}|jr:t||jt||j|S)zz Accept a connection on the bound socket or named pipe of `self`. Returns a `Connection` object. Nzlistener is closed)rrCacceptrdeliver_challengeanswer_challenge)r:crrrrs    zListener.acceptcCs |j}|dk rd|_|dS)zA Close the bound socket or named pipe of `self`. N)rrG)r:ZlistenerrrrrGszListener.closecCs|jjSr)r_addressrArrrr3szListener.addresscCs|jjSr)r_last_acceptedrArrr last_acceptedszListener.last_acceptedcCs|SrrrArrrrkszListener.__enter__cCs |dSrrlrmrrrrpszListener.__exit__)NNrN) rqrrrsrr>rrGrtr3rrkrprrrrrs    cCsh|p t|}t||dkr&t|}nt|}|dk rHt|tsHtd|dk rdt||t|||S)z= Returns a connection to the address of a `Listener` rNr) r4r- PipeClient SocketClientrrNrrr)r3r'rrrrrrs    TcCsj|r>t\}}|d|dt|}t|}n$t\}}t|dd}t|dd}||fS)L Returns pair of connection objects at either end of a pipe TFr=r<)r,Z socketpair setblockingrdetachr!pipe)duplexs1s2c1c2Zfd1Zfd2rrrrs       c Cstd}|r*tj}tjtjB}tt}}ntj}tj}dt}}t||tjBtj Btj tj Btj Bd||tj tj}t||dtjtjtjtj}t|tj ddtj|dd}|d\} } t||d} t||d} | | fS) rrrrNTrvrr)r(rxPIPE_ACCESS_DUPLEX GENERIC_READ GENERIC_WRITEBUFSIZEZPIPE_ACCESS_INBOUNDCreateNamedPipeFILE_FLAG_OVERLAPPEDFILE_FLAG_FIRST_PIPE_INSTANCEPIPE_TYPE_MESSAGEPIPE_READMODE_MESSAGE PIPE_WAITNMPWAIT_WAIT_FOREVERNULL CreateFile OPEN_EXISTINGSetNamedPipeHandleStateConnectNamedPiperyru) rr3ZopenmodeaccessZobsizeZibsizeZh1Zh2rw_rrrrrrrsT       c@s*eZdZdZd ddZddZddZd S) rzO Representation of a socket which is bound to an address and listening rcCsttt||_zRtjdkr2|jtjtjd|jd|j ||j ||j |_ Wn t k r|jYnX||_d|_|dkrt|stj|tj|fdd|_nd|_dS)NposixrTrrargsZ exitpriority)r,getattr_socketr!nameZ setsockoptZ SOL_SOCKETZ SO_REUSEADDRrZbindZlistenZ getsocknamerrCrGZ_familyrrr2Finalizeunlink_unlink)r:r3r'rrrrr>Gs0       zSocketListener.__init__cCs&|j\}|_|dt|S)NT)rrrrrrr:srrrr`s zSocketListener.acceptcCs0z|jW5|j}|dk r*d|_|XdSr)rrrG)r:rrrrrGes zSocketListener.closeN)r)rqrrrsrr>rrGrrrrrCs rc CsPt|}ttt|.}|d||t|W5QRSQRXdS)zO Return a connection object connected to the socket given by `address` TN)r4r,rrZconnectrr)r3r'rrrrros   rc@s8eZdZdZd ddZd ddZdd Zed d ZdS)rz0 Representation of a named pipe NcCsL||_|jddg|_d|_td|jtj|tj|j|jfdd|_ dS)NT)firstz listener created with address=%rrr) r _new_handle _handle_queuerr sub_debugrr_finalize_pipe_listenerrG)r:r3rrrrr>s zPipeListener.__init__Fc CsHtjtjB}|r|tjO}t|j|tjtjBtjBtj t t tj tj Sr) rxrrrrrrrrZPIPE_UNLIMITED_INSTANCESrrr)r:rflagsrrrrs   zPipeListener._new_handlec Cs|j||jd}ztj|dd}Wn0tk r^}z|jtjkrNW5d}~XYnPXzrr staticmethodrrrrrrs  rc Cst}z6t|dt|tjtjBdtjtjtjtj}Wqt k rz}z |j tj tj fksht |rjW5d}~XYqXqqt|tjddt|S)zU Return a connection object connected to the pipe given by `address` rN)rrxZ WaitNamedPiperrrrrrrCrZERROR_SEM_TIMEOUTZERROR_PIPE_BUSYrrrru)r3rhrrrrrs8  rs #CHALLENGE#s #WELCOME#s #FAILURE#cCsddl}t|ts$tdt|tt}| t || ||d }| d}||krl| tn| ttddS)Nr Authkey must be bytes, not {0!s}md5zdigest received was wrong)hmacrrNr%formatr.r!urandomMESSAGE_LENGTHrV CHALLENGEnewdigestr^WELCOMEFAILURErZ connectionrrmessagerZresponserrrrs      rcCsxddl}t|ts$tdt||d}|ttd}| ||d }| ||d}|t krtt ddS)Nrrrrzdigest sent was rejected)rrrNr%rr.r^rOrrrrVrrrrrrrs     rc@s$eZdZddZddZddZdS)ConnectionWrappercCs6||_||_||_dD]}t||}t|||qdS)N)rKrGrjr^rV)_conn_dumps_loadsrsetattr)r:connrXrdattrrZrrrr>s  zConnectionWrapper.__init__cCs||}|j|dSr)rrrV)r:rZrrrrr[s zConnectionWrapper.sendcCs|j}||Sr)rr^rrrrrrfs zConnectionWrapper.recvN)rqrrrsr>r[rfrrrrrsrcCst|fdddddS)Nrutf-8) xmlrpclibrXencode)rZrrr _xml_dumps srcCst|d\\}}|S)Nr)rrddecode)rrZmethodrrr _xml_loadssr c@seZdZddZdS) XmlListenercCs"ddlmat|}t|ttSr) xmlrpc.clientclientrrrrrr rYrrrrs  zXmlListener.acceptN)rqrrrsrrrrrr sr cOsddlmatt||ttSr)r r rrrrr )rkwdsrrr XmlClients rcCst|}g}|rt|d|}|tkr*qn\t|krFtt|krTnn |t8}n2t|krptt|kr~nn |t8}ntd|||||dd}d}q |S)NFzShould not get hererr) listrxr{r r rOr rr)ZhandlesrLreadyrrrr_exhaustive_wait%s    rc s^|dkrt}n|dkrd}nt|dd}t|}ig}tt}z@|D]&}zt|d} Wn tk r||<YqPXzt | dd\}}Wn8tk r}zd|j}}|tkrƂW5d}~XYnX|t jkr||||j <qP|rjtddd krjz|d \}}Wn*tk rP}z |j}W5d}~XYnX|sjt |drjd|_ |d}qPt|}W5|D]}|q|D]}z|d\}}Wn6tk r}z|j}|tkrW5d}~XYnX|t j kr|j } ||dkrt |drd|_qXfd d |Dfd d|DS) Wait till an object in object_list is ready/readable. Returns list of those objects in object_list which are ready/readable. Nrrg?TrrK)rFc3s|]}|VqdSrr).0r)waithandle_to_objrr szwait..csg|]}|kr|qSrr)ro) ready_objectsrr swait..)rintrsetr}ryrCr _ready_errorsrxZERROR_OPERATION_ABORTEDr|addr+rrAttributeErrorr6rrzrr)Zgetwindowsversionrkeysupdate) object_listrZov_listZ ready_handlesr~rrrrrKr)rrrr;sh               PollSelectorc Cst}|D]}||tjq |dk r4t|}||}|r\dd|DW5QRS|dk r4|t}|dkr4|W5QRSq4W5QRXdS)rNcSsg|]\}}|jqSr)Zfileobj)rkeyZeventsrrrrsrr) _WaitSelectorregister selectorsZ EVENT_READrrZselect)r$rZselectorrZZdeadlinerrrrrs   c CsZ|}t|tjtj6}ddlm}||}t||j |j ffW5QRSQRXdS)Nr)resource_sharer) rKr,ZfromfdrZ SOCK_STREAMrr*Z DupSocketrebuild_connectionr<r=)rr;rr*dsrrrreduce_connections   r-cCs|}t|||Srrr)r,r<r=Zsockrrrr+sr+cCsB|jr tjnd|jrtjndB}t||}t||j|jffSr) r<rxZFILE_GENERIC_READr=ZFILE_GENERIC_WRITEr Z DupHandlerKrebuild_pipe_connection)rrdhrrrreduce_pipe_connections r1cCs|}t|||Sr)rru)r0r<r=r;rrrr/sr/cCs t|}t||j|jffSr)r ZDupFdrKr+r<r=)rdfrrrr-scCs|}t|||Srr.)r2r<r=fdrrrr+s)NN)T)T)N)N)I__all__rr!r)r,rrr itertoolsrrrrr contextr ZForkingPicklerrWrxr r r r ImportErrorr*rZCONNECTION_TIMEOUTcountr$rZfamiliesr+rrr(r-r4r5rurobjectrrrrrrrrrrrrrrrr r rrrZERROR_NETNAME_DELETEDrrr)r%r'ZSelectSelectorr-r+r(r1r/rrrr s           PT=    ,, 8   P    __pycache__/sharedctypes.cpython-38.opt-1.pyc000064400000015527147577350250015072 0ustar00U ,a@sBddlZddlZddlmZddlmZddlmZmZejZ dddd d d gZ ej ej ej ejejejejejejejejejejejd Zd dZddZddZdddddZddddd Zdd Zd&dd Z ddZ!ddZ"ddZ#dZ$iZ%e&Z'Gddde(Z)Gd d!d!e)Z*Gd"d#d#e)Z+Gd$d%d%e+Z,dS)'N)heap) get_context) reductionassert_spawningRawValueRawArrayValueArraycopy synchronized)cubBhHiIlLqQfdcCs t|}t|}t||dSN)ctypessizeofrZ BufferWrapper rebuild_ctype)type_sizewrapperr"A/opt/alt/python38/lib64/python3.8/multiprocessing/sharedctypes.py _new_value's  r$cGs<t||}t|}tt|dt||j||S)z> Returns a ctypes object allocated from shared memory r)typecode_to_typegetr$rmemset addressofr__init__)typecode_or_typeargsrobjr"r"r#r,s   cCsjt||}t|trD||}t|}tt|dt||S|t |}t|}|j ||SdS)z= Returns a ctypes array allocated from shared memory rN) r%r& isinstanceintr$rr'r(rlenr))r*size_or_initializerrr,resultr"r"r#r6s    T)lockctxcGsXt|f|}|dkr|S|dkr4|p*t}|}t|dsJtd|t|||dS)z6 Return a synchronization wrapper for a Value FTNacquire%r has no method 'acquire'r3)rrRLockhasattrAttributeErrorr )r*r2r3r+r,r"r"r#r Fs   cCsTt||}|dkr|S|dkr0|p&t}|}t|dsFtd|t|||dS)z9 Return a synchronization wrapper for a RawArray Fr4r5r6r7)rrr8r9r:r )r*r0r2r3r,r"r"r#r Ts    cCstt|}|t|d<|S)Nr)r$typerZpointer)r,Znew_objr"r"r#r bs cCs|pt}t|tjr"t|||St|tjrR|jtjkrFt|||St |||St |}z t |}WnRt k rdd|j D}dd|D}d|j}t |tf|}t |<YnX||||SdS)NcSsg|] }|dqS)rr").0Zfieldr"r"r# vsz synchronized..cSsi|]}|t|qSr") make_property)r<namer"r"r# wsz synchronized.. Synchronized)rr-rZ _SimpleCDatarAr _type_c_charSynchronizedStringSynchronizedArrayr; class_cacheKeyErrorZ_fields___name__SynchronizedBase)r,r2r3clsZsclsnamesrZ classnamer"r"r#r gs          cCs@t|t|tjr(t|j|j|jffStt||jdffSdSr) rr-rr rrB_wrapperZ_length_r;)r,r"r"r# reduce_ctypes rMcCs8|dk r||}t|t|}||}||_|Sr)_ForkingPicklerregisterrMZcreate_memoryviewZ from_bufferrL)rr!ZlengthZbufr,r"r"r#rs  rcCsPz t|WStk rJi}tt|fd|||t|<||YSXdS)N) prop_cacherGexectemplate)r?rr"r"r#r>s  r>z def get%s(self): self.acquire() try: return self._obj.%s finally: self.release() def set%s(self, value): self.acquire() try: self._obj.%s = value finally: self.release() %s = property(get%s, set%s) c@sFeZdZdddZddZddZdd Zd d Zd d ZddZ dS)rINcCsB||_|r||_n|ptdd}||_|jj|_|jj|_dS)NT)Zforce)_obj_lockrr8r5release)selfr,r2r3r"r"r#r)s  zSynchronizedBase.__init__cCs |jSr)rU __enter__rWr"r"r#rXszSynchronizedBase.__enter__cGs |jj|Sr)rU__exit__)rWr+r"r"r#rZszSynchronizedBase.__exit__cCst|t|j|jffSr)rr rTrUrYr"r"r# __reduce__szSynchronizedBase.__reduce__cCs|jSrrTrYr"r"r#get_objszSynchronizedBase.get_objcCs|jSr)rUrYr"r"r#get_lockszSynchronizedBase.get_lockcCsdt|j|jfS)Nz<%s wrapper for %s>)r;rHrTrYr"r"r#__repr__szSynchronizedBase.__repr__)NN) rH __module__ __qualname__r)rXrZr[r]r^r_r"r"r"r#rIs rIc@seZdZedZdS)rAvalueN)rHr`rar>rbr"r"r"r#rAsrAc@s4eZdZddZddZddZddZd d Zd S) rEcCs t|jSr)r/rTrYr"r"r#__len__szSynchronizedArray.__len__c Cs&||j|W5QRSQRXdSrr\)rWrr"r"r# __getitem__szSynchronizedArray.__getitem__c Cs|||j|<W5QRXdSrr\)rWrrbr"r"r# __setitem__szSynchronizedArray.__setitem__c Cs*||j||W5QRSQRXdSrr\)rWstartstopr"r"r# __getslice__szSynchronizedArray.__getslice__c Cs"|||j||<W5QRXdSrr\)rWrfrgvaluesr"r"r# __setslice__szSynchronizedArray.__setslice__N)rHr`rarcrdrerhrjr"r"r"r#rEs rEc@seZdZedZedZdS)rDrbrawN)rHr`rar>rbrkr"r"r"r#rDsrD)NN)-rweakrefrrcontextrrZForkingPicklerrN__all__rCZc_wcharZc_byteZc_ubyteZc_shortZc_ushortZc_intZc_uintZc_longZc_ulongZ c_longlongZ c_ulonglongZc_floatZc_doubler%r$rrr r r r rMrr>rSrQWeakKeyDictionaryrFobjectrIrArErDr"r"r"r# sL       __pycache__/managers.cpython-38.pyc000064400000121131147577350250013217 0ustar00U ,a@sBdddddgZddlZddlZddlZddlZddlZddlZddlZddlmZddl m Z d d l m Z d d l mZmZmZd d l mZd d l mZd dl mZd dl mZzd dl mZdZWnek rdZYnXddZeejedddDZedek r.ddZeD]ZeeeqGdddeZdifddZ ddZ!Gd d!d!e"Z#d"d#Z$d$d%Z%Gd&d'd'eZ&Gd(d)d)eZ'e j(e j)fe j*e j+fd*Z,Gd+ddeZ-Gd,d-d-e.Z/Gd.ddeZ0d/d0Z1ifd1d2Z2dld3d4Z3Gd5d6d6eZ4Gd7d8d8eZ5dmd9d:Z6Gd;d<dd>e0Z8Gd?d@d@e8Z9GdAdBdBe0Z:GdCdDdDe0Z;GdEdFdFe0ZGdKdLdLe>Z?e2dMdNZ@dOdPie@_Ae2dQdRZBe2dSdTZCdUdUdUdPdPdVeC_AGdWdSdSeCZDGdXdde-ZEeEdYejFeEdZejFeEd[ejGe:eEd\ejHe8eEd]ejIe8eEd^ejJe8eEd_ejKe8eEd`ejLe9eEdaejMe;eEdbejNeDeEdcee?eEddeOe@eEd8e5e=eEd:e6eBeEd6e4e<eEjdPe7ddeeEjdUddfer>GdgdhdhZPGdidjdje&ZQGdkdde-ZRdS)n BaseManager SyncManager BaseProxyTokenSharedMemoryManagerN)getpid) format_exc) connection) reductionget_spawning_popen ProcessError)pool)process)util) get_context) shared_memoryTFcCstj|j|ffSN)arraytypecodetobytes)ar=/opt/alt/python38/lib64/python3.8/multiprocessing/managers.py reduce_array-srcCsg|]}tti|qSr)typegetattr.0namerrr 1sr )itemskeysvaluescCstt|ffSr)listobjrrrrebuild_as_list3sr'c@s4eZdZdZdZddZddZddZd d Zd S) rz3 Type to uniquely identify a shared object typeidaddressidcCs||||_|_|_dSrr()selfr)r*r+rrr__init__BszToken.__init__cCs|j|j|jfSrr(r,rrr __getstate__EszToken.__getstate__cCs|\|_|_|_dSrr(r,staterrr __setstate__HszToken.__setstate__cCsd|jj|j|j|jfS)Nz %s(typeid=%r, address=%r, id=%r)) __class____name__r)r*r+r.rrr__repr__KszToken.__repr__N) r4 __module__ __qualname____doc__ __slots__r-r/r2r5rrrrr<s rcCs8|||||f|\}}|dkr*|St||dS)zL Send a message to manager using connection `c` and return response #RETURNN)sendrecvconvert_to_error)cr+ methodnameargskwdskindresultrrrdispatchSs  rDcCsd|dkr |S|dkrRt|ts4td||t||dkrHtd|St|Sntd|SdS)N#ERROR) #TRACEBACK#UNSERIALIZABLEz.Result {0!r} (kind '{1}') type is {2}, not strrGzUnserializable message: %s zUnrecognized message type {!r}) isinstancestr TypeErrorformatr RemoteError ValueError)rBrCrrrr=]s   r=c@seZdZddZdS)rLcCsdt|jddS)NzM --------------------------------------------------------------------------- rzK---------------------------------------------------------------------------)rIr@r.rrr__str__mszRemoteError.__str__N)r4r6r7rNrrrrrLlsrLcCs2g}t|D] }t||}t|r ||q |S)z4 Return a list of names of methods of `obj` )dirrcallableappend)r&temprfuncrrr all_methodsts    rTcCsddt|DS)zP Return a list of names of methods of `obj` which do not start with '_' cSsg|]}|ddkr|qS)r_rrrrrr s z"public_methods..)rTr%rrrpublic_methodssrVc @seZdZdZdddddddd d g Zd d Zd dZddZddZddZ ddZ ddZ ddZ e e e dZ ddZddZd d!Zd"d#Zd$d%Zd&e_d'd(Zd)d*Zd+d,Zd-d.Zd/S)0ServerzM Server class which runs in a process controlled by a manager object shutdowncreateaccept_connection get_methods debug_infonumber_of_objectsdummyincrefdecrefcCsxt|tstd|t|||_t||_t |\}}||dd|_ |j j |_ ddi|_ i|_ i|_t|_dS)Nz&Authkey {0!r} is type {1!s}, not bytes)r*Zbacklog0Nr)rHbytesrJrKrregistryrAuthenticationStringauthkeylistener_clientlistenerr* id_to_objid_to_refcountid_to_local_proxy_obj threadingLockmutex)r,rer*rg serializerListenerClientrrrr-s      zServer.__init__c Cst|_|t_zVtj|jd}d|_|z|jsL|jdq4Wnttfk rfYnXW5tjtjkrt dtjt_tj t_ t dXdS)z( Run the server forever zresetting stdout, stderrr)targetTr N)rmEvent stop_eventrcurrent_process_manager_serversysstdout __stdout__rdebug __stderr__stderrexitThreadaccepterdaemonstartis_setwaitKeyboardInterrupt SystemExit)r,rrrr serve_forevers       zServer.serve_forevercCsNz|j}Wntk r&YqYnXtj|j|fd}d|_|qdS)Nrsr@T)riZacceptOSErrorrmrhandle_requestrr)r,r>trrrrs zServer.accepterc CsLd}}}zTt||jt||j|}|\}}}}||jksTtd|t||}Wntk r~dt f} Yn>Xz||f||}Wntk rdt f} Yn Xd|f} z| | Wnttk r>} zTz| dt fWntk rYnXt d| t d|t d| W5d} ~ XYnX| dS)z) Handle a new connection Nz%r unrecognizedrFr:zFailure to send message: %rz ... request was %r ... exception was %r)r Zdeliver_challengergZanswer_challenger<publicAssertionErrorr Exceptionrr;rinfoclose) r,r>funcnamerCrequestignorer@rArSmsgerrrrs4    zServer.handle_requestc Cstdtj|j}|j}|j}|j szBd}}|}|\}}} } z||\}} } Wn^t k r} z@z|j |\}} } Wn&t k r}z| W5d}~XYnXW5d} ~ XYnX|| krt d|t || ft||}z|| | }Wn,tk r"}z d|f}W5d}~XYnPX| o4| |d}|rj||||\}}t||j|}d||ff}nd|f}Wnt k r|dkrdtf}nNz,|j|}|||||f| | }d|f}Wn tk rdtf}YnXYnPtk rtdtjtd Yn tk r<dtf}YnXzDz ||Wn2tk r~}z|d tfW5d}~XYnXWq$tk r}z@td tjtd |td ||tdW5d}~XYq$Xq$dS)zQ Handle requests from the proxies in a particular process/thread z$starting server thread to service %rNz+method %r of %r object is not in exposed=%rrE#PROXYr:rFz$got EOF -- exiting thread serving %rrrGzexception in thread serving %rz ... message was %rrr )rr{rmcurrent_threadrr<r;rjrurKeyErrorrlAttributeErrorrrrgetrYrr*rfallback_mappingEOFErrorrxr~rr)r,connr<r;rjr?r&ridentr@rAexposed gettypeidkeZ second_keZfunctionresrrr)ZridentZrexposedtokenZ fallback_funcrCrrr serve_clients   (        $  zServer.serve_clientcCs|Srrr,rrr&rrrfallback_getvalue5szServer.fallback_getvaluecCst|SrrIrrrr fallback_str8szServer.fallback_strcCst|Sr)reprrrrr fallback_repr;szServer.fallback_repr)rNr5 #GETVALUEcCsdSrrr,r>rrrr^Dsz Server.dummyc Cs|jtg}t|j}||D]<}|dkr&|d||j|t|j|dddfq&d|W5QRSQRXdS)zO Return some info --- useful to spot problems with refcounting rbz %s: refcount=%s %srNK ) ror$rkr"sortrQrIrjjoin)r,r>rCr"rrrrr\Gs zServer.debug_infocCs t|jS)z* Number of shared objects )lenrkrrrrr]WszServer.number_of_objectscCsLz:ztd|dWnddl}|YnXW5|jXdS)z' Shutdown this process z!manager received shutdown messager:NrN)rusetrr{r; traceback print_exc)r,r>rrrrrX^s zServer.shutdownc Ost|dkr|^}}}}n|s(tdnd|krDtdt|d|d}t|dkr~|^}}}ddl}|jd tdd nFd |krtdt|d|d }|^}}ddl}|jd tdd t|}|j|j|\}}}} |dkr|st|dkr t d |d} n |||} |dkr2t | }|dk rlt |t s\td |t|t|t|}dt| } td|| | t||f|j| <| |jkrd|j| <W5QRX||| | t|fS)z> Create a new shared object and return its id z8descriptor 'create' of 'Server' object needs an argumentr)7create expected at least 2 positional arguments, got %dr rNz2Passing 'typeid' as keyword argument is deprecated) stacklevelr>z-Passing 'c' as keyword argument is deprecatedz4Without callable, must have one non-keyword argumentz,Method_to_typeid {0!r}: type {1!s}, not dictz%xz&%r callable returned object with id %r)rrJpopwarningswarnDeprecationWarningtuplerorerMrVrHdictrKrr$r+rr{rrjrkr_) r@rAr,r>r)rrPrmethod_to_typeid proxytyper&rrrrrYksp                  z Server.createz$($self, c, typeid, /, *args, **kwds)cCst|j|jdS)zL Return the methods of the shared object indicated by token r )rrjr+)r,r>rrrrr[szServer.get_methodscCs"|t_|d||dS)z= Spawn a new thread to serve this connection rN)rmrrr;r)r,r>rrrrrZs  zServer.accept_connectionc Cs|jz|j|d7<Wnhtk r}zJ||jkrrd|j|<|j||j|<|j|\}}}td|n|W5d}~XYnXW5QRXdS)Nr z&Server re-enabled tracking & INCREF %r)rorkrrlrjrr{)r,r>rrr&rrrrrr_s  z Server.increfc Cs||jkr$||jkr$td|dS|jZ|j|dkrXtd||j||j||j|d8<|j|dkr|j|=W5QRX||jkrd|j|<td||j|j|=W5QRXdS)NzServer DECREF skipping %rrz+Id {0!s} ({1!r}) has refcount {2:n}, not 1+r )NrNzdisposing of obj with id %r)rkrlrr{rorrKrj)r,r>rrrrr`s,     z Server.decrefN)r4r6r7r8rr-rrrrrrrrr^r\r]rXrY__text_signature__r[rZr_r`rrrrrWs< "Q =rWc@seZdZdgZdZdZdZdS)Statevaluerr rN)r4r6r7r9INITIALSTARTEDSHUTDOWNrrrrrsr)pickleZ xmlrpclibc@seZdZdZiZeZd"ddZddZdd Z d#d d Z e d$d dZ ddZ d%ddZddZddZddZddZeddZeddZe d&d d!ZdS)'rz! Base class for managers NrcCs\|dkrtj}||_t||_t|_tj|j_ ||_ t |\|_ |_ |pTt|_dSr)rrvrg_addressrf_authkeyr_staterr _serializerrhZ _Listener_Clientr_ctx)r,r*rgrpZctxrrrr-s   zBaseManager.__init__cCsf|jjtjkrP|jjtjkr&tdn*|jjtjkr>tdntd|jjt|j |j |j |j S)zX Return server object with serve_forever() method and address attribute Already started serverManager has shut downUnknown state {!r}) rrrrrr rrKrW _registryrrrr.rrr get_servers    zBaseManager.get_servercCs8t|j\}}||j|jd}t|ddtj|j_dS)z> Connect manager object to the server process rgNr^) rhrrrrDrrrr)r,rqrrrrrrconnects zBaseManager.connectrc Cs4|jjtjkrP|jjtjkr&tdn*|jjtjkr>tdntd|jj|dk rht|sht dt j dd\}}|j j t|j|j|j|j|j|||fd|_d d d |jjD}t|jd ||j_|j|||_|tj|j_tj|t|j|j|j|j|j|jfd d|_ dS)z@ Spawn a server process for this manager object rrrNzinitializer must be a callableF)Zduplexr:css|]}t|VqdSrr)rirrr Asz$BaseManager.start..-rr@Z exitpriority)!rrrrrr rrKrPrJr ZPiperZProcessr _run_serverrrrr_processrZ _identityr4rrrr<rFinalize_finalize_managerrrX)r, initializerinitargsreaderwriterrrrrr(sH        zBaseManager.startc Cs^ttjtj|dk r |||||||}||j|td|j| dS)z@ Create a server, report its address and run it Nzmanager serving at %r) signalSIGINTSIG_IGN_Serverr;r*rrrr) clsrer*rgrprrrserverrrrrSs zBaseManager._run_servercOsd|jjtjkstd|j|j|jd}zt |dd|f||\}}W5|Xt ||j||fS)zP Create a new shared object; return the token and exposed tuple zserver not yet startedrNrY) rrrrrrrrrrDr)r,r)r@rArr+rrrr_createjs  zBaseManager._createcCs*|jdk r&|j||js&d|_dS)zC Join the manager process (if it has been spawned) N)rris_aliver,timeoutrrrrvs   zBaseManager.joincCs2|j|j|jd}zt|ddWS|XdS)zS Return some info about the servers shared objects and connections rNr\rrrrrDr,rrrr _debug_infoszBaseManager._debug_infocCs2|j|j|jd}zt|ddWS|XdS)z5 Return the number of shared objects rNr]rrrrr_number_of_objectsszBaseManager._number_of_objectscCsj|jjtjkr||jjtjkrf|jjtjkr.temp) __dict__rcopy AutoProxyrr$r!rrIrr4setattr) rr)rPrrr create_methodkeyrrRrrrregisters*     zBaseManager.register)NNrN)Nr)Nr)N)NNNNT)r4r6r7r8rrWrr-rrr classmethodrrrrrrr staticmethodrpropertyr*rrrrrrs8  +       c@seZdZddZddZdS)ProcessLocalSetcCst|dddS)NcSs|Sr)clearr%rrrz*ProcessLocalSet.__init__..)rregister_after_forkr.rrrr-szProcessLocalSet.__init__cCs t|dfSrc)rr.rrr __reduce__szProcessLocalSet.__reduce__N)r4r6r7r-rrrrrr sr c@seZdZdZiZeZdddZddZ d ifd d Z d d Z ddZ e ddZddZddZddZddZddZdS)rz. A base for proxies of shared objects NTFc Cstj8tj|jd}|dkr:ttf}|tj|j<W5QRX|d|_|d|_ ||_ |j j |_ ||_ ||_t|d|_||_|dk rt||_n"|j dk r|j j|_n tj|_|r|t|tjdS)Nrr )r_mutexrrr*rZForkAwareLocalr _tls_idset_tokenr+_id_managerrrhr_owned_by_managerrrfrrvrg_increfr  _after_fork) r,rrprrgrr_ manager_ownedZ tls_idsetrrrr-s*      zBaseProxy.__init__cCsdtdtj}tjdkr4|dtj7}|j|jj |j d}t |dd|f||j _ dS)Nzmaking connection to managerZ MainThread|rrZ)rr{rrvrrmrrrr*rrDrr )r,rrrrr_connect-s  zBaseProxy._connectrc Csz |jj}Wn6tk rBtdtj||jj}YnX| |j |||f| \}}|dkrp|S|dkr|\}}|j j |jd} |jj|_| ||j|j |j|d} |j|j|jd}t|dd|jf| St||dS) zV Try to call a method of the referent and return a copy of the result z#thread %r does not own a connectionr:rrrNr`)rr rrr{rmrrrr;rr<rrr)rr*rrrrDr+r=) r,r?r@rArrBrCrrrrrrr _callmethod6s6   zBaseProxy._callmethodcCs |dS)z9 Get a copy of the value of the referent rrr.rrr _getvalueTszBaseProxy._getvaluec Cs|jrtd|jjdS|j|jj|jd}t|dd|j ftd|jj|j |j |j oj|j j }tj|tj|j|j||j|j |jfdd|_dS)Nz%owned_by_manager skipped INCREF of %rrr_z INCREF %r r)rrr{rr+rr*rrDrraddrrrr_decrefrZ_close)r,rr1rrrrZs$ zBaseProxy._increfc Cs||j|dks |jtjkrz2td|j||j|d}t|dd|jfWqt k r}ztd|W5d}~XYqXntd|j|st |drtdt j |j|`dS)Nz DECREF %rrr`z... decref failed %sz%DECREF %r -- manager already shutdownr z-thread %r has no more proxies so closing conn)discardr+rrrrr{r*rDrrrmrrr r)rrgr1ZtlsZidsetrrrrrrr!ns   zBaseProxy._decrefc CsHd|_z |Wn0tk rB}ztd|W5d}~XYnXdS)Nzincref failed: %s)rrrrr)r,rrrrrs  zBaseProxy._after_forkcCs^i}tdk r|j|d<t|ddrB|j|d<tt|j|j|ffStt||j|j|ffSdS)Nrg_isautoFr) r rrr RebuildProxyrrrrr,rArrrrs    zBaseProxy.__reduce__cCs|Sr)r)r,Zmemorrr __deepcopy__szBaseProxy.__deepcopy__cCsdt|j|jjt|fS)Nz<%s object, typeid %r at %#x>)rr4rr)r+r.rrrr5szBaseProxy.__repr__cCs:z |dWStk r4t|dddYSXdS)zV Return representation of the referent (or a fall-back if that fails) r5Nrz; '__str__()' failed>)rrrr.rrrrNs zBaseProxy.__str__)NNNTF)r4r6r7r8rrZForkAwareThreadLockrr-rrrrrr!rrr&r5rNrrrrrs( )   cCsttdd}|rT|j|jkrTtd|d|d<|j|jkrT|j|j|j|j<| ddopttdd }|||fd|i|S) z5 Function used for unpickling proxy objects. rwNz*Rebuild a proxy owned by manager, token=%rTrr_Z _inheritingF) rrrvr*rr{r+rlrjr)rSrrprArr_rrrr$s    r$cCspt|}z|||fWStk r*YnXi}|D]}td||f|q4t|tf|}||_||||f<|S)zB Return a proxy type whose methods are given by `exposed` zOdef %s(self, /, *args, **kwds): return self._callmethod(%r, args, kwds))rrexecrrr)rr_cacheZdicZmeth ProxyTyperrr MakeProxyTypes  r*c Cst|d}|dkrB||j|d}zt|dd|f}W5|X|dkrX|dk rX|j}|dkrjtj}td|j |}||||||d} d| _ | S)z* Return an auto-proxy for `token` r Nrr[z AutoProxy[%s])rrgr_T) rhr*rrDrrrvrgr*r)r#) rrprrgrr_rrr)rrrrrs     rc@seZdZddZddZdS) NamespacecKs|j|dSr)rupdater%rrrr-szNamespace.__init__cCsZt|j}g}|D]$\}}|ds|d||fq|d|jjd|fS)NrUz%s=%rz%s(%s)z, ) r$rr! startswithrQrr3r4r)r,r!rRrrrrrr5s  zNamespace.__repr__N)r4r6r7r-r5rrrrr+sr+c@s8eZdZd ddZddZddZdd ZeeeZd S) ValueTcCs||_||_dSr) _typecode_value)r,rrlockrrrr-szValue.__init__cCs|jSrr0r.rrrrsz Value.getcCs ||_dSrr2r,rrrrr sz Value.setcCsdt|j|j|jfS)Nz %s(%r, %r))rr4r/r0r.rrrr5 szValue.__repr__N)T) r4r6r7r-rrr5rrrrrrr.s  r.cCs t||Sr)r)rsequencer1rrrArraysr5c@s8eZdZdZddZddZddZdd Zd d Zd S) IteratorProxy)__next__r;throwrcCs|Srrr.rrr__iter__szIteratorProxy.__iter__cGs |d|S)Nr7rr,r@rrrr7szIteratorProxy.__next__cGs |d|S)Nr;rr:rrrr;szIteratorProxy.sendcGs |d|S)Nr8rr:rrrr8szIteratorProxy.throwcGs |d|S)Nrrr:rrrr!szIteratorProxy.closeN) r4r6r7rr9r7r;r8rrrrrr6s r6c@s2eZdZdZd ddZddZdd Zd d ZdS) AcquirerProxy)acquirereleaseTNcCs"|dkr|fn||f}|d|SNr<r)r,Zblockingrr@rrrr<'szAcquirerProxy.acquirecCs |dSNr=rr.rrrr=*szAcquirerProxy.releasecCs |dSr>rr.rrrr,szAcquirerProxy.__enter__cCs |dSr?rrrrrr.szAcquirerProxy.__exit__)TN)r4r6r7rr<r=rrrrrrr;%s  r;c@s6eZdZdZd ddZd ddZdd Zdd d ZdS)ConditionProxy)r<r=rnotify notify_allNcCs|d|fSNrrrrrrr4szConditionProxy.waitr cCs|d|fS)NrAr)r,nrrrrA6szConditionProxy.notifycCs |dS)NrBrr.rrrrB8szConditionProxy.notify_allcCsd|}|r|S|dk r$t|}nd}d}|s`|dk rN|t}|dkrNq`|||}q,|S)Nr)time monotonicr)r,Z predicaterrCZendtimeZwaittimerrrwait_for:s  zConditionProxy.wait_for)N)r )N)r4r6r7rrrArBrGrrrrr@2s   r@c@s2eZdZdZddZddZddZd d d ZdS) EventProxy)rrr rcCs |dS)Nrrr.rrrrOszEventProxy.is_setcCs |dSNrrr.rrrrQszEventProxy.setcCs |dS)Nr rr.rrrr SszEventProxy.clearNcCs|d|fSrCrrrrrrUszEventProxy.wait)N)r4r6r7rrrr rrrrrrHMs rHc@sNeZdZdZdddZddZddZed d Zed d Z ed dZ dS) BarrierProxy)__getattribute__rabortresetNcCs|d|fSrCrrrrrr[szBarrierProxy.waitcCs |dS)NrLrr.rrrrL]szBarrierProxy.abortcCs |dS)NrMrr.rrrrM_szBarrierProxy.resetcCs |ddS)NrK)partiesrr.rrrrNaszBarrierProxy.partiescCs |ddS)NrK) n_waitingrr.rrrrOdszBarrierProxy.n_waitingcCs |ddS)NrK)brokenrr.rrrrPgszBarrierProxy.broken)N) r4r6r7rrrLrMrrNrOrPrrrrrJYs   rJc@s(eZdZdZddZddZddZdS) NamespaceProxy)rK __setattr__ __delattr__cCs0|ddkrt||St|d}|d|fS)NrrUrrK)objectrKr,r callmethodrrr __getattr__ns   zNamespaceProxy.__getattr__cCs4|ddkrt|||St|d}|d||fS)NrrUrrR)rTrRrK)r,rrrVrrrrRss  zNamespaceProxy.__setattr__cCs0|ddkrt||St|d}|d|fS)NrrUrrS)rTrSrKrUrrrrSxs   zNamespaceProxy.__delattr__N)r4r6r7rrWrRrSrrrrrQlsrQc@s*eZdZdZddZddZeeeZdS) ValueProxy)rrcCs |dS)Nrrr.rrrrszValueProxy.getcCs|d|fSrIrr3rrrrszValueProxy.setN)r4r6r7rrrrrrrrrrXsrX BaseListProxy)__add__ __contains__ __delitem__ __getitem____len____mul__ __reversed____rmul__ __setitem__rQcountextendindexinsertrremovereverser__imul__c@seZdZddZddZdS) ListProxycCs|d|f|S)Nrdrr3rrr__iadd__szListProxy.__iadd__cCs|d|f|S)Nrirr3rrrriszListProxy.__imul__N)r4r6r7rkrirrrrrjsrj DictProxy)r[r\r]r9r^rbr rrr!r"rpopitem setdefaultr,r#r9Iterator ArrayProxy)r^r]rb PoolProxy) Zapply apply_asyncrimapimap_unorderedrmap map_asyncstarmap starmap_asyncrZ AsyncResult)rrrvrxrsrtc@seZdZddZddZdS)rqcCs|Srrr.rrrrszPoolProxy.__enter__cCs |dSr)rrrrrrszPoolProxy.__exit__N)r4r6r7rrrrrrrqsc@seZdZdZdS)ra( Subclass of `BaseManager` which supports a number of shared object types. The types registered are those intended for the synchronization of threads, plus `dict`, `list` and `Namespace`. The `multiprocessing.Manager()` function creates started instances of this class. N)r4r6r7r8rrrrrsQueueZ JoinableQueuertrnRLock SemaphoreBoundedSemaphore ConditionBarrierPoolr$r)rr)rc@sLeZdZdZgfddZddZddZdd Zd d Zd d Z ddZ dS)_SharedMemoryTrackerz+Manages one or more shared memory segments.cCs||_||_dSrZshared_memory_context_name segment_names)r,rrrrrr-sz_SharedMemoryTracker.__init__cCs(td|dt|j|dS)z6Adds the supplied shared memory block name to tracker.zRegister segment  in pid N)rr{rrrQr, segment_namerrrregister_segmentsz%_SharedMemoryTracker.register_segmentcCsBtd|dt|j|t|}||dS)zCalls unlink() on the shared memory block with the supplied name and removes it from the list of blocks being tracked.zDestroy segment rN) rr{rrrgr SharedMemoryrunlink)r,rZsegmentrrrdestroy_segments   z$_SharedMemoryTracker.destroy_segmentcCs"|jddD]}||qdS)zrrrrr.sz SharedMemoryServer.track_segmentcCs|j|dS)zCalls unlink() on the shared memory block with the supplied name and removes it from the tracker instance inside the Server.N)rrrrrrr2sz"SharedMemoryServer.release_segmentcCs|jjS)zbReturns a list of names of shared memory blocks that the Server is currently tracking.)rrrrrrr7sz SharedMemoryServer.list_segmentsN) r4r6r7rWrr-rYrrXrrrrrrrrs rc@s<eZdZdZeZddZddZddZdd Z d d Z d S) raLike SyncManager but uses SharedMemoryServer instead of Server. It provides methods for creating and returning SharedMemory instances and for creating a list-like object (ShareableList) backed by shared memory. It also provides methods that create and return Proxy Objects that support synchronization across processes (i.e. multi-process-safe locks and semaphores). cOsNtjdkrddlm}|tj|f||t|j j dt dS)Nposixr )resource_trackerz created by pid ) rrrZensure_runningrr-rr{r3r4r)r,r@rrrrrr-Is   zSharedMemoryManager.__init__cCst|jjdtdS)Nz.__del__ by pid )rr{r3r4rr.rrrrUszSharedMemoryManager.__del__cCsh|jjtjkrP|jjtjkr&tdn*|jjtjkr>tdntd|jj||j |j |j |j S)z@Better than monkeypatching for now; merge into Server ultimatelyz"Already started SharedMemoryServerz!SharedMemoryManager has shut downr) rrrrrr rrKrrrrrr.rrrrYs    zSharedMemoryManager.get_serverc Csx|j|j|jd\}tjdd|d}zt|dd|jfWn.tk rh}z||W5d}~XYnXW5QRX|S)zoReturns a new SharedMemory instance with the specified size in bytes, to be tracked by the manager.rNT)rYsizer) rrrrrrDr BaseExceptionr)r,rrZsmsrrrrrfs z SharedMemoryManager.SharedMemoryc Csv|j|j|jdZ}t|}zt|dd|jjfWn0tk rf}z|j |W5d}~XYnXW5QRX|S)zReturns a new ShareableList instance populated with the values from the input sequence, to be tracked by the manager.rNr) rrrr ShareableListrDZshmrrr)r,r4rZslrrrrrrs   z!SharedMemoryManager.ShareableListN) r4r6r7r8rrr-rrrrrrrrr=s    )NNNT)T)S__all__rxrmrrZqueuerErrrrrr contextr r r rrrrrZ HAS_SHMEM ImportErrorrrZ view_typesr$r'Z view_typerTrrDr=rrLrTrVrWrrqrrZ XmlListenerZ XmlClientrhrrr rr$r*rr+r.r5r6r;r@rHrJrQrXrYrjrlrrpZ BasePoolProxyrqrryrtrnrzr{r|r}r~rrrrrrrrr s            c   w 4             %8__pycache__/forkserver.cpython-38.opt-1.pyc000064400000020210147577350250014545 0ustar00U ,a0@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl m Z ddl mZddl mZddl mZd d d d gZd ZedZGdddeZdddZddZddZddZeZejZejZejZejZdS)N) connection)process) reduction)resource_tracker)spawn)utilensure_runningget_inherited_fdsconnect_to_new_processset_forkserver_preloadqc@sDeZdZddZddZddZddZd d Zd d Zd dZ dS) ForkServercCs.d|_d|_d|_d|_t|_dg|_dS)N__main__)_forkserver_address_forkserver_alive_fd_forkserver_pid_inherited_fds threadingZLock_lock_preload_modulesselfr?/opt/alt/python38/lib64/python3.8/multiprocessing/forkserver.py__init__"s  zForkServer.__init__c Cs|j|W5QRXdSN)r_stop_unlockedrrrr_stop*szForkServer._stopcCsV|jdkrdSt|jd|_t|jdd|_t|jsLt|jd|_dS)Nr) roscloserwaitpidris_abstract_socket_namespacerunlinkrrrrr/s    zForkServer._stop_unlockedcCs&tdd|jDstd||_dS)z>Set list of module names to try to load in forkserver process.css|]}t|tkVqdSr)typestr).0modrrr @sz4ForkServer.set_forkserver_preload..z&module_names must be a list of stringsN)allr TypeError)rZ modules_namesrrrr >sz!ForkServer.set_forkserver_preloadcCs|jS)zReturn list of fds inherited from parent process. This returns None if the current process was not started by fork server. )rrrrrr DszForkServer.get_inherited_fdsc Cs|t|dtkr tdttj}||jt \}}t \}}|||j t g}||7}zNz&t||||fWW4W5QRSt |t |YnXW5t |t |XW5QRXdS)a;Request forkserver to create a child process. Returns a pair of fds (status_r, data_w). The calling process can read the child process's pid and (eventually) its returncode from status_r. The calling process should write to data_w the pickled preparation and process data. z too many fdsN)r lenMAXFDS_TO_SEND ValueErrorsocketAF_UNIXZconnectrr piperrZgetfdr!rZsendfds)rfdsZclientZparent_rchild_wchild_rZparent_wZallfdsrrrr Ls(        z!ForkServer.connect_to_new_processc s|j~t|jdk r`t|jtj\}}|sBW5QRdSt|jd|_ d|_d|_d}|j rddht d}fdd| D}ni}ttj}td}||t|st|d |t\}}ztzV||g} ||||j |f;}t } | gt} | d |g7} t| | | }Wnt|YnXW5t|X||_ ||_||_W5QRXW5QRXdS) zMake sure that a fork server is running. This can be called from any process. Note that usually a child process will just reuse the forkserver started by its parent, so ensure_running() will do nothing. NzCfrom multiprocessing.forkserver import main; main(%d, %d, %r, **%r) main_pathsys_pathignorecsi|]\}}|kr||qSrr)r'xyZ desired_keysrr sz-ForkServer.ensure_running..r1iz-c)rrr rr r"WNOHANGr!rrrrZget_preparation_dataitemsr0r1rZarbitrary_addressZbindrr#chmodZlistenr2filenoZget_executableZ_args_from_interpreter_flagsZspawnv_passfds) rpidZstatuscmddatalistenerZaddressalive_rZalive_wZ fds_to_passZexeargsrr;rr isN              zForkServer.ensure_runningN) __name__ __module__ __qualname__rrrr r r r rrrrr src Cs|rdd|kr8|dk r8dt_zt|W5t`X|D]&}z t|Wq<tk r`Yqk r}z|j?t?j@krW5d}~XYnXqW5QRXW5QRXdS)zRun forkserver.rNTFcWsdSrr)Z_unusedrrrsigchld_handlerszmain..sigchld_handlercSsi|]\}}|t||qSr)signal)r'sigvalrrrr<szmain..)r@cSsg|]\}}|jqSr)Zfileobj)r'keyZeventsrrr szmain..irzChild {0:n} status is {1:n}z.forkserver: waitpid returned unexpected pid %drzToo many ({0:n}) fds to send)ArZcurrent_processZ _inheritingrZimport_main_path __import__ ImportErrorrZ _close_stdinr r2 set_blockingrKSIGCHLDSIGINTSIG_IGNr> set_wakeup_fdr0r1 selectorsZDefaultSelectorZ getsockname _forkserverrregisterZ EVENT_READZselect SystemExitreadr"r=ChildProcessErrorpop WIFSIGNALEDWTERMSIG WIFEXITEDAssertionErrorformat WEXITSTATUS write_signedBrokenPipeErrorr!warningswarnZacceptrZrecvfdsr.r- RuntimeErrorfork_exitextendvalues _serve_one Exceptionsys excepthookexc_infostderrflushOSErrorerrnoZ ECONNABORTED)Z listener_fdrEZpreloadr6r7modnameZsig_rZsig_wrJhandlersZ old_handlersZ pid_to_fdrDZselectorZrfdsrAstsr4 returncodesr3r5code unused_fdsfderrrmains                         rc Cshtd|D]\}}t||q|D]}t|q,|^t_tj_ t_ t |}t ||}|S)NrP)rKrWr>r r!rYrrZ_resource_trackerZ_fdrduprZ_main) r5r3r}rxrLrMr~Zparent_sentinelr|rrrrn1s    rncCsNd}tj}t||kr@t||t|}|s6td||7}q t|dS)Nzunexpected EOFr) SIGNED_STRUCTsizer-r r\EOFErrorZunpack)r~rCZlengthr{rrr read_signedHs  rcCs<t|}|r8t||}|dkr*td||d}q dS)Nrzshould not get here)rZpackr writeri)r~nmsgnbytesrrrreRs   re)NN) rvr rXrKr0Zstructrprrgrrcontextrrrr__all__r.ZStructrobjectrrrnrrerYr r r r rrrrs>           __pycache__/sharedctypes.cpython-38.pyc000064400000015630147577350250014126 0ustar00U ,a@sBddlZddlZddlmZddlmZddlmZmZejZ dddd d d gZ ej ej ej ejejejejejejejejejejejd Zd dZddZddZdddddZddddd Zdd Zd&dd Z ddZ!ddZ"ddZ#dZ$iZ%e&Z'Gddde(Z)Gd d!d!e)Z*Gd"d#d#e)Z+Gd$d%d%e+Z,dS)'N)heap) get_context) reductionassert_spawningRawValueRawArrayValueArraycopy synchronized)cubBhHiIlLqQfdcCs t|}t|}t||dSN)ctypessizeofrZ BufferWrapper rebuild_ctype)type_sizewrapperr"A/opt/alt/python38/lib64/python3.8/multiprocessing/sharedctypes.py _new_value's  r$cGs<t||}t|}tt|dt||j||S)z> Returns a ctypes object allocated from shared memory r)typecode_to_typegetr$rmemset addressofr__init__)typecode_or_typeargsrobjr"r"r#r,s   cCsjt||}t|trD||}t|}tt|dt||S|t |}t|}|j ||SdS)z= Returns a ctypes array allocated from shared memory rN) r%r& isinstanceintr$rr'r(rlenr))r*size_or_initializerrr,resultr"r"r#r6s    T)lockctxcGsXt|f|}|dkr|S|dkr4|p*t}|}t|dsJtd|t|||dS)z6 Return a synchronization wrapper for a Value FTNacquire%r has no method 'acquire'r3)rrRLockhasattrAttributeErrorr )r*r2r3r+r,r"r"r#r Fs   cCsTt||}|dkr|S|dkr0|p&t}|}t|dsFtd|t|||dS)z9 Return a synchronization wrapper for a RawArray Fr4r5r6r7)rrr8r9r:r )r*r0r2r3r,r"r"r#r Ts    cCstt|}|t|d<|S)Nr)r$typerZpointer)r,Znew_objr"r"r#r bs cCst|trtd|pt}t|tjr4t|||St|tjrd|jtj krXt |||St |||St |}z t |}WnRtk rdd|jD}dd|D}d|j}t |tf|}t |<YnX||||SdS)Nzobject already synchronizedcSsg|] }|dqS)rr").0Zfieldr"r"r# vsz synchronized..cSsi|]}|t|qSr") make_property)r<namer"r"r# wsz synchronized.. Synchronized)r-SynchronizedBaseAssertionErrorrrZ _SimpleCDatarAr _type_c_charSynchronizedStringSynchronizedArrayr; class_cacheKeyErrorZ_fields___name__)r,r2r3clsZsclsnamesrZ classnamer"r"r#r gs"         cCs@t|t|tjr(t|j|j|jffStt||jdffSdSr) rr-rr rrD_wrapperZ_length_r;)r,r"r"r# reduce_ctypes rNcCs8|dk r||}t|t|}||}||_|Sr)_ForkingPicklerregisterrNZcreate_memoryviewZ from_bufferrM)rr!ZlengthZbufr,r"r"r#rs  rcCsPz t|WStk rJi}tt|fd|||t|<||YSXdS)N) prop_cacherIexectemplate)r?rr"r"r#r>s  r>z def get%s(self): self.acquire() try: return self._obj.%s finally: self.release() def set%s(self, value): self.acquire() try: self._obj.%s = value finally: self.release() %s = property(get%s, set%s) c@sFeZdZdddZddZddZdd Zd d Zd d ZddZ dS)rBNcCsB||_|r||_n|ptdd}||_|jj|_|jj|_dS)NT)Zforce)_obj_lockrr8r5release)selfr,r2r3r"r"r#r)s  zSynchronizedBase.__init__cCs |jSr)rV __enter__rXr"r"r#rYszSynchronizedBase.__enter__cGs |jj|Sr)rV__exit__)rXr+r"r"r#r[szSynchronizedBase.__exit__cCst|t|j|jffSr)rr rUrVrZr"r"r# __reduce__szSynchronizedBase.__reduce__cCs|jSrrUrZr"r"r#get_objszSynchronizedBase.get_objcCs|jSr)rVrZr"r"r#get_lockszSynchronizedBase.get_lockcCsdt|j|jfS)Nz<%s wrapper for %s>)r;rJrUrZr"r"r#__repr__szSynchronizedBase.__repr__)NN) rJ __module__ __qualname__r)rYr[r\r^r_r`r"r"r"r#rBs rBc@seZdZedZdS)rAvalueN)rJrarbr>rcr"r"r"r#rAsrAc@s4eZdZddZddZddZddZd d Zd S) rGcCs t|jSr)r/rUrZr"r"r#__len__szSynchronizedArray.__len__c Cs&||j|W5QRSQRXdSrr])rXrr"r"r# __getitem__szSynchronizedArray.__getitem__c Cs|||j|<W5QRXdSrr])rXrrcr"r"r# __setitem__szSynchronizedArray.__setitem__c Cs*||j||W5QRSQRXdSrr])rXstartstopr"r"r# __getslice__szSynchronizedArray.__getslice__c Cs"|||j||<W5QRXdSrr])rXrgrhvaluesr"r"r# __setslice__szSynchronizedArray.__setslice__N)rJrarbrdrerfrirkr"r"r"r#rGs rGc@seZdZedZedZdS)rFrcrawN)rJrarbr>rcrlr"r"r"r#rFsrF)NN)-rweakrefrrcontextrrZForkingPicklerrO__all__rEZc_wcharZc_byteZc_ubyteZc_shortZc_ushortZc_intZc_uintZc_longZc_ulongZ c_longlongZ c_ulonglongZc_floatZc_doubler%r$rrr r r r rNrr>rTrRWeakKeyDictionaryrHobjectrBrArGrFr"r"r"r# sL       __pycache__/resource_tracker.cpython-38.opt-1.pyc000064400000011771147577350250015733 0ustar00U ,a!@sddlZddlZddlZddlZddlZddlmZddlmZdddgZe edZ ej ej fZ d d d iZejd krddlZddlZeejejd GdddeZeZejZejZejZejZddZdS)N)spawn)utilensure_runningregister unregisterpthread_sigmaskZnoopcCsdSNr r r E/opt/alt/python38/lib64/python3.8/multiprocessing/resource_tracker.py!r posix)Z semaphoreZ shared_memoryc@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)ResourceTrackercCst|_d|_d|_dSr ) threadingZLock_lock_fd_pidselfr r r __init__0s zResourceTracker.__init__c CsT|jD|jdkr W5QRdSt|jd|_t|jdd|_W5QRXdS)Nr)rrosclosewaitpidrrr r r _stop5s  zResourceTracker._stopcCs||jSr )rrrr r r getfdBszResourceTracker.getfdc Cst|jb|jdk r~|r*W5QRdSt|jz|jdk rPt|jdWntk rfYnXd|_d|_t dg}z| t j Wntk rYnXd}t\}}zzr| |t}|gt}|d||g7}z&trttjtt|||}W5tr,ttjtXWnt|YnX||_||_W5t|XW5QRXdS)zMake sure that resource tracker process is running. This can be run from any process. Usually a child process will use the resource created by its parent.NrzUresource_tracker: process died unexpectedly, relaunching. Some resources might leak.z:from multiprocessing.resource_tracker import main;main(%d)z-c)rr _check_aliverrrrChildProcessErrorwarningswarnappendsysstderrfileno ExceptionpiperZget_executablerZ_args_from_interpreter_flags _HAVE_SIGMASKsignalr SIG_UNBLOCK_IGNORED_SIGNALS SIG_BLOCKZspawnv_passfds)rZ fds_to_passcmdrwZexeargspidr r r rFsJ         zResourceTracker.ensure_runningcCs2zt|jdWntk r(YdSXdSdS)z;Check that the pipe has not been closed by sending a probe.s PROBE:0:noop FTN)rwriterOSErrorrr r r rs zResourceTracker._check_alivecCs|d||dS)z0Register name of resource with resource tracker.REGISTERN_sendrnamertyper r r rszResourceTracker.registercCs|d||dS)z2Unregister name of resource with resource tracker. UNREGISTERNr3r5r r r rszResourceTracker.unregistercCsB|d|||d}t|dkr0tdt|j|}dS)Nz {0}:{1}:{2} asciiiz name too long)rformatencodelen ValueErrorrr0r)rr+r6r7msgnbytesr r r r4s  zResourceTracker._sendN) __name__ __module__ __qualname__rrrrrrrr4r r r r r.s @ rc Csttjtjttjtjtr2ttjttj tj fD]&}z | Wq>t k rbYq>Xq>ddt D}zt|d}|D]}z|dd\}}}t |d} | dkrtd |d ||d kr|||n2|d kr|||n|d krn td|Wqt k rTztjtWn YnXYqXqW5QRXW5|D]\}}|rztdt||fWnt k rYnX|D]V}zLzt ||Wn6t k r}ztd||fW5d}~XYnXW5XqqnXdS)zRun resource tracker.cSsi|] }|tqSr )set).0r7r r r szmain..zQresource_tracker: There appear to be %d leaked %s objects to clean up at shutdownzresource_tracker: %r: %sNrbr9:zCannot register z. for automatic cleanup: unknown resource type r2r8ZPROBEzunrecognized command %r)r'SIGINTSIG_IGNSIGTERMr&rr(r)r!stdinstdoutrr$_CLEANUP_FUNCSkeysitemsrrr<openstripdecodesplitgetr=addremove RuntimeError excepthookexc_info) fdfcacher7Z rtype_cacher6eliner+Z cleanup_funcr r r mains^      (r_)rr'r!rrrr__all__hasattrr&rHrJr)rMr6Z_multiprocessingZ _posixshmemupdateZ sem_unlinkZ shm_unlinkobjectrZ_resource_trackerrrrrr_r r r r s4      w__pycache__/__init__.cpython-38.opt-1.pyc000064400000001245147577350250014123 0ustar00U ,a@sdddlZddlmZddeejDZeddeDdZd Z d ej kr`ej d ej d <dS) N)contextcCsg|]}|ds|qS)_) startswith).0xr=/opt/alt/python38/lib64/python3.8/multiprocessing/__init__.py s r ccs|]}|ttj|fVqdS)N)getattrr_default_context)rnamerrr sr__main__Z __mp_main__) sysrdirr __all__globalsupdateZSUBDEBUGZ SUBWARNINGmodulesrrrr s  __pycache__/synchronize.cpython-38.opt-1.pyc000064400000025350147577350250014742 0ustar00U ,aZ-@s,ddddddgZddlZddlZddlZddlZddlZdd lmZdd lmZdd lm Z zdd lm Z m Z Wne k re d YnXe ed\ZZej jZGdddeZ Gddde ZGdddeZGddde ZGddde ZGdddeZGdddeZGdddejZdS)LockRLock SemaphoreBoundedSemaphore ConditionEventN)context)process)util)SemLock sem_unlinkzThis platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770.c@s\eZdZeZddZeddZddZ ddZ d d Z d d Z d dZ eddZdS)r c Cs|dkrtj}|}tjdkp*|dk}tdD]>}z t|||| |}|_ Wnt k rlYq4Xq|q4t dt d|j|tjdkrdd} t || |j jdk rdd lm} | |j jd t j|tj|j jfd d dS) Nwin32forkdzcannot find name for semaphorezcreated semlock with handle %scSs|jdSN)_semlock _after_fork)objr@/opt/alt/python38/lib64/python3.8/multiprocessing/synchronize.pyrGsz%SemLock.__init__.._after_forkr)register semaphorer)Z exitpriority)r Z_default_contextZ get_contextZget_start_methodsysplatformrange_multiprocessingr _make_namerFileExistsErrorr debughandle _make_methodsZregister_after_forknameresource_trackerrZFinalize_cleanup) selfkindvaluemaxvaluectxr#Z unlink_nowislrrrrr__init__2s8      zSemLock.__init__cCs"ddlm}t|||ddS)Nr) unregisterr)r$r.r )r#r.rrrr%Ts zSemLock._cleanupcCs|jj|_|jj|_dSr)racquirereleaser&rrrr"Zs zSemLock._make_methodscCs |jSr)r __enter__r1rrrr2^szSemLock.__enter__cGs |jj|Sr)r__exit__r&argsrrrr3aszSemLock.__exit__cCsDt||j}tjdkr,t|j}n|j}||j|j |j fS)Nr) r assert_spawningrrrZget_spawning_popenZduplicate_for_childr!r'r)r#)r&r,hrrr __getstate__ds   zSemLock.__getstate__cCs,tjj||_td|d|dS)Nz recreated blocker with handle %rr)rr Z_rebuildrr r r"r&staterrr __setstate__mszSemLock.__setstate__cCsdtjdttjfS)Nz%s-%sZ semprefix)r current_processZ_confignextr _randrrrrrrszSemLock._make_nameN)__name__ __module__ __qualname__tempfileZ_RandomNameSequencer>r- staticmethodr%r"r2r3r8r;rrrrrr .s"  r c@s&eZdZd ddZddZddZdS) rrcCstj|t|t|ddSNr*)r r- SEMAPHORE SEM_VALUE_MAXr&r(r*rrrr-}szSemaphore.__init__cCs |jSr)r _get_valuer1rrr get_valueszSemaphore.get_valuecCs8z|j}Wntk r&d}YnXd|jj|fS)Nunknownz<%s(value=%s)>)rrI Exception __class__r?r&r(rrr__repr__s  zSemaphore.__repr__N)r)r?r@rAr-rJrOrrrrr{s c@seZdZdddZddZdS)rrcCstj|t|||ddSrDr r-rFrHrrrr-szBoundedSemaphore.__init__cCs>z|j}Wntk r&d}YnXd|jj||jjfS)NrKz<%s(value=%s, maxvalue=%s)>)rrIrLrMr?r)rNrrrrOs zBoundedSemaphore.__repr__N)rr?r@rAr-rOrrrrrs c@seZdZddZddZdS)rcCstj|tdd|ddSNrrErPr&r*rrrr-sz Lock.__init__cCszf|jr8tj}tjdkrd|dtj7}n,|jdkrLd}n|jdkr`d}nd}Wnt k r~d}YnXd |j j |fS) N MainThread|rNonerSomeOtherThreadSomeOtherProcessrKz<%s(owner=%s)>) r_is_miner r<r# threadingcurrent_threadrI_countrLrMr?)r&r#rrrrOs   z Lock.__repr__NrQrrrrrsc@seZdZddZddZdS)rcCstj|tdd|ddSrR)r r-RECURSIVE_MUTEXrSrrrr-szRLock.__init__cCsz||jrBtj}tjdkr6|dtj7}|j}n8|jdkrZd\}}n |jdkrrd\}}nd\}}Wnt k rd\}}YnXd |j j ||fS) NrTrUr)rVrr)rWnonzero)rXr^)rKrK <%s(%s, %s)>) rrYr r<r#rZr[r\rIrLrMr?)r&r#countrrrrOs      zRLock.__repr__NrQrrrrrsc@sleZdZdddZddZddZdd Zd d Zd d ZddZ dddZ dddZ ddZ dddZ dS)rNcCs>|p ||_|d|_|d|_|d|_|dSNr)r_lockr_sleeping_count _woken_count_wait_semaphorer")r&lockr*rrrr-s    zCondition.__init__cCst||j|j|j|jfSr)r r6rbrcrdrer1rrrr8s  zCondition.__getstate__cCs |\|_|_|_|_|dSr)rbrcrdrer"r9rrrr;s  zCondition.__setstate__cCs |jSr)rbr2r1rrrr2szCondition.__enter__cGs |jj|Sr)rbr3r4rrrr3szCondition.__exit__cCs|jj|_|jj|_dSr)rbr/r0r1rrrr"s zCondition._make_methodscCsJz|jj|jj}Wntk r4d}YnXd|jj|j|fS)NrKr_)rcrrIrdrLrMr?rb)r&Z num_waitersrrrrOs   zCondition.__repr__c Csj|j|jj}t|D]}|jqz|jd|WS|jt|D]}|jqTXdS)NT) rcr0rbrr\rrdr/re)r&timeoutr`r+rrrwaits      zCondition.waitrcCst|jdr|jd}qd}||krF|jdrF|j|d7}q|rpt|D]}|jqR|jdrpqbdS)NFrr)rdr/rcrer0r)r&nresZsleepersr+rrrnotifys       zCondition.notifycCs|jtjddS)N)ri)rkrmaxsizer1rrr notify_all(szCondition.notify_allcCsd|}|r|S|dk r$t|}nd}d}|s`|dk rN|t}|dkrNq`|||}q,|Sra)time monotonicrh)r&Z predicatergresultZendtimeZwaittimerrrwait_for+s  zCondition.wait_for)N)N)r)N)r?r@rAr-r8r;r2r3r"rOrhrkrmrqrrrrrs   c@s6eZdZddZddZddZddZd d d Zd S) rcCs |||_|d|_dSra)rr_condr_flagrSrrrr-CszEvent.__init__c CsD|j4|jdr,|jW5QRdSW5QRdSQRXdSNFT)rrrsr/r0r1rrris_setGs   z Event.is_setc Cs6|j&|jd|j|jW5QRXdSNF)rrrsr/r0rmr1rrrsetNs  z Event.setc Cs"|j|jdW5QRXdSrv)rrrsr/r1rrrclearTsz Event.clearNc Csh|jX|jdr |jn |j||jdrP|jW5QRdSW5QRdSQRXdSrt)rrrsr/r0rh)r&rgrrrrhXs     z Event.wait)N)r?r@rAr-rurwrxrhrrrrrAs c@sZeZdZdddZddZddZedd Zejd d Zed d Z e jd d Z dS)BarrierNc CsRddl}ddlm}||dd}|}||||||fd|_d|_dS)Nrr) BufferWrapperr+r)structheaprzZcalcsizerr;_stater\) r&Zpartiesactionrgr*r{rzwrapperZcondrrrr-js zBarrier.__init__cCs.|\|_|_|_|_|_|jd|_dS)Nr+)_parties_action_timeoutrr_wrapperZcreate_memoryviewcast_arrayr9rrrr;ss zBarrier.__setstate__cCs|j|j|j|j|jfSr)rrrrrrr1rrrr8xs zBarrier.__getstate__cCs |jdSrarr1rrrr}|szBarrier._statecCs||jd<dSrarrNrrrr}scCs |jdSNrrr1rrrr\szBarrier._countcCs||jd<dSrrrNrrrr\s)NN) r?r@rAr-r;r8propertyr}setterr\rrrrryhs    ry)__all__rZrrBrrnr r r r r ImportErrorlistrr]rFrGobjectrrrrrrryrrrr s8    Mo'__pycache__/process.cpython-38.opt-1.pyc000064400000024176147577350250014052 0ustar00U ,a.@s8ddddgZddlZddlZddlZddlZddlZddlmZzej e Z Wne k rldZ YnXddZ ddZd dZd d ZGd ddeZGd ddeZGdddeZGdddeZdaeaedaea[iZeej D]0\Z!Z"e!dddkrde!krde!ee" <qeZ#dS) BaseProcesscurrent_processactive_childrenparent_processN)WeakSetcCstS)z@ Return process object representing the current process )_current_processrr^sz'BaseProcess.__init__..)next_process_counterr _identity_configcopyosgetpid _parent_pidname _parent_namer_closed_targettuple_argsdict_kwargstype__name__join_namer _danglingadd)rgrouptargetr&argskwargsrcountrrr __init__Ps     zBaseProcess.__init__cCs|jrtddS)Nzprocess object is closed)r( ValueErrorrrrr _check_closedcszBaseProcess._check_closedcCs|jr|j|j|jdS)zQ Method to be run in sub-process; can be overridden in sub-class N)r)r+r-rrrr rungszBaseProcess.runcCs>|t|||_|jj|_|`|`|`t |dS)z% Start child process N) r;r rrsentinel _sentinelr)r+r-r r3rrrr startns    zBaseProcess.startcCs||jdS)zT Terminate process; sends SIGTERM signal or uses TerminateProcess() N)r;r terminaterrrr r@szBaseProcess.terminatecCs||jdS)zT Terminate process; sends SIGKILL signal or uses TerminateProcess() N)r;rkillrrrr rAszBaseProcess.killcCs*||j|}|dk r&t|dS)z5 Wait until child process terminates N)r;rwaitr r)rtimeoutresrrr r0s zBaseProcess.joincCsJ||tkrdS|jdkr"dS|j}|dkr8dSt|dSdS)z1 Return whether process is alive TNF)r;rrrr r)r returncoderrr is_alives   zBaseProcess.is_alivecCsH|jdk r>|jdkr td|jd|_|`t|d|_dS)z Close the Process object. This method releases resources held by the Process object. It is an error to call this method if the child process is still running. Nz^Cannot close a process while it is still running. You should first call join() or terminate().T)rrr:closer>r rr(rrrr rGs   zBaseProcess.closecCs|jSrr1rrrr r&szBaseProcess.namecCs ||_dSrrH)rr&rrr r&scCs|jddS)z4 Return whether process is a daemon rF)r!getrrrr rszBaseProcess.daemoncCs||jd<dS)z1 Set whether process is a daemon rNr!)rZdaemonicrrr rscCs |jdS)NauthkeyrJrrrr rKszBaseProcess.authkeycCst||jd<dS)z2 Set authorization key of process rKN)AuthenticationStringr!)rrKrrr rKscCs"||jdkr|jS|jS)zM Return exit code of process or `None` if it has yet to stop N)r;rrrrrr exitcodes zBaseProcess.exitcodecCs*||tkrtS|jo$|jjSdS)zU Return identifier (PID) of process or `None` if it has yet to start N)r;rr#r$rpidrrrr identszBaseProcess.identcCs4|z|jWStk r.tddYnXdS)z{ Return a file descriptor (Unix) or handle (Windows) suitable for waiting for process termination. zprocess not startedN)r;r>AttributeErrorr:rrrr r=s zBaseProcess.sentinelcCsd}|tkrd}nL|jrd}n@|jtkr2d}n,|jdkrBd}n|j}|dk rZd}nd}t|jd|j g}|jdk r| d|jj | d|j| ||dk rt ||}| d ||jr| d d d |S) NZstartedclosedunknowninitialZstoppedzname=%rzpid=%sz parent=%sz exitcode=%srz<%s> )rr(r%r#r$rrr.r/r1appendrN_exitcode_to_namerIrr0)rrMZstatusinforrr __repr__s0      zBaseProcess.__repr__c Csvddlm}m}z>z|jdk r,||jt da t a |t}|at|j|j|atjrntz|j|W5~X|dz|d}W5|XWntk r}zJ|jsd}n:t|jdtr|jd}nt j!"t#|jddd}W5d}~XYn2d}ddl$}t j!"d|j%|&YnXW5t|d||X|S)N)utilcontextz process exiting with exitcode %dz child process calling self.run()r z Process %s: )'rZr[ threadingZ _shutdownrWZ_flush_std_streamsZ _start_methodZ_force_start_method itertoolsr8rsetr Z _close_stdinr_ParentProcessr'r%r Z_HAVE_THREAD_NATIVE_IDZ main_threadZ_set_native_idZ_finalizer_registryclearZ_run_after_forkersZ_exit_functionr< SystemExitr6 isinstanceintsysstderrwriter tracebackr& print_exc)rZparent_sentinelrZr[rMZ old_processerirrr _bootstrap"sR         zBaseProcess._bootstrap)N)N)r/ __module__ __qualname____doc__rr9r;r<r?r@rAr0rFrGpropertyr&setterrrKrMrOrNr=rXrlrrrr rGsD            c@seZdZddZdS)rLcCs,ddlm}|dkrtdtt|ffS)NrY)get_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)r[rr TypeErrorrLbytes)rrrrrr __reduce__Xs   zAuthenticationString.__reduce__N)r/rmrnrurrrr rLWsrLc@s6eZdZddZddZeddZd dd ZeZdS) racCs4d|_||_||_d|_d|_d|_||_i|_dS)NrF)r r1_pidr%rr(r>r!)rr&rNr=rrr r9hsz_ParentProcess.__init__cCsddlm}||jgdd S)NrrBrCZmultiprocessing.connectionrBr>)rrBrrr rFrs z_ParentProcess.is_alivecCs|jSr)rvrrrr rOvsz_ParentProcess.identNcCs ddlm}||jg|ddS)z6 Wait until parent process terminates rrwrxNry)rrCrBrrr r0zs z_ParentProcess.join)N) r/rmrnr9rFrprOr0rNrrrr rafs    rac@seZdZddZddZdS) _MainProcesscCs8d|_d|_d|_d|_d|_ttddd|_dS)NrZ MainProcessF z/mp)rKZ semprefix) r r1r%rr(rLr#urandomr!rrrr r9s z_MainProcess.__init__cCsdSrrrrrr rGsz_MainProcess.closeN)r/rmrnr9rGrrrr rzsrzrYZSIG_r)$__all__r#rfsignalr_r^Z _weakrefsetrpathabspathgetcwdZ ORIGINAL_DIROSErrorrrrr objectrrtrLrarzr rr8rr`r rVr __dict__itemsr&Zsignumr2rrrr  s@    ! __pycache__/popen_forkserver.cpython-38.opt-2.pyc000064400000004600147577350250015754 0ustar00U ,a@sddlZddlZddlmZmZejs.edddlmZddlm Z ddlm Z ddlm Z d gZ Gd d d e ZGd d d e jZdS) N) reductionset_spawning_popenz,No support for sending fds between processes) forkserver) popen_fork)spawn)utilPopenc@seZdZddZddZdS)_DupFdcCs ||_dSN)ind)selfr rE/opt/alt/python38/lib64/python3.8/multiprocessing/popen_forkserver.py__init__sz_DupFd.__init__cCst|jSr )rZget_inherited_fdsr )r rrrdetachsz _DupFd.detachN)__name__ __module__ __qualname__rrrrrrr sr csBeZdZdZeZfddZddZddZe j fdd Z Z S) r rcsg|_t|dSr )_fdssuperr)r process_obj __class__rrr!szPopen.__init__cCs|j|t|jdS)Nr)rappendlen)r fdrrrduplicate_for_child%s zPopen.duplicate_for_childc Cst|j}t}t|zt||t||W5tdXt |j \|_ }t |}t|tj||j f|_t|ddd}||W5QRXt|j |_dS)NwbT)closefd)rZget_preparation_data_nameioBytesIOrrdumprZconnect_to_new_processrsentinelosduprZFinalizeZ close_fds finalizeropenwrite getbuffer read_signedpid)r rZ prep_dataZbufwZ _parent_wfrrr_launch)s     z Popen._launchc Csr|jdkrlddlm}|tjkr$dnd}||jg|s:dSzt|j|_Wntt fk rjd|_YnX|jS)Nr)wait) returncodeZmultiprocessing.connectionr0r%WNOHANGr$rr+OSErrorEOFError)r flagr0Ztimeoutrrrpoll=s   z Popen.poll) rrrmethodr ZDupFdrrr/r%r3r7 __classcell__rrrrr s  )r!r%contextrrZHAVE_SEND_HANDLE ImportErrorrrrr__all__objectr r rrrrs     __pycache__/queues.cpython-38.pyc000064400000022541147577350250012736 0ustar00U ,a-@sdddgZddlZddlZddlZddlZddlZddlZddlZddlm Z m Z ddl Z ddl m Z ddl mZejjZdd lmZmZmZmZmZGd ddeZeZGd ddeZGd ddeZdS) Queue SimpleQueue JoinableQueueN)EmptyFull) connection)context)debuginfoFinalizeregister_after_fork is_exitingc@seZdZd*ddZddZddZdd Zd+d d Zd,ddZddZ ddZ ddZ ddZ ddZ ddZddZddZd d!Zed"d#Zed$d%Zed&d'Zed(d)Zd S)-rrcCs|dkrddlm}||_tjdd\|_|_||_t |_ t j dkrTd|_n ||_|||_d|_|t j dkrt|tjdS)Nrr) SEM_VALUE_MAXFZduplexwin32)Z synchronizer_maxsizerPipe_reader_writerLock_rlockosgetpid_opidsysplatform_wlockZBoundedSemaphore_sem _ignore_epipe _after_forkr rselfmaxsizectxr%;/opt/alt/python38/lib64/python3.8/multiprocessing/queues.py__init__$s       zQueue.__init__cCs.t||j|j|j|j|j|j|j|j fSN) r assert_spawningrrrrrrrrr"r%r%r& __getstate__9s zQueue.__getstate__c Cs0|\|_|_|_|_|_|_|_|_|dSr() rrrrrrrrr r"stater%r%r& __setstate__>szQueue.__setstate__cCsbtdtt|_t|_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_pollr*r%r%r&r Cs   zQueue._after_forkTNc Csf|jrtd|d|j||s(t|j.|jdkrB||j ||j W5QRXdSNzQueue z is closed) r8 ValueErrorracquirerr1r5 _start_threadr4appendnotifyr"objblocktimeoutr%r%r&putPs  z Queue.putc Cs|jrtd|d|rH|dkrH|j|}W5QRX|jnr|rXt|}|j||sjt zB|r|t}| |st n | st |}|jW5|jXt |Sr@) r8rArr=rreleasetime monotonicrBrr?_ForkingPicklerloads)r"rHrIresZdeadliner%r%r&get\s*      z Queue.getcCs|j|jjSr()rr_semlockZ _get_valuer*r%r%r&qsizevsz Queue.qsizecCs | Sr(r?r*r%r%r&emptyzsz Queue.emptycCs |jjSr()rrR_is_zeror*r%r%r&full}sz Queue.fullcCs |dSNF)rQr*r%r%r& get_nowaitszQueue.get_nowaitcCs ||dSrX)rJr"rGr%r%r& put_nowaitszQueue.put_nowaitcCs2d|_z|jW5|j}|r,d|_|XdS)NT)r8r9rclose)r"r\r%r%r&r\sz Queue.closecCs.td|jstd||jr*|dS)NzQueue.join_thread()zQueue {0!r} not closed)r r8AssertionErrorformatr6r*r%r%r& join_threadszQueue.join_threadcCs6tdd|_z|jWntk r0YnXdS)NzQueue.cancel_join_thread()T)r r7r6ZcancelAttributeErrorr*r%r%r&cancel_join_threads zQueue.cancel_join_threadc Cstd|jtjtj|j|j|j|j |j j |j |j |jfdd|_d|j_td|jtd|jst|jtjt|jgdd|_t|tj|j|jgd d|_dS) NzQueue._start_thread()ZQueueFeederThread)targetargsnameTzdoing self._thread.start()z... done self._thread.start())Z exitpriority )r r4clearr/ZThreadr_feedr1r;rrr\r_on_queue_feeder_errorrr5Zdaemonstartr7r _finalize_joinweakrefrefr6_finalize_closer9r*r%r%r&rCs<     zQueue._start_threadcCs4td|}|dk r(|tdntddS)Nzjoining queue threadz... queue thread joinedz... queue thread already dead)r join)Ztwrthreadr%r%r&rks  zQueue._finalize_joinc Cs.td||t|W5QRXdS)Nztelling queue thread to quit)r rD _sentinelrE)buffernotemptyr%r%r&rns zQueue._finalize_closec CsXtd|j}|j} |j} |j} t} tjdkr<|j} |j}nd} z|z|sT| W5| Xzb| }|| krtd|WWdSt |}| dkr||qb| z ||W5|XqbWnt k rYnXWq@t k rP}zV|rt |ddt jkrWY6dStr.td|WYdS||||W5d}~XYq@Xq@dS)Nz$starting thread to feed data to piperz%feeder thread got sentinel -- exitingerrnorzerror in queue thread: %s)r rBrKwaitpopleftrqrrrNdumps IndexError ExceptiongetattrrtZEPIPErr )rrrsr:Z writelockr\Z ignore_epipeonerrorZ queue_semZnacquireZnreleaseZnwaitZbpopleftsentinelZwacquireZwreleaserGer%r%r&rhsN         z Queue._feedcCsddl}|dS)z Private API hook called when feeding data in the background thread raises an exception. For overriding by concurrent.futures. rN) traceback print_exc)r}rGr~r%r%r&ri szQueue._on_queue_feeder_error)r)TN)TN)__name__ __module__ __qualname__r'r+r.r rJrQrSrUrWrYr[r\r_rarC staticmethodrkrnrhrir%r%r%r&r"s.       =c@s@eZdZdddZddZddZdd d Zd d ZddZd S)rrcCs*tj|||d|d|_||_dS)N)r$r)rr'Z Semaphore_unfinished_tasksr0_condr!r%r%r&r'#s zJoinableQueue.__init__cCst||j|jfSr()rr+rrr*r%r%r&r+(szJoinableQueue.__getstate__cCs,t||dd|dd\|_|_dS)N)rr.rrr,r%r%r&r.+szJoinableQueue.__setstate__TNc Cs|jrtd|d|j||s(t|jJ|j8|jdkrJ||j ||j |j W5QRXW5QRXdSr@)r8rArrBrr1rr5rCr4rDrrKrErFr%r%r&rJ/s   zJoinableQueue.putc Cs@|j0|jdstd|jjr2|jW5QRXdS)NFz!task_done() called too many times)rrrBrArRrVZ notify_allr*r%r%r& task_done<s   zJoinableQueue.task_donec Cs,|j|jjs|jW5QRXdSr()rrrRrVrur*r%r%r&roCs zJoinableQueue.join)r)TN) rrrr'r+r.rJrror%r%r%r&r!s   c@s<eZdZddZddZddZddZd d Zd d Zd S)rcCsHtjdd\|_|_||_|jj|_tj dkr:d|_ n ||_ dS)NFrr) rrrrrrr>r?rrr)r"r$r%r%r&r'Ns    zSimpleQueue.__init__cCs | Sr(rTr*r%r%r&rUWszSimpleQueue.emptycCst||j|j|j|jfSr()r r)rrrrr*r%r%r&r+Zs zSimpleQueue.__getstate__cCs"|\|_|_|_|_|jj|_dSr()rrrrr>r?r,r%r%r&r.^szSimpleQueue.__setstate__c Cs&|j|j}W5QRXt|Sr()rrr<rNrO)r"rPr%r%r&rQbszSimpleQueue.getc CsDt|}|jdkr"|j|n|j|j|W5QRXdSr()rNrwrrr:rZr%r%r&rJhs   zSimpleQueue.putN) rrrr'rUr+r.rQrJr%r%r%r&rLs  )__all__rrr/r2rLrlrtZqueuerrZ_multiprocessingrr Z reductionZForkingPicklerrNutilr r r r robjectrrqrrr%r%r%r& s$   v +__pycache__/pool.cpython-38.opt-1.pyc000064400000060636147577350250013346 0ustar00U ,a~@sdddgZddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z ddl m Z m Z ddlmZd Zd Zd Zd ZeZd dZddZGdddeZGdddZddZGdddeZd+ddZddZGdd d eZ Gd!dde!Z"Gd"d#d#e!Z#e#Z$Gd$d%d%e#Z%Gd&d'd'e!Z&Gd(d)d)e&Z'Gd*dde"Z(dS),Pool ThreadPoolN)Empty)util) get_context TimeoutError)waitINITRUNCLOSE TERMINATEcCs tt|SN)listmapargsr9/opt/alt/python38/lib64/python3.8/multiprocessing/pool.pymapstar/srcCstt|d|dS)Nrr)r itertoolsstarmaprrrr starmapstar2src@seZdZddZddZdS)RemoteTracebackcCs ||_dSrtb)selfrrrr__init__:szRemoteTraceback.__init__cCs|jSrrrrrr__str__<szRemoteTraceback.__str__N)__name__ __module__ __qualname__rrrrrrr9src@seZdZddZddZdS)ExceptionWithTracebackcCs0tt|||}d|}||_d||_dS)Nz """ %s""") tracebackformat_exceptiontypejoinexcr)rr)rrrrr@s zExceptionWithTraceback.__init__cCst|j|jffSr) rebuild_excr)rrrrr __reduce__Esz!ExceptionWithTraceback.__reduce__N)r r!r"rr+rrrrr#?sr#cCst||_|Sr)r __cause__)r)rrrrr*Hs r*cs0eZdZdZfddZddZddZZS)MaybeEncodingErrorzVWraps possible unpickleable errors, so they can be safely sent through the socket.cs.t||_t||_tt||j|jdSr)reprr)valuesuperr-r)rr)r/ __class__rrrTs  zMaybeEncodingError.__init__cCsd|j|jfS)Nz(Error sending result: '%s'. Reason: '%s')r/r)rrrrrYszMaybeEncodingError.__str__cCsd|jj|fS)Nz<%s: %s>)r2r rrrr__repr__]szMaybeEncodingError.__repr__)r r!r"__doc__rrr3 __classcell__rrr1rr-Ps r-rFc Cs|dk r(t|tr|dks(td||j}|j}t|drR|j|j |dk rb||d}|dks~|r||krz |} Wn(t t fk rt dYqYnX| dkrt dq| \} } } } }zd| | |f}WnHtk r0}z(|r| tk rt||j}d|f}W5d}~XYnXz|| | |fWnRtk r}z2t||d}t d ||| | d|ffW5d}~XYnXd} } }} } }|d7}qft d |dS) NrzMaxtasks {!r} is not valid_writerrz)worker got EOFError or OSError -- exitingzworker got sentinel -- exitingTFz0Possible encoding error while sending result: %szworker exiting after %d tasks) isinstanceintAssertionErrorformatputgethasattrr6close_readerEOFErrorOSErrorrdebug Exception_helper_reraises_exceptionr# __traceback__r-)inqueueoutqueue initializerinitargsZmaxtaskswrap_exceptionr;r<Z completedtaskjobifuncrkwdsresultewrappedrrrworkerasN        $ rScCs|dS)z@Pickle-able helper function for use by _guarded_task_generation.Nr)ZexrrrrDsrDcs2eZdZdZddfdd ZfddZZS) _PoolCachez Class that implements a cache for the Pool class that will notify the pool management threads every time the cache is emptied. The notification is done by the use of a queue that is provided when instantiating the cache. Nnotifiercs||_tj||dSr)rVr0r)rrVrrOr1rrrsz_PoolCache.__init__cs t||s|jddSr)r0 __delitem__rVr;)ritemr1rrrWs z_PoolCache.__delitem__)r r!r"r4rrWr5rrr1rrTsrTc@seZdZdZdZeddZdLddZej e fd d Z d d Z d dZ eddZeddZddZeddZeddZddZddZdifddZdMdd ZdNd!d"ZdOd#d$Zd%d&ZdPd(d)ZdQd*d+Zdiddfd,d-ZdRd.d/ZdSd0d1ZedTd2d3Ze d4d5Z!ed6d7Z"ed8d9Z#ed:d;Z$dd?Z&d@dAZ'dBdCZ(edDdEZ)e dFdGZ*dHdIZ+dJdKZ,dS)UrzS Class which supports an async version of applying functions to arguments. TcOs |j||SrProcess)ctxrrOrrrrZsz Pool.ProcessNrcCsg|_t|_|pt|_|t|_|j|_ t |j d|_ ||_ ||_ ||_|dkrjtphd}|dkrztd|dk rt|std||_z |WnHtk r|jD]}|jdkr|q|jD] }|q؂YnX|}tjtj|j |j|j|j|j|j|j |j!|j |j|j |j"||j fd|_#d|j#_$t%|j#_|j#&tjtj'|j|j(|j!|j|j fd|_)d|j)_$t%|j)_|j)&tjtj*|j!|j+|j fd|_,d|j,_$t%|j,_|j,&t-j.||j/|j|j |j!|j|j |j#|j)|j,|j f dd|_0t%|_dS) NrUrz&Number of processes must be at least 1zinitializer must be a callabletargetrT)rZ exitpriority)1_poolr _stater_ctx _setup_queuesqueue SimpleQueue _taskqueue_change_notifierrT_cache_maxtasksperchild _initializer _initargsos cpu_count ValueErrorcallable TypeError _processes_repopulate_poolrCexitcode terminater(_get_sentinels threadingZThreadr_handle_workersrZ_inqueue _outqueue_wrap_exception_worker_handlerdaemonr start _handle_tasks _quick_put _task_handler_handle_results _quick_get_result_handlerrZFinalize_terminate_pool _terminate)r processesrHrImaxtasksperchildcontextp sentinelsrrrrs              z Pool.__init__cCs>|j|kr:|d|t|dt|dddk r:|jddS)Nz&unclosed running multiprocessing pool )sourcerf)r`ResourceWarninggetattrrfr;)rZ_warnr rrr__del__s  z Pool.__del__c Cs0|j}d|jd|jd|jdt|jd S)N<.z state=z pool_size=>)r2r!r"r`lenr_)rclsrrrr3sz Pool.__repr__cCs|jjg}|jjg}||Sr)rxr?rf)rZtask_queue_sentinelsZself_notifier_sentinelsrrrrts  zPool._get_sentinelscCsdd|DS)NcSsg|]}t|dr|jqS)sentinel)r=r).0rSrrr s z.Pool._get_worker_sentinels..rZworkersrrr_get_worker_sentinelsszPool._get_worker_sentinelscCsPd}ttt|D]6}||}|jdk rtd||d}||=q|S)zCleanup after any worker processes which have exited due to reaching their specified lifetime. Returns True if any workers were cleaned up. FNcleaning up worker %dT)reversedrangerrrrrBr()poolZcleanedrMrSrrr_join_exited_workerss zPool._join_exited_workersc Cs0||j|j|j|j|j|j|j|j|j |j Sr) _repopulate_pool_staticrarZrpr_rwrxrirjrhryrrrrrq.s zPool._repopulate_poolc Csft|t|D]P} ||t|||||| fd} | jdd| _d| _| || t dqdS)zBring the number of pool processes up to the specified number, for use after reaping workers which have exited. r\rZZ PoolWorkerTz added workerN) rrrSnamereplacer{r|appendrrB) r[rZrrrFrGrHrIrrJrMwrrrr7s zPool._repopulate_pool_staticc Cs*t|r&t|||||||||| dS)zEClean up any exited workers and start replacements for them. N)rrr) r[rZrrrFrGrHrIrrJrrr_maintain_poolJs  zPool._maintain_poolcCs4|j|_|j|_|jjj|_|jjj|_ dSr) rardrwrxr6sendr~r?recvrrrrrrbVs   zPool._setup_queuescCs|jtkrtddS)NzPool not running)r`r rmrrrr_check_running\s zPool._check_runningcCs||||S)zT Equivalent of `func(*args, **kwds)`. Pool must be running. ) apply_asyncr<)rrNrrOrrrapply`sz Pool.applycCs|||t|S)zx Apply `func` to each element in `iterable`, collecting the results in a list that is returned. ) _map_asyncrr<rrNiterable chunksizerrrrgszPool.mapcCs|||t|S)z Like `map()` method but the elements of the `iterable` are expected to be iterables as well and will be unpacked as arguments. Hence `func` and (a, b) becomes func(a, b). )rrr<rrrrrnsz Pool.starmapcCs|||t|||S)z= Asynchronous version of `starmap()` method. )rrrrNrrcallbackerror_callbackrrr starmap_asyncvs zPool.starmap_asyncc csjz,d}t|D]\}}||||fifVqWn8tk rd}z||dt|fifVW5d}~XYnXdS)zProvides a generator of tasks for imap and imap_unordered with appropriate handling for iterables which throw exceptions during iteration.rN) enumeraterCrD)rZ result_jobrNrrMxrQrrr_guarded_task_generation~s zPool._guarded_task_generationrcCs||dkr:t|}|j||j|||jf|S|dkrPtd|t |||}t|}|j||jt ||jfdd|DSdS)zP Equivalent of `map()` -- can be MUCH slower than `Pool.map()`. rzChunksize must be 1+, not {0:n}css|]}|D] }|Vq qdSrrrchunkrXrrr szPool.imap..N) r IMapIteratorrer;r_job _set_lengthrmr:r _get_tasksrrrNrrrP task_batchesrrrimaps4z Pool.imapcCs||dkr:t|}|j||j|||jf|S|dkrPtd|t |||}t|}|j||jt ||jfdd|DSdS)zL Like `imap()` method but ordering of results is arbitrary. rzChunksize must be 1+, not {0!r}css|]}|D] }|Vq qdSrrrrrrrsz&Pool.imap_unordered..N) rIMapUnorderedIteratorrer;rrrrmr:rrrrrrrimap_unordereds0zPool.imap_unorderedcCs6|t|||}|j|jd|||fgdf|S)z; Asynchronous version of `apply()` method. rN)r ApplyResultrer;r)rrNrrOrrrPrrrrs zPool.apply_asynccCs|||t|||S)z9 Asynchronous version of `map()` method. )rrrrrr map_asyncszPool.map_asyncc Cs|t|dst|}|dkrJtt|t|jd\}}|rJ|d7}t|dkrZd}t|||}t||t|||d} |j | | j ||df| S)zY Helper function to implement map, starmap and their async counterparts. __len__Nrrr) rr=rdivmodrr_rr MapResultrer;rr) rrNrZmapperrrrZextrarrPrrrrs,  zPool._map_asynccCs"t||d|s|q dS)N)timeout)r emptyr<)rchange_notifierrrrr_wait_for_updatess zPool._wait_for_updatesc Cspt}|jtks |rX|jtkrX|||||||| | | | ||| }|||q|dt ddS)Nzworker handler exiting) rucurrent_threadr`r r rrrr;rrB)rcache taskqueuer[rZrrrFrGrHrIrrJrrthreadZcurrent_sentinelsrrrrvs zPool._handle_workersc Cspt}t|jdD]\}}d}z|D]}|jtkrBtdqz ||Wq&tk r} zB|dd\} } z||  | d| fWnt k rYnXW5d} ~ XYq&Xq&|rtd|r|dnd} || dWqW q W5d}}} Xqtdz6td| dtd |D]} |dq.Wn t k r`td YnXtd dS) Nz'task handler found thread._state != RUNFzdoing set_length()rrztask handler got sentinelz/task handler sending sentinel to result handlerz(task handler sending sentinel to workersz/task handler got OSError when sending sentinelsztask handler exiting) ruriterr<r`r rrBrC_setKeyErrorr;rA) rr;rGrrrZtaskseqZ set_lengthrKrLrQidxrrrrr} sB         zPool._handle_tasksc Cst}z |}Wn$ttfk r6tdYdSX|jtkrNtdq|dkrbtdq|\}}}z||||Wnt k rYnXd}}}q|r@|jt kr@z |}Wn$ttfk rtdYdSX|dkrtdq|\}}}z||||Wnt k r0YnXd}}}qt |drtdz,t dD]}|j svq|q`Wnttfk rYnXtdt||jdS) Nz.result handler got EOFError/OSError -- exitingz,result handler found thread._state=TERMINATEzresult handler got sentinelz&result handler ignoring extra sentinelr?z"ensuring that outqueue is not full z7result handler exiting: len(cache)=%s, thread._state=%s)rurrAr@rrBr`r rrr r=rr?pollr)rGr<rrrKrLrMobjrrrr:s\               zPool._handle_resultsccs0t|}tt||}|s dS||fVqdSr)rtuplerislice)rNitsizerrrrrvs zPool._get_taskscCs tddS)Nz:pool objects cannot be passed between processes or pickled)NotImplementedErrorrrrrr+szPool.__reduce__cCs2td|jtkr.t|_t|j_|jddS)Nz closing pool)rrBr`r r rzrfr;rrrrr>s   z Pool.closecCstdt|_|dS)Nzterminating pool)rrBr r`rrrrrrss zPool.terminatecCsjtd|jtkrtdn|jttfkr4td|j|j |j |j D] }|qXdS)Nz joining poolzPool is still runningzIn unknown state) rrBr`r rmr r rzr(rrr_)rrrrrr(s       z Pool.joincCs@td|j|r<|jr<|jt dqdS)Nz7removing tasks from inqueue until task handler finishedr) rrBZ_rlockacquireis_aliver?rrtimesleep)rF task_handlerrrrr_help_stuff_finishs    zPool._help_stuff_finishc CsXtdt|_|dt|_td|||t||sXt| dkrXtdt|_|d|dtdt |k r| |rt |ddrtd|D]} | j dkr| qtdt |k r| td t |k r| |rTt |ddrTtd |D](} | r*td | j| q*dS) Nzfinalizing poolz&helping task handler/workers to finishrz.Cannot have cache with result_hander not alivezjoining worker handlerrszterminating workerszjoining task handlerzjoining result handlerzjoining pool workersr)rrBr r`r;rrrr9rurr(r=rrrspid) rrrFrGrrZworker_handlerrZresult_handlerrrrrrrsB               zPool._terminate_poolcCs ||Sr)rrrrr __enter__szPool.__enter__cCs |dSr)rs)rexc_typeZexc_valZexc_tbrrr__exit__sz Pool.__exit__)NNrNN)N)N)NNN)r)r)NNN)NNN)N)-r r!r"r4ry staticmethodrZrwarningswarnr rr3rtrrrqrrrbrrrrrrrrrrrr classmethodrvr}rrr+r>rsr(rrrrrrrrrsx  P                - ;    5c@s@eZdZddZddZddZddd Zdd d Zd d ZdS)rcCs>||_t|_tt|_|j|_||_||_ ||j|j<dSr) r_ruZEvent_eventnext job_counterrrg _callback_error_callback)rrrrrrrrs  zApplyResult.__init__cCs |jSr)rZis_setrrrrreadyszApplyResult.readycCs|std||jS)Nz{0!r} not ready)rrmr:_successrrrr successfulszApplyResult.successfulNcCs|j|dSr)rr rrrrrr szApplyResult.waitcCs,|||st|jr"|jS|jdSr)r rrr_valuerrrrr<s  zApplyResult.getcCsZ|\|_|_|jr$|jr$||j|jr<|js<||j|j|j|j=d|_dSr) rrrrrsetrgrr_rrMrrrrrs       zApplyResult._set)N)N) r r!r"rrrr r<rrrrrrs    rc@seZdZddZddZdS)rcCshtj||||dd|_dg||_||_|dkrNd|_|j|j|j =n||t |||_dS)NrTr) rrrr _chunksize _number_leftrrrgrbool)rrrlengthrrrrrrs    zMapResult.__init__cCs|jd8_|\}}|rv|jrv||j||j|d|j<|jdkr|jrZ||j|j|j=|jd|_ nL|s|jrd|_||_|jdkr|j r| |j|j|j=|jd|_ dS)NrrF) rrrrrrgrrrr_r)rrMZsuccess_resultsuccessrPrrrr$s&          zMapResult._setN)r r!r"rrrrrrrs rc@s:eZdZddZddZd ddZeZdd Zd d ZdS) rcCsT||_tt|_tt|_|j|_t |_ d|_ d|_ i|_||j|j<dS)Nr)r_ruZ ConditionZLock_condrrrrg collectionsdeque_items_index_length _unsorted)rrrrrrBs  zIMapIterator.__init__cCs|Srrrrrr__iter__MszIMapIterator.__iter__Nc Cs|jz|j}Wnztk r|j|jkr>d|_td|j|z|j}Wn2tk r|j|jkrd|_tdt dYnXYnXW5QRX|\}}|r|S|dSr) rrpopleft IndexErrorrrr_ StopIterationr r)rrrXrr/rrrrPs&   zIMapIterator.nextc Cs|j|j|krn|j||jd7_|j|jkrb|j|j}|j||jd7_q,|jn ||j|<|j|jkr|j|j =d|_ W5QRXdSNr) rrrrrpopnotifyrrgrr_rrrrrhs        zIMapIterator._setc CsB|j2||_|j|jkr4|j|j|j=d|_W5QRXdSr)rrrrrgrr_)rrrrrrys    zIMapIterator._set_length)N) r r!r"rrr__next__rrrrrrr@s   rc@seZdZddZdS)rc CsV|jF|j||jd7_|j|j|jkrH|j|j=d|_W5QRXdSr) rrrrrrrgrr_rrrrrs    zIMapUnorderedIterator._setN)r r!r"rrrrrrsrc@sVeZdZdZeddZdddZdd Zd d Zed d Z eddZ ddZ dS)rFcOsddlm}|||S)NrrY)ZdummyrZ)r[rrOrZrrrrZs zThreadPool.ProcessNrcCst||||dSr)rr)rrrHrIrrrrszThreadPool.__init__cCs,t|_t|_|jj|_|jj|_dSr)rcrdrwrxr;r~r<rrrrrrbs   zThreadPool._setup_queuescCs |jjgSr)rfr?rrrrrtszThreadPool._get_sentinelscCsgSrrrrrrrsz ThreadPool._get_worker_sentinelscCsFz|jddqWntjk r(YnXt|D]}|dq2dS)NF)block)r<rcrrr;)rFrrrMrrrrs  zThreadPool._help_stuff_finishcCst|dSr)rr)rrrrrrrrszThreadPool._wait_for_updates)NNr) r r!r"ryrrZrrbrtrrrrrrrrs    )NrNF))__all__rrrkrcrurr%rrr$rrrZ connectionr r r r r countrrrrCrr#r*r-rSrDdictrTobjectrrZ AsyncResultrrrrrrrr sN     -=)+E__pycache__/spawn.cpython-38.opt-2.pyc000064400000014037147577350250013520 0ustar00U ,aP$@s$ddlZddlZddlZddlZddlmZmZddlmZddlm Z ddlm Z ddd d d d d gZ ej dkrzdZ dZneeddZ ejdZerejejdanejadd Zdd ZddZddZdd Zd&ddZddZddZdd ZgZ dd Z!d!d"Z"d#d$Z#d%d Z$dS)'N)get_start_methodset_start_method)process) reduction)util_mainfreeze_supportset_executableget_executableget_preparation_dataget_command_lineimport_main_pathwin32Ffrozenzpythonservice.exez python.execCs|adSN _python_exe)Zexer:/opt/alt/python38/lib64/python3.8/multiprocessing/spawn.pyr )scCstSrrrrrrr -scCs$t|dkr|ddkrdSdSdS)Nr--multiprocessing-forkTF)len)argvrrr is_forking4srcCsdttjr`i}tjddD]0}|d\}}|dkr@d||<qt|||<qtf|tdS)Nr=None)rsysrsplitint spawn_mainexit)kwdsargnamevaluerrrr >s   cKshttddr(tjdgdd|DSd}|ddd |D;}t}tg|d |dgSdS) NrFrcSsg|] }d|qS)%s=%rr.0itemrrr Tsz$get_command_line..zWsz#get_command_line..z-c)getattrr executableitemsjoinrZ_args_from_interpreter_flagsr)r"progZoptsrrrr Ns c Cstjdkr`ddl}ddl}|dk r:||j|jBd|}nd}tj||d}| |t j }|}n"ddl m } || j_|}t |}t||} t| dS)NrrF)source_processr)resource_tracker)rplatformmsvcrt_winapiZ OpenProcessZ SYNCHRONIZEZPROCESS_DUP_HANDLErZ duplicateZopen_osfhandleosO_RDONLYr2Z_resource_trackerZ_fdduprr!) Z pipe_handleZ parent_pidZ tracker_fdr4r5r1Z new_handlefdparent_sentinelr2Zexitcoderrrr \s*     r c Cs`tj|ddd@}dt_z$tj|}t|tj|}W5t`XW5QRX| |S)NrbT)closefd) r6fdopenrcurrent_process _inheritingrpickleloadprepare _bootstrap)r:r;Z from_parentZpreparation_dataselfrrrrxs  cCsttddrtddS)Nr@Fa An attempt has been made to start a new process before the current process has finished its bootstrapping phase. This probably means that you are not using fork to start your child processes and you have forgotten to use the proper idiom in the main module: if __name__ == '__main__': freeze_support() ... The "freeze_support()" line can be omitted if the program is not going to be frozen to produce an executable.)r,rr? RuntimeErrorrrrr_check_not_importing_mainsrGcCstttjtjd}tjdk r2tj|d<t j }z| d}Wnt k r^Yn Xtj||<|j||t jtjttdt jd}t|jdd}|dk r||d<nft jdkststst|d d}|dk rtj |s tjdk r tj tj|}tj ||d <|S) N) log_to_stderrauthkey log_levelr8)r$sys_pathsys_argvorig_dirdir start_method__main__r$init_main_from_namer__file__init_main_from_path)rGdictrZ_log_to_stderrrr?rIZ_loggerZgetEffectiveLevelrpathcopyindex ValueError ORIGINAL_DIRupdaterr6getcwdrmodulesr,__spec__r3WINEXE WINSERVICEisabsr/normpath)r$drKi main_moduleZ main_mod_name main_pathrrrr sD       cCsd|kr|dt_d|kr,|dt_d|krD|drDtd|kr^t|dd|krp|dt_ d|kr|dt_ d|krt |dd|kr|dt_ d |krt|d d d d |krt|d nd |krt|d dS)Nr$rIrHrJrKrLrNrMrOT)ZforcerQrS)rr?r$rIrrHZ get_loggerZsetLevelrrUrr6chdirrYr_fixup_main_from_name_fixup_main_from_path)datarrrrCs,   rCcCs~tjd}|dks|dr dSt|jdd|kr6dSt|td}t j |ddd}|j ||tjd<tjd<dS)NrPz .__main__r$ __mp_main__T)run_nameZ alter_sys) rr\endswithr,r]old_main_modulesappendtypes ModuleTyperunpyZ run_module__dict__rZ)Zmod_name current_mainrd main_contentrrrrgs    rgcCstjd}tjtj|d}|dkr.dSt|dd|krBdSt|t d}t j |dd}|j ||tjd<tjd<dS)NrPrZipythonrRrj)rk)rr\r6rUsplitextbasenamer,rmrnrorprqZrun_pathrrrZ)rersZ main_namerdrtrrrrh s    rhcCs t|dSr)rh)rerrrr%s)NN)%r6rrqror8rrrcontextrr__all__r3r^r_r,r-lowerrlrUr/ exec_prefixrr r rr r r rrGr rmrCrgrhrrrrr sD        2&__pycache__/shared_memory.cpython-38.opt-2.pyc000064400000026263147577350250015232 0ustar00U ,aD@sddgZddlmZddlZddlZddlZddlZddlZejdkrTddl Z dZ n ddl Z dZ ej ej BZdZe rzd Znd Zd d ZGd ddZdZGdddZdS) SharedMemory ShareableList)partialNntFTz/psm_Zwnsm_cCs"tttd}tt|}|S)N)_SHM_SAFE_NAME_LENGTHlen_SHM_NAME_PREFIXsecretsZ token_hex)nbytesnamerB/opt/alt/python38/lib64/python3.8/multiprocessing/shared_memory.py_make_filename&src@seZdZdZdZdZdZejZ dZ e r*dndZ dddZ d d Zd d Zd dZeddZeddZeddZddZddZdS)rNiTFrc Csl|dkstd|r0ttjB|_|dkr0td|dkrL|jtj@sLtdtrH|dkrt}ztj ||j|j d|_ Wnt k rYqZYnX||_ qqZn.|jrd|n|}tj ||j|j d|_ ||_ z<|r|rt|j |t|j }|j}t|j ||_Wn tk r*|YnXddlm}||j d n|r|dkr^tn|}ttjtjtj|d ?d @|d @|}zXt}|tjkr|dk rt t j!t"t j!|tjnWqNtjd ||d |_W5t|X||_ qVqNnX||_ t#tj$d|}zt%|tj$ddd} W5t|Xt&| }tjd ||d |_||_'t(|j|_)dS)Nrz!'size' must be a positive integerz4'size' must be a positive number different from zeroz&'name' can only be None if create=True)mode/)register shared_memory lr)ZtagnameF)* ValueError_O_CREXosO_RDWR_flagsO_EXCL _USE_POSIXr _posixshmemZshm_open_mode_fdFileExistsError_name_prepend_leading_slash ftruncatefstatst_sizemmap_mmapOSErrorunlinkresource_trackerr_winapiZCreateFileMappingZINVALID_HANDLE_VALUEZNULLZPAGE_READWRITEZ CloseHandleZ GetLastErrorZERROR_ALREADY_EXISTSerrnoZEEXISTstrerrorZOpenFileMappingZ FILE_MAP_READZ MapViewOfFileZVirtualQuerySize_size memoryview_buf) selfr createsizeZstatsrZ temp_nameZh_mapZlast_error_codeZp_bufrrr__init__Is             zSharedMemory.__init__cCs&z |Wntk r YnXdSN)closer*r3rrr__del__s zSharedMemory.__del__cCs|j|jd|jffS)NF) __class__r r5r9rrr __reduce__s zSharedMemory.__reduce__cCs|jjd|jd|jdS)N(z, size=))r;__name__r r5r9rrr__repr__szSharedMemory.__repr__cCs|jSr7)r2r9rrrbufszSharedMemory.bufcCs.|j}tr*|jr*|jdr*|jdd}|S)Nrr)r#rr$ startswith)r3Z reported_namerrrr s   zSharedMemory.namecCs|jSr7)r0r9rrrr5szSharedMemory.sizecCsX|jdk r|jd|_|jdk r4|jd|_trT|jdkrTt|jd|_dS)Nrr)r2releaser)r8rr!rr9rrrr8s     zSharedMemory.closecCs2tr.|jr.ddlm}t|j||jddS)Nr) unregisterr)rr#r,rDrZ shm_unlink)r3rDrrrr+s   zSharedMemory.unlink)NFr)r? __module__ __qualname__r#r!r)r2rrrr rr$r6r:r<r@propertyrAr r5r8r+rrrrr0s&  l     utf8c @s eZdZedededededdjdiZ dZ dd d d d d d d d Z e ddZ d5ddddZddZddZddZddZddZddZdd Zd!d"Zed#d$Zed%d&Zed'd(Zed)d*Zed+d,Zed-d.Zed/d0Zd1d2Zd3d4Z dS)6rqdzxxxxxxx?z%dsNzxxxxxx?xcCs|Sr7rvaluerrr zShareableList.cCs|dtSN)rstripdecode _encodingrLrrrrN rOcCs |dSrP)rRrLrrrrN rOcCsdSr7r)Z_valuerrrrN rO)rrrcCs:t|ttdjfsdSt|tr$dSt|tr2dSdSdS)NrrrrU) isinstancestrbytesr;rLrrr_extract_recreation_codes  z&ShareableList._extract_recreation_coder csr|dk rvfdd|D}t|_tfdd|D_fdd|D}tdjd|jj }nd}|dk r|dkrt |_ nt |d |d _ |dk rNt tj djj jd jfjtj d|j jjffd d|Dtj jj jjffd d|Dtj j j jjf|n t_tjj jd_dS)NcsPg|]H}t|ttfs$jt|n&jt|jt|jdfqS)r)rVrWrX_types_mappingtype _alignmentr .0itemr9rr s   z*ShareableList.__init__..c3s0|](}|ddkrjnt|ddVqdS)rsN)r]int)r_fmtr9rr *sz)ShareableList.__init__..csg|]}|qSr)rYr^r9rrra.srIrKT)r4r5rc3s&|]}t|tr|n|VqdSr7)rVrWencoder_v_encrrreMsc3s|]}|VqdSr7)rgrhrjrrreSs)r _list_lentuple_allocated_bytesstructZcalcsize_format_size_metainfojoin_format_packing_metainfo_format_back_transform_codesrshmrT pack_intorA_offset_data_start_offset_packing_formats_offset_back_transform_codes unpack_from)r3Zsequencer Z_formatsZ_recreation_codesZrequested_sizer)rkr3rr6sz        zShareableList.__init__cCsj|dkr |n||j}||jks*|jdkr2tdtd|jj|j|dd}|d}|t }|S)Nr Requested position out of range.8srKrQ) rl IndexErrorroryrtrArwrRrSrT)r3positionrird fmt_as_strrrr_get_packing_formatds   z!ShareableList._get_packing_formatcCs\|dkr |n||j}||jks*|jdkr2tdtd|jj|j|d}|j|}|S)Nrrzb)rlr|roryrtrArx_back_transforms_mapping)r3r}transform_codeZtransform_functionrrr_get_back_transformts z!ShareableList._get_back_transformcCs~|dkr |n||j}||jks*|jdkr2tdtd|jj|j|d|t| |}td|jj|j ||dS)Nrrzr{rKr) rlr|rorurtrArwrgrTrYrx)r3r}r~rMrrrr!_set_packing_format_and_transforms   z/ShareableList._set_packing_format_and_transformcCsjz6|jt|jd|}t|||jj|\}Wntk rRtdYnX| |}||}|S)Nzindex out of range) rvsumrnroryrrtrAr|r)r3r}offsetriZback_transformrrr __getitem__s  zShareableList.__getitem__cCsz&|jt|jd|}||}Wntk rBtdYnXt|ttfsf|jt |}|}nZt|trz| t n|}t ||j|krt d|ddkr|}n|jt|j|f}||||t||jj||dS)Nzassignment index out of rangez(bytes/str item exceeds available storagerrb)rvrrnrr|rVrWrXr[r\rgrTr rrrorurtrA)r3r}rMrZcurrent_formatZ new_formatZ encoded_valuerrr __setitem__s6  zShareableList.__setitem__cCst|j|jjddfS)NrZr)rr;rtr r9rrrr<szShareableList.__reduce__cCstd|jjddS)NrIr)roryrtrAr9rrr__len__szShareableList.__len__cCs"|jjdt|d|jjdS)Nr=z, name=r>)r;r?listrtr r9rrrr@szShareableList.__repr__csdfddtjDS)Nrfc3s|]}|VqdSr7)r)r_ir9rrresz'ShareableList.format..)rqrangerlr9rr9rformatszShareableList.formatcCs |jdS)NrIrlr9rrrrpsz#ShareableList._format_size_metainfocCs d|jS)Nr{rr9rrrrrsz&ShareableList._format_packing_metainfocCs d|jS)Nrrr9rrrrssz*ShareableList._format_back_transform_codescCs|jddS)NrrKrr9rrrrvsz ShareableList._offset_data_startcCs|jt|jSr7)rvrrnr9rrrrwsz%ShareableList._offset_packing_formatscCs|j|jdS)NrK)rwrlr9rrrrxsz*ShareableList._offset_back_transform_codescstfdd|DS)Nc3s|]}|kVqdSr7r)r_entryrLrrresz&ShareableList.count..)r)r3rMrrLrcountszShareableList.countcCs4t|D]\}}||kr|Sqt|ddS)Nz not in this container) enumerater)r3rMr}rrrrindexs zShareableList.index)N)!r?rErFrcfloatboolrWrXr;r[r]r staticmethodrYr6rrrrrr<rr@rGrrprrrsrvrwrxrrrrrrrs\  F       )__all__ functoolsrr(rr.ror r r-rrO_CREATrrrr rrrTrrrrrs*    E__pycache__/resource_tracker.cpython-38.pyc000064400000012120147577350250014761 0ustar00U ,a!@sddlZddlZddlZddlZddlZddlmZddlmZdddgZe edZ ej ej fZ d d d iZejd krddlZddlZeejejd GdddeZeZejZejZejZejZddZdS)N)spawn)utilensure_runningregister unregisterpthread_sigmaskZnoopcCsdSNr r r E/opt/alt/python38/lib64/python3.8/multiprocessing/resource_tracker.py!r posix)Z semaphoreZ shared_memoryc@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)ResourceTrackercCst|_d|_d|_dSr ) threadingZLock_lock_fd_pidselfr r r __init__0s zResourceTracker.__init__c CsT|jD|jdkr W5QRdSt|jd|_t|jdd|_W5QRXdS)Nr)rrosclosewaitpidrrr r r _stop5s  zResourceTracker._stopcCs||jSr )rrrr r r getfdBszResourceTracker.getfdc Cst|jb|jdk r~|r*W5QRdSt|jz|jdk rPt|jdWntk rfYnXd|_d|_t dg}z| t j Wntk rYnXd}t\}}zzr| |t}|gt}|d||g7}z&trttjtt|||}W5tr,ttjtXWnt|YnX||_||_W5t|XW5QRXdS)zMake sure that resource tracker process is running. This can be run from any process. Usually a child process will use the resource created by its parent.NrzUresource_tracker: process died unexpectedly, relaunching. Some resources might leak.z:from multiprocessing.resource_tracker import main;main(%d)z-c)rr _check_aliverrrrChildProcessErrorwarningswarnappendsysstderrfileno ExceptionpiperZget_executablerZ_args_from_interpreter_flags _HAVE_SIGMASKsignalr SIG_UNBLOCK_IGNORED_SIGNALS SIG_BLOCKZspawnv_passfds)rZ fds_to_passcmdrwZexeargspidr r r rFsJ         zResourceTracker.ensure_runningcCs2zt|jdWntk r(YdSXdSdS)z;Check that the pipe has not been closed by sending a probe.s PROBE:0:noop FTN)rwriterOSErrorrr r r rs zResourceTracker._check_alivecCs|d||dS)z0Register name of resource with resource tracker.REGISTERN_sendrnamertyper r r rszResourceTracker.registercCs|d||dS)z2Unregister name of resource with resource tracker. UNREGISTERNr3r5r r r rszResourceTracker.unregistercCsb|d|||d}t|dkr0tdt|j|}|t|ks^td|t|dS)Nz {0}:{1}:{2} asciiiz name too longznbytes {0:n} but len(msg) {1:n}) rformatencodelen ValueErrorrr0rAssertionError)rr+r6r7msgnbytesr r r r4s zResourceTracker._sendN) __name__ __module__ __qualname__rrrrrrrr4r r r r r.s @ rc Csttjtjttjtjtr2ttjttj tj fD]&}z | Wq>t k rbYq>Xq>ddt D}zt|d}|D]}z|dd\}}}t |d} | dkrtd |d ||d kr|||n2|d kr|||n|d krn td|Wqt k rTztjtWn YnXYqXqW5QRXW5|D]\}}|rztdt||fWnt k rYnX|D]V}zLzt ||Wn6t k r}ztd||fW5d}~XYnXW5XqqnXdS)zRun resource tracker.cSsi|] }|tqSr )set).0r7r r r szmain..zQresource_tracker: There appear to be %d leaked %s objects to clean up at shutdownzresource_tracker: %r: %sNrbr9:zCannot register z. for automatic cleanup: unknown resource type r2r8ZPROBEzunrecognized command %r)r'SIGINTSIG_IGNSIGTERMr&rr(r)r!stdinstdoutrr$_CLEANUP_FUNCSkeysitemsrrr<openstripdecodesplitgetr=addremove RuntimeError excepthookexc_info) fdfcacher7Z rtype_cacher6eliner+Z cleanup_funcr r r mains^      (r`)rr'r!rrrr__all__hasattrr&rIrKr)rNr6Z_multiprocessingZ _posixshmemupdateZ sem_unlinkZ shm_unlinkobjectrZ_resource_trackerrrrrr`r r r r s4      w__pycache__/forkserver.cpython-38.opt-2.pyc000064400000016565147577350250014570 0ustar00U ,a0@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl m Z ddl mZddl mZddl mZd d d d gZd ZedZGdddeZdddZddZddZddZeZejZejZejZejZdS)N) connection)process) reduction)resource_tracker)spawn)utilensure_runningget_inherited_fdsconnect_to_new_processset_forkserver_preloadqc@sDeZdZddZddZddZddZd d Zd d Zd dZ dS) ForkServercCs.d|_d|_d|_d|_t|_dg|_dS)N__main__)_forkserver_address_forkserver_alive_fd_forkserver_pid_inherited_fds threadingZLock_lock_preload_modulesselfr?/opt/alt/python38/lib64/python3.8/multiprocessing/forkserver.py__init__"s  zForkServer.__init__c Cs|j|W5QRXdSN)r_stop_unlockedrrrr_stop*szForkServer._stopcCsV|jdkrdSt|jd|_t|jdd|_t|jsLt|jd|_dS)Nr) roscloserwaitpidris_abstract_socket_namespacerunlinkrrrrr/s    zForkServer._stop_unlockedcCs&tdd|jDstd||_dS)Ncss|]}t|tkVqdSr)typestr).0modrrr @sz4ForkServer.set_forkserver_preload..z&module_names must be a list of strings)allr TypeError)rZ modules_namesrrrr >sz!ForkServer.set_forkserver_preloadcCs|jSr)rrrrrr DszForkServer.get_inherited_fdsc Cs|t|dtkr tdttj}||jt \}}t \}}|||j t g}||7}zNz&t||||fWW4W5QRSt |t |YnXW5t |t |XW5QRXdS)Nz too many fds)r lenMAXFDS_TO_SEND ValueErrorsocketAF_UNIXZconnectrr piperrZgetfdr!rZsendfds)rfdsZclientZparent_rchild_wchild_rZparent_wZallfdsrrrr Ls(        z!ForkServer.connect_to_new_processc s|j~t|jdk r`t|jtj\}}|sBW5QRdSt|jd|_ d|_d|_d}|j rddht d}fdd| D}ni}ttj}td}||t|st|d|t\}}ztzV||g} ||||j |f;}t } | gt} | d |g7} t| | | }Wnt|YnXW5t|X||_ ||_||_W5QRXW5QRXdS) NzCfrom multiprocessing.forkserver import main; main(%d, %d, %r, **%r) main_pathsys_pathignorecsi|]\}}|kr||qSrr)r'xyZ desired_keysrr sz-ForkServer.ensure_running..r1iz-c)rrr rr r"WNOHANGr!rrrrZget_preparation_dataitemsr0r1rZarbitrary_addressZbindrr#chmodZlistenr2filenoZget_executableZ_args_from_interpreter_flagsZspawnv_passfds) rpidZstatuscmddatalistenerZaddressalive_rZalive_wZ fds_to_passZexeargsrr;rr isN              zForkServer.ensure_runningN) __name__ __module__ __qualname__rrrr r r r rrrrr src Cs|rdd|kr8|dk r8dt_zt|W5t`X|D]&}z t|Wq<tk r`Yqk r}z|j?t?j@krW5d}~XYnXqW5QRXW5QRXdS)NrTFcWsdSrr)Z_unusedrrrsigchld_handlerszmain..sigchld_handlercSsi|]\}}|t||qSr)signal)r'sigvalrrrr<szmain..)r@cSsg|]\}}|jqSr)Zfileobj)r'keyZeventsrrr szmain..irzChild {0:n} status is {1:n}z.forkserver: waitpid returned unexpected pid %drzToo many ({0:n}) fds to send)ArZcurrent_processZ _inheritingrZimport_main_path __import__ ImportErrorrZ _close_stdinr r2 set_blockingrKSIGCHLDSIGINTSIG_IGNr> set_wakeup_fdr0r1 selectorsZDefaultSelectorZ getsockname _forkserverrregisterZ EVENT_READZselect SystemExitreadr"r=ChildProcessErrorpop WIFSIGNALEDWTERMSIG WIFEXITEDAssertionErrorformat WEXITSTATUS write_signedBrokenPipeErrorr!warningswarnZacceptrZrecvfdsr.r- RuntimeErrorfork_exitextendvalues _serve_one Exceptionsys excepthookexc_infostderrflushOSErrorerrnoZ ECONNABORTED)Z listener_fdrEZpreloadr6r7modnameZsig_rZsig_wrJhandlersZ old_handlersZ pid_to_fdrDZselectorZrfdsrAstsr4 returncodesr3r5code unused_fdsfderrrmains                         rc Cshtd|D]\}}t||q|D]}t|q,|^t_tj_ t_ t |}t ||}|S)NrP)rKrWr>r r!rYrrZ_resource_trackerZ_fdrduprZ_main) r5r3r}rxrLrMr~Zparent_sentinelr|rrrrn1s    rncCsNd}tj}t||kr@t||t|}|s6td||7}q t|dS)Nzunexpected EOFr) SIGNED_STRUCTsizer-r r\EOFErrorZunpack)r~rCZlengthr{rrr read_signedHs  rcCs<t|}|r8t||}|dkr*td||d}q dS)Nrzshould not get here)rZpackr writeri)r~nmsgnbytesrrrreRs   re)NN) rvr rXrKr0Zstructrprrgrrcontextrrrr__all__r.ZStructrobjectrrrnrrerYr r r r rrrrs>           __pycache__/__init__.cpython-38.pyc000064400000001245147577350250013164 0ustar00U ,a@sdddlZddlmZddeejDZeddeDdZd Z d ej kr`ej d ej d <dS) N)contextcCsg|]}|ds|qS)_) startswith).0xr=/opt/alt/python38/lib64/python3.8/multiprocessing/__init__.py s r ccs|]}|ttj|fVqdS)N)getattrr_default_context)rnamerrr sr__main__Z __mp_main__) sysrdirr __all__globalsupdateZSUBDEBUGZ SUBWARNINGmodulesrrrr s  __pycache__/util.cpython-38.pyc000064400000026355147577350250012413 0ustar00U ,a~6@sddlZddlZddlZddlZddlZddlZddlmZddlm Z ddddd d d d d ddddddgZ dZ dZ dZ dZdZdZdZdadaddZddZddZddZdd Zd@d d Zd!d"Zd#d$ZeZd%d&Zd'd ZeZ e!Z"d(d)Z#d*d Z$iZ%e!Z&Gd+dde'Z(dAd,d-Z)d.d Z*da+eee)e j,e j-fd/d0Z.e/e.Gd1dde'Z0Gd2ddej1Z2ze3d3Z4Wne5k rd4Z4YnXd5dZ6d6d7Z7d8d9Z8d:d;Z9dd?Z;dS)BN)_args_from_interpreter_flags)process sub_debugdebuginfo sub_warning get_logger log_to_stderr get_temp_dirregister_after_fork is_exitingFinalizeForkAwareThreadLockForkAwareLocalclose_all_fds_exceptSUBDEBUG SUBWARNING multiprocessingz+[%(levelname)s/%(processName)s] %(message)sFcGstrtjt|f|dSN)_loggerlogrmsgargsr9/opt/alt/python38/lib64/python3.8/multiprocessing/util.pyr,scGstrtjt|f|dSr)rrDEBUGrrrr r0scGstrtjt|f|dSr)rrINFOrrrr r4scGstrtjt|f|dSr)rrrrrrr r8scCs|ddl}|z\tsj|tadt_ttdrFt t t t n$tj t diftj t difW5|XtS)z0 Returns logger used by multiprocessing rN unregisterr)loggingZ _acquireLockZ _releaseLockrZ getLogger LOGGER_NAMEZ propagatehasattratexitr#_exit_functionregisterZ _exithandlersremoveappend)r$rrr r <s     cCsJddl}t}|t}|}|||||rB||dat S)zB Turn on logging and add a handler which prints to stderr rNT) r$r Z FormatterDEFAULT_LOGGING_FORMATZ StreamHandlerZ setFormatterZ addHandlerZsetLevel_log_to_stderrr)levelr$ZloggerZ formatterZhandlerrrr r Ws    cCs tjdkrdSttdrdSdS)NZlinuxTZgetandroidapilevelF)sysplatformr&rrrr #_platform_supports_abstract_socketsls   r1cCs@|sdSt|tr|ddkSt|tr4|ddkStddS)NFrz(address type of {address!r} unrecognized) isinstancebytesstr TypeError)Zaddressrrr is_abstract_socket_namespacets    r7cCs&||t}|dk r"d|jd<dS)Ntempdir)rcurrent_process_config)rmtreer8r9rrr _remove_temp_dirsr<cCsftjd}|dkrbddl}ddl}|jdd}td|tdt |j |fdd|tjd<|S)Nr8rzpymp-)prefixzcreated temp directory %si)r exitpriority) rr9r:getshutiltempfileZmkdtemprrr<r;)r8r@rArrr r s  c Csftt}||D]H\\}}}}z ||Wqtk r^}ztd|W5d}~XYqXqdS)Nz after forker raised exception %s)list_afterfork_registryitemssort Exceptionr)rDindexZidentfuncobjerrr _run_after_forkerss  rKcCs|tttt||f<dSr)rCnext_afterfork_counterid)rIrHrrr r sc@sFeZdZdZdddZdeeejfddZ dd Z d d Z d d Z dS)rzA Class which supports object finalization using weakrefs rNcCs|dk r&t|ts&td|t||dk r>t|||_n|dkrNtd||_ ||_ |p`i|_ |t t f|_t|_|t|j<dS)Nz3Exitpriority ({0!r}) must be None or int, not {1!s}z+Without object, exitpriority cannot be None)r3intr6formattypeweakrefref_weakref ValueError _callback_args_kwargsrL_finalizer_counter_keyosgetpid_pid_finalizer_registry)selfrIcallbackrkwargsr>rrr __init__s"  zFinalize.__init__cCsz ||j=Wntk r(|dYnbX|j|krD|dd}n$|d|j|j|j|j|j|j}d|_|_|_|_|_|SdS)zQ Run the callback unless it has already been called or cancelled zfinalizer no longer registeredz+finalizer ignored because different processNz/finalizer calling %s with args %s and kwargs %s)rZKeyErrorr]rVrWrXrT)r_Zwrr^rr\resrrr __call__s$  zFinalize.__call__cCsDz t|j=Wntk r Yn Xd|_|_|_|_|_dS)z3 Cancel finalization of the object N)r^rZrcrTrVrWrXr_rrr cancels zFinalize.cancelcCs |jtkS)zS Return whether this finalizer is still waiting to invoke callback )rZr^rfrrr still_activeszFinalize.still_activec Csz |}Wnttfk r(d}YnX|dkr>d|jjSd|jjt|jd|jf}|jrr|dt|j7}|j r|dt|j 7}|j ddk r|dt|j d7}|dS) Nz<%s object, dead>z<%s object, callback=%s__name__z, args=z , kwargs=rz, exitpriority=>) rTAttributeErrorr6 __class__rigetattrrVrWr5rXrZ)r_rIxrrr __repr__s"   zFinalize.__repr__)rNN) ri __module__ __qualname____doc__rbr^rr[r\rergrhrorrrr rs   c stdkr dSdkrddn fddfddttD}|jdd|D]P}t|}|dk rPtd |z |WqPtk rd dl}|YqPXqPdkrtdS) z Run all finalizers whose exit priority is not None and at least minpriority Finalizers with highest priority are called first; finalizers with the same priority will be called in reverse order of creation. NcSs |ddk SNrrprrr z!_run_finalizers..cs|ddk o|dkSrsrrt) minpriorityrr rvrwcsg|]}|r|qSrr).0key)frr #sz#_run_finalizers..T)reversez calling %sr) r^rBrEr?rrF traceback print_excclear)rxkeysrz finalizerr~r)r{rxr _run_finalizers s$      rcCs tp tdkS)z6 Returns true if the process is shutting down N)_exitingrrrr r 8scCstsda|d|d|d|dk rr|D] }|jr0|d|j|jq0|D]}|d|j|qX|d|dS)NTzprocess shutting downz2running all "atexit" finalizers with priority >= 0rz!calling terminate() for daemon %szcalling join() for process %sz)running the remaining "atexit" finalizers)rZdaemonnameZ_popenZ terminatejoin)rrractive_childrenr9rurrr r(@s        r(c@s,eZdZddZddZddZddZd S) rcCs|t|tjdSr)_resetr rrfrrr rbqszForkAwareThreadLock.__init__cCs"t|_|jj|_|jj|_dSr) threadingZLock_lockacquirereleaserfrrr rus  zForkAwareThreadLock._resetcCs |jSr)r __enter__rfrrr rzszForkAwareThreadLock.__enter__cGs |jj|Sr)r__exit__)r_rrrr r}szForkAwareThreadLock.__exit__N)rirprqrbrrrrrrr rpsc@seZdZddZddZdS)rcCst|dddS)NcSs |jSr)__dict__r)rIrrr rvrwz)ForkAwareLocal.__init__..)r rfrrr rbszForkAwareLocal.__init__cCs t|dfS)Nr)rQrfrrr __reduce__szForkAwareLocal.__reduce__N)rirprqrbrrrrr rs SC_OPEN_MAXcCsbt|dtg}||dtks,tdtt|dD] }t||d||dq s       V , *    __pycache__/reduction.cpython-38.opt-1.pyc000064400000020032147577350250014353 0ustar00U ,a(%@sddlmZddlZddlZddlZddlZddlZddlZddlZddl m Z ddddd gZ ej d kpe ed oe ed oe ejd ZGdddejZejZd6dd Zej d kre dddg7Z ddlZd7ddddZddZddZddZGdddeZnHe dddg7Z ddlZej dkZddZddZd dZd!dZd"dZd#d$ZGd%d&d&Z ee!e j"ed'd(Z#ee!e$j%e#ee!e&j'e#d)d*Z(d+d,Z)eej*e(ej d krd-d.Z+d/d0Z,eeje+nd1d.Z+d2d0Z,eeje+Gd3d4d4ed5Z-dS)8)ABCMetaN)context send_handle recv_handleForkingPicklerregisterdumpwin32ZCMSG_LEN SCM_RIGHTSsendmsgcsJeZdZdZiZejZfddZe ddZ e d ddZ e j Z ZS) rz)Pickler subclass used by multiprocessing.cs*tj||j|_|j|jdSN)super__init___copyreg_dispatch_tablecopydispatch_tableupdate_extra_reducersselfargs __class__>/opt/alt/python38/lib64/python3.8/multiprocessing/reduction.pyr&s  zForkingPickler.__init__cCs||j|<dS)z&Register a reduce function for a type.N)r)clstypereducerrrr+szForkingPickler.registerNcCs t}|||||Sr )ioBytesIOr getbuffer)robjprotocolZbufrrrdumps0szForkingPickler.dumps)N)__name__ __module__ __qualname____doc__rcopyregrrr classmethodrr$pickleloads __classcell__rrrrr!s   cCst|||dS)z3Replacement for pickle.dump() using ForkingPickler.N)rr )r"filer#rrrr :s DupHandle duplicate steal_handleF)source_processcCs6t}|dkr|}|dkr |}t|||d|tjS)zrrrrdsc@s"eZdZdZdddZddZdS)r/zPicklable wrapper for a handle.Nc Cs\|dkrt}ttjd|}ztt|||dd|_W5t|X||_ ||_ dS)NFr) osgetpidr3r8r9r:r5r4_handle_access_pid)rr7accesspidprocrrrrjs  zDupHandle.__init__c CsZ|jtkr|jSttjd|j}z"t||jt |j dtj WSt|XdS)z1Get the handle. This should only be called once.FN) rGrCrDrEr3r8r9r:r5r4rFr;)rrJrrrrBys zDupHandle.detach)N)r%r&r'r(rrBrrrrr/hs DupFdsendfdsrecvfdsdarwincCsVtd|}tt|dg}||gtjtj|fgtrR|ddkrRt ddS)z,Send an array of fds over an AF_UNIX socket.irAz%did not receive acknowledgement of fdN) arraybyteslenr socket SOL_SOCKETr ACKNOWLEDGErA RuntimeError)sockZfdsmsgrrrrLs  c Cstd}|j|}|dt|\}}}}|s:|s:tztrJ|dt|dkrft dt||d\}} } |tj kr| tj krt| |jdkrt | | t|d|dkrtdt||dt|WSWnt tfk rYnXt dd S) z/Receive an array of fds over an AF_UNIX socket.rOrrQzreceived %d items of ancdatarrPz Len is {0:n} but msg[0] is {1!r}zInvalid data receivedN)rRitemsizeZrecvmsgrUZ CMSG_SPACEEOFErrorrWr=rTrXrVr ValueErrorZ frombytesAssertionErrorformatlist IndexError) rYsizeaZ bytes_sizerZZancdataflagsZaddrZ cmsg_levelZ cmsg_typeZ cmsg_datarrrrMs<      c Cs2t|tjtj}t||gW5QRXdSr<)rUfromfdfilenoAF_UNIX SOCK_STREAMrL)r>r7r?srrrrsc Cs<t|tjtj}t|ddW5QRSQRXdS)r@rrN)rUrerfrgrhrM)r>rirrrrscCsFt}|dk r |||Str:ddlm}||StddS)zReturn a wrapper for an fd.Nr)resource_sharerz&SCM_RIGHTS appears not to be available)rZget_spawning_popenrKZduplicate_for_childHAVE_SEND_HANDLErjr])fdZ popen_objrjrrrrKs  cCs2|jdkrt|j|jjffSt|j|jjffSdSr )__self__getattrr__func__r%mrrr_reduce_methods rsc@seZdZddZdS)_CcCsdSr r)rrrrfsz_C.fN)r%r&r'rurrrrrtsrtcCst|j|jffSr )ro __objclass__r%rqrrr_reduce_method_descriptorsrwcCst|j|j|jpiffSr )_rebuild_partialfuncrkeywords)prrr_reduce_partialsr|cCstj|f||Sr ) functoolspartial)ryrrzrrrrxsrxcCsddlm}t||ffS)Nr) DupSocket)rjr_rebuild_socket)rirrrr_reduce_sockets rcCs|Sr )rB)ZdsrrrrsrcCs"t|}t||j|j|jffSr )rKrfrfamilyrproto)ridfrrrrs cCs|}tj||||dS)N)rf)rBrU)rrrrrmrrrrsc@sdeZdZdZeZeZeZeZeZe j dkr8e Z e Z e Z n eZeZeZeZeZeZeZeZddZdS)AbstractReducerzAbstract base class for use in implementing a Reduction class suitable for use in replacing the standard reduction mechanism used in multiprocessing.r cGsNtttjttttjttttj ttt j t tt j tdSr )rrrtrursr`appendrwint__add__r}r~r|rUrrrrrrs  zAbstractReducer.__init__N)r%r&r'r(rrr rrsysplatformr1r0r/rLrMrKrsrwrxrrrrrrrrs& r) metaclass)N)NF).abcrr)r}rrCr+rUrrlr__all__rhasattrrkZPicklerrrr r3r0r1rrobjectr/rRrWrLrMrKrsrtrrurwr`rrrr|rxr~rrrrrrr sj          #    __pycache__/sharedctypes.cpython-38.opt-2.pyc000064400000015117147577350250015066 0ustar00U ,a@sBddlZddlZddlmZddlmZddlmZmZejZ dddd d d gZ ej ej ej ejejejejejejejejejejejd Zd dZddZddZdddddZddddd Zdd Zd&dd Z ddZ!ddZ"ddZ#dZ$iZ%e&Z'Gddde(Z)Gd d!d!e)Z*Gd"d#d#e)Z+Gd$d%d%e+Z,dS)'N)heap) get_context) reductionassert_spawningRawValueRawArrayValueArraycopy synchronized)cubBhHiIlLqQfdcCs t|}t|}t||dSN)ctypessizeofrZ BufferWrapper rebuild_ctype)type_sizewrapperr"A/opt/alt/python38/lib64/python3.8/multiprocessing/sharedctypes.py _new_value's  r$cGs<t||}t|}tt|dt||j||SNr)typecode_to_typegetr$rmemset addressofr__init__)typecode_or_typeargsrobjr"r"r#r,s   cCsjt||}t|trD||}t|}tt|dt||S|t |}t|}|j ||SdSr%) r&r' isinstanceintr$rr(r)rlenr*)r+size_or_initializerrr-resultr"r"r#r6s    T)lockctxcGsXt|f|}|dkr|S|dkr4|p*t}|}t|dsJtd|t|||dSNF)TNacquirez%r has no method 'acquire')r4)rrRLockhasattrAttributeErrorr )r+r3r4r,r-r"r"r#r Fs   cCsTt||}|dkr|S|dkr0|p&t}|}t|dsFtd|t|||dSr5)rrr7r8r9r )r+r1r3r4r-r"r"r#r Ts    cCstt|}|t|d<|Sr%)r$typerZpointer)r-Znew_objr"r"r#r bs cCs|pt}t|tjr"t|||St|tjrR|jtjkrFt|||St |||St |}z t |}WnRt k rdd|j D}dd|D}d|j}t |tf|}t |<YnX||||SdS)NcSsg|] }|dqS)rr").0Zfieldr"r"r# vsz synchronized..cSsi|]}|t|qSr") make_property)r;namer"r"r# wsz synchronized.. Synchronized)rr.rZ _SimpleCDatar@r _type_c_charSynchronizedStringSynchronizedArrayr: class_cacheKeyErrorZ_fields___name__SynchronizedBase)r-r3r4clsZsclsnamesrZ classnamer"r"r#r gs          cCs@t|t|tjr(t|j|j|jffStt||jdffSdSr) rr.rr rrA_wrapperZ_length_r:)r-r"r"r# reduce_ctypes rLcCs8|dk r||}t|t|}||}||_|Sr)_ForkingPicklerregisterrLZcreate_memoryviewZ from_bufferrK)rr!ZlengthZbufr-r"r"r#rs  rcCsPz t|WStk rJi}tt|fd|||t|<||YSXdS)N) prop_cacherFexectemplate)r>rr"r"r#r=s  r=z def get%s(self): self.acquire() try: return self._obj.%s finally: self.release() def set%s(self, value): self.acquire() try: self._obj.%s = value finally: self.release() %s = property(get%s, set%s) c@sFeZdZdddZddZddZdd Zd d Zd d ZddZ dS)rHNcCsB||_|r||_n|ptdd}||_|jj|_|jj|_dS)NT)Zforce)_obj_lockrr7r6release)selfr-r3r4r"r"r#r*s  zSynchronizedBase.__init__cCs |jSr)rT __enter__rVr"r"r#rWszSynchronizedBase.__enter__cGs |jj|Sr)rT__exit__)rVr,r"r"r#rYszSynchronizedBase.__exit__cCst|t|j|jffSr)rr rSrTrXr"r"r# __reduce__szSynchronizedBase.__reduce__cCs|jSrrSrXr"r"r#get_objszSynchronizedBase.get_objcCs|jSr)rTrXr"r"r#get_lockszSynchronizedBase.get_lockcCsdt|j|jfS)Nz<%s wrapper for %s>)r:rGrSrXr"r"r#__repr__szSynchronizedBase.__repr__)NN) rG __module__ __qualname__r*rWrYrZr\r]r^r"r"r"r#rHs rHc@seZdZedZdS)r@valueN)rGr_r`r=rar"r"r"r#r@sr@c@s4eZdZddZddZddZddZd d Zd S) rDcCs t|jSr)r0rSrXr"r"r#__len__szSynchronizedArray.__len__c Cs&||j|W5QRSQRXdSrr[)rVrr"r"r# __getitem__szSynchronizedArray.__getitem__c Cs|||j|<W5QRXdSrr[)rVrrar"r"r# __setitem__szSynchronizedArray.__setitem__c Cs*||j||W5QRSQRXdSrr[)rVstartstopr"r"r# __getslice__szSynchronizedArray.__getslice__c Cs"|||j||<W5QRXdSrr[)rVrerfvaluesr"r"r# __setslice__szSynchronizedArray.__setslice__N)rGr_r`rbrcrdrgrir"r"r"r#rDs rDc@seZdZedZedZdS)rCrarawN)rGr_r`r=rarjr"r"r"r#rCsrC)NN)-rweakrefrrcontextrrZForkingPicklerrM__all__rBZc_wcharZc_byteZc_ubyteZc_shortZc_ushortZc_intZc_uintZc_longZc_ulongZ c_longlongZ c_ulonglongZc_floatZc_doubler&r$rrr r r r rLrr=rRrPWeakKeyDictionaryrEobjectrHr@rDrCr"r"r"r# sL       __pycache__/spawn.cpython-38.pyc000064400000015067147577350250012564 0ustar00U ,aP$@s$ddlZddlZddlZddlZddlmZmZddlmZddlm Z ddlm Z ddd d d d d gZ ej dkrzdZ dZneeddZ ejdZerejejdanejadd Zdd ZddZddZdd Zd&ddZddZddZdd ZgZ dd Z!d!d"Z"d#d$Z#d%d Z$dS)'N)get_start_methodset_start_method)process) reduction)util_mainfreeze_supportset_executableget_executableget_preparation_dataget_command_lineimport_main_pathwin32Ffrozenzpythonservice.exez python.execCs|adSN _python_exe)Zexer:/opt/alt/python38/lib64/python3.8/multiprocessing/spawn.pyr )scCstSrrrrrrr -scCs$t|dkr|ddkrdSdSdS)z= Return whether commandline indicates we are forking r--multiprocessing-forkTFN)len)argvrrr is_forking4srcCsdttjr`i}tjddD]0}|d\}}|dkr@d||<qt|||<qtf|tdS)zE Run code for process object if this in not the main process rN=None)rsysrsplitint spawn_mainexit)kwdsargnamevaluerrrr >s   cKshttddr(tjdgdd|DSd}|ddd |D;}t}tg|d |dgSd S) zJ Returns prefix of command line used for spawning a child process rFrcSsg|] }d|qS)%s=%rr.0itemrrr Tsz$get_command_line..zWsz#get_command_line..z-cN)getattrr executableitemsjoinrZ_args_from_interpreter_flagsr)r"progZoptsrrrr Ns c Csttjstdtjdkrrddl}ddl}|dk rL||j|j Bd|}nd}t j ||d}| |t j}|}n"ddlm} || j_|}t |}t||} t| dS) z7 Run code specified by data received over pipe z Not forkingrrNF)source_processr)resource_tracker)rrrAssertionErrorplatformmsvcrt_winapiZ OpenProcessZ SYNCHRONIZEZPROCESS_DUP_HANDLErZ duplicateZopen_osfhandleosO_RDONLYr2Z_resource_trackerZ_fdduprr!) Z pipe_handleZ parent_pidZ tracker_fdr5r6r1Z new_handlefdparent_sentinelr2Zexitcoderrrr \s,     r c Cs`tj|ddd@}dt_z$tj|}t|tj|}W5t`XW5QRX| |S)NrbT)closefd) r7fdopenrcurrent_process _inheritingrpickleloadprepare _bootstrap)r;r<Z from_parentZpreparation_dataselfrrrrxs  cCsttddrtddS)NrAFa An attempt has been made to start a new process before the current process has finished its bootstrapping phase. This probably means that you are not using fork to start your child processes and you have forgotten to use the proper idiom in the main module: if __name__ == '__main__': freeze_support() ... The "freeze_support()" line can be omitted if the program is not going to be frozen to produce an executable.)r,rr@ RuntimeErrorrrrr_check_not_importing_mainsrHcCstttjtjd}tjdk r2tj|d<t j }z| d}Wnt k r^Yn Xtj||<|j||t jtjttdt jd}t|jdd}|dk r||d<nft jd kststst|d d}|dk rtj |s tjdk r tj tj|}tj ||d <|S) zM Return info about parent needed by child to unpickle process object ) log_to_stderrauthkeyN log_levelr9)r$sys_pathsys_argvorig_dirdir start_method__main__r$init_main_from_namer__file__init_main_from_path)rHdictrZ_log_to_stderrrr@rJZ_loggerZgetEffectiveLevelrpathcopyindex ValueError ORIGINAL_DIRupdaterr7getcwdrmodulesr,__spec__r4WINEXE WINSERVICEisabsr/normpath)r$drLi main_moduleZ main_mod_name main_pathrrrr sD       cCsd|kr|dt_d|kr,|dt_d|krD|drDtd|kr^t|dd|krp|dt_ d|kr|dt_ d|krt |dd|kr|dt_ d |krt|d d d d |krt|d nd |krt|d dS)zE Try to get current process ready to unpickle process object r$rJrIrKrLrMrOrNrPT)ZforcerRrTN)rr@r$rJrrIZ get_loggerZsetLevelrrVrr7chdirrZr_fixup_main_from_name_fixup_main_from_path)datarrrrDs,   rDcCs~tjd}|dks|dr dSt|jdd|kr6dSt|td}t j |ddd}|j ||tjd<tjd<dS)NrQz .__main__r$ __mp_main__T)run_nameZ alter_sys) rr]endswithr,r^old_main_modulesappendtypes ModuleTyperunpyZ run_module__dict__r[)Zmod_name current_mainre main_contentrrrrhs    rhcCstjd}tjtj|d}|dkr.dSt|dd|krBdSt|t d}t j |dd}|j ||tjd<tjd<dS)NrQrZipythonrSrk)rl)rr]r7rVsplitextbasenamer,rnrorprqrrZrun_pathrsr[)rfrtZ main_namererurrrri s    ricCs t|dS)z< Set sys.modules['__main__'] to module at main_path N)ri)rfrrrr%s)NN)%r7rrrrpr9rrrcontextrr__all__r4r_r`r,r-lowerrmrVr/ exec_prefixrr r rr r r rrHr rnrDrhrirrrrr sD        2&__pycache__/context.cpython-38.opt-1.pyc000064400000031351147577350250014051 0ustar00U ,a+@sddlZddlZddlZddlmZddlmZdZGdddeZGdd d eZ Gd d d eZ Gd d d eZ Gddde Z GdddejZGddde ZejdkrRGdddejZGdddejZGdddejZGddde ZGddde ZGdd d e Zeeed!Zejd"krDeed#Zn eed$Zn8Gd%ddejZGd&dde Zd#eiZeed#Zd'd(ZeZd)d*Zd+d,Zd-d.ZdS)/N)process) reductionc@s eZdZdS) ProcessErrorN__name__ __module__ __qualname__rrrd?Z(e(j)d@d?Z(dAdBZ*d S)O BaseContextcCs"t}|dkrtdn|SdS)z(Returns the number of CPUs in the systemNzcannot determine number of cpus)os cpu_countNotImplementedError)selfZnumrrr r)s zBaseContext.cpu_countcCs&ddlm}||d}||S)zReturns a manager associated with a running server process The managers methods such as `Lock()`, `Condition()` and `Queue()` can be used to create shared objects. r) SyncManagerctx)Zmanagersr get_contextstart)rrmrrr Manager1s zBaseContext.ManagerTcCsddlm}||S)z1Returns two connection object connected by a piper)Pipe) connectionr)rZduplexrrrr r<s zBaseContext.PipecCsddlm}||dS)z#Returns a non-recursive lock objectr)Lockr) synchronizerr)rrrrr rAs zBaseContext.LockcCsddlm}||dS)zReturns a recursive lock objectr)RLockr)rrr)rrrrr rFs zBaseContext.RLockNcCsddlm}|||dS)zReturns a condition objectr) Conditionr)rr r)rlockr rrr r Ks zBaseContext.ConditionrcCsddlm}|||dS)zReturns a semaphore objectr) Semaphorer)rr"r)rvaluer"rrr r"Ps zBaseContext.SemaphorecCsddlm}|||dS)z"Returns a bounded semaphore objectr)BoundedSemaphorer)rr$r)rr#r$rrr r$Us zBaseContext.BoundedSemaphorecCsddlm}||dS)zReturns an event objectr)Eventr)rr%r)rr%rrr r%Zs zBaseContext.EventcCs ddlm}|||||dS)zReturns a barrier objectr)Barrierr)rr&r)rZpartiesactionZtimeoutr&rrr r&_s zBaseContext.BarrierrcCsddlm}|||dS)Returns a queue objectr)Queuer)queuesr)r)rmaxsizer)rrr r)ds zBaseContext.QueuecCsddlm}|||dS)r(r) JoinableQueuer)r*r,r)rr+r,rrr r,is zBaseContext.JoinableQueuecCsddlm}||dS)r(r) SimpleQueuer)r*r-r)rr-rrr r-ns zBaseContext.SimpleQueuercCs"ddlm}||||||dS)zReturns a process pool objectr)Pool)context)Zpoolr.r)rZ processesZ initializerZinitargsZmaxtasksperchildr.rrr r.ss  zBaseContext.PoolcGsddlm}||f|S)zReturns a shared objectr)RawValue) sharedctypesr0)rtypecode_or_typeargsr0rrr r0zs zBaseContext.RawValuecCsddlm}|||S)zReturns a shared arrayr)RawArray)r1r4)rr2size_or_initializerr4rrr r4s zBaseContext.RawArray)r!cGs&ddlm}||f|||dS)z$Returns a synchronized shared objectr)Valuer!r)r1r6r)rr2r!r3r6rrr r6s  zBaseContext.ValuecCs ddlm}|||||dS)z#Returns a synchronized shared arrayr)Arrayr7)r1r8r)rr2r5r!r8rrr r8s zBaseContext.ArraycCs,tjdkr(ttddr(ddlm}|dS)zCheck whether this is a fake forked process in a frozen executable. If so then run code specified by commandline and exit. win32frozenFr)freeze_supportN)sysplatformgetattrspawnr;)rr;rrr r;s zBaseContext.freeze_supportcCsddlm}|S)zZReturn package logger -- if it does not already exist then it is created. r) get_logger)utilr@)rr@rrr r@s zBaseContext.get_loggercCsddlm}||S)z8Turn on logging and add a handler which prints to stderrr) log_to_stderr)rArB)rlevelrBrrr rBs zBaseContext.log_to_stderrcCsddlm}dS)zVInstall support for sending connections and sockets between processes r)rN)r)rrrrr allow_connection_picklingsz%BaseContext.allow_connection_picklingcCsddlm}||dS)zSets the path to a python.exe or pythonw.exe binary used to run child processes instead of sys.executable when using the 'spawn' start method. Useful for people embedding Python. r)set_executableN)r?rF)r executablerFrrr rFs zBaseContext.set_executablecCsddlm}||dS)zkSet list of module names to try to load in forkserver process. This is really just a hint. r)set_forkserver_preloadN) forkserverrH)rZ module_namesrHrrr rHs z"BaseContext.set_forkserver_preloadcCsH|dkr |Sz t|}Wn"tk r:td|dYnX||S)Nzcannot find context for %r)_concrete_contextsKeyError ValueError_check_available)rmethodrrrr rs zBaseContext.get_contextFcCs|jSN)_namerZ allow_nonerrr get_start_methodszBaseContext.get_start_methodcCs tddS)Nz+cannot set start method of concrete context)rLrrNZforcerrr set_start_methodszBaseContext.set_start_methodcCs tdS)z_Controls how objects will be reduced to a form that can be shared with other processes.r)globalsgetrrrr reducerszBaseContext.reducercCs|td<dS)Nr)rU)rrrrr rXscCsdSrOrrWrrr rMszBaseContext._check_available)T)N)r)r)NN)r)r)NNrN)N)N)F)F)+rr r rr r r staticmethodrZcurrent_processZparent_processZactive_childrenrrrrrr r"r$r%r&r)r,r-r.r0r4r6r8r;r@rBrErFrHrrRrTpropertyrXsetterrMrrrr rsR                rc@seZdZdZeddZdS)ProcessNcCstj|SrO)_default_contextrr\_Popen) process_objrrr r^szProcess._Popenrr r Z _start_methodrYr^rrrr r\sr\csFeZdZeZddZd fdd ZdddZdd d Zd d ZZ S)DefaultContextcCs||_d|_dSrO)r]_actual_context)rr/rrr __init__szDefaultContext.__init__Ncs0|dkr |jdkr|j|_|jSt|SdSrO)rbr]superr)rrN __class__rr rs  zDefaultContext.get_contextFcCs<|jdk r|std|dkr,|r,d|_dS|||_dS)Nzcontext has already been set)rb RuntimeErrorrrSrrr rTs  zDefaultContext.set_start_methodcCs"|jdkr|rdS|j|_|jjSrO)rbr]rPrQrrr rRs  zDefaultContext.get_start_methodcCsBtjdkrdgStjdkr"ddgnddg}tjr:|d|SdS)Nr9r?darwinforkrI)r<r=rHAVE_SEND_HANDLEappend)rmethodsrrr get_all_start_methodss   z$DefaultContext.get_all_start_methods)N)F)F) rr r r\rcrrTrRrm __classcell__rrrer ras   rar9c@seZdZdZeddZdS) ForkProcessricCsddlm}||SNr)Popen)Z popen_forkrqr_rqrrr r^s zForkProcess._PopenNr`rrrr rosroc@seZdZdZeddZdS) SpawnProcessr?cCsddlm}||Srp)Zpopen_spawn_posixrqrrrrr r^s SpawnProcess._PopenNr`rrrr rssrsc@seZdZdZeddZdS)ForkServerProcessrIcCsddlm}||Srp)Zpopen_forkserverrqrrrrr r^ s zForkServerProcess._PopenNr`rrrr rusruc@seZdZdZeZdS) ForkContextriN)rr r rPror\rrrr rv%srvc@seZdZdZeZdS SpawnContextr?Nrr r rPrsr\rrrr rx)srxc@seZdZdZeZddZdS)ForkServerContextrIcCstjstddS)Nz%forkserver start method not available)rrjrLrWrrr rM0sz"ForkServerContext._check_availableN)rr r rPrur\rMrrrr rz-srz)rir?rIrhr?ric@seZdZdZeddZdS)rsr?cCsddlm}||Srp)Zpopen_spawn_win32rqrrrrr r^Ds rtNr`rrrr rsBsc@seZdZdZeZdSrwryrrrr rxIscCst|t_dSrO)rJr]rb)rNrrr _force_start_methodVsr{cCs ttddS)Nspawning_popen)r>_tlsrrrr get_spawning_popen_sr~cCs |t_dSrO)r}r|)popenrrr set_spawning_popenbsrcCs tdkrtdt|jdS)NzF%s objects should only be shared between processes through inheritance)r~rgtyper)objrrr assert_spawninges  r) rr<Z threadingrDrr__all__ Exceptionrr r robjectrZ BaseProcessr\rar=rorsrurvrxrzrJr]r{Zlocalr}r~rrrrrr sL  ?,   __pycache__/managers.cpython-38.opt-1.pyc000064400000120606147577350250014164 0ustar00U ,a@sBdddddgZddlZddlZddlZddlZddlZddlZddlZddlmZddl m Z d d l m Z d d l mZmZmZd d l mZd d l mZd dl mZd dl mZzd dl mZdZWnek rdZYnXddZeejedddDZedek r.ddZeD]ZeeeqGdddeZdifddZ ddZ!Gd d!d!e"Z#d"d#Z$d$d%Z%Gd&d'd'eZ&Gd(d)d)eZ'e j(e j)fe j*e j+fd*Z,Gd+ddeZ-Gd,d-d-e.Z/Gd.ddeZ0d/d0Z1ifd1d2Z2dld3d4Z3Gd5d6d6eZ4Gd7d8d8eZ5dmd9d:Z6Gd;d<dd>e0Z8Gd?d@d@e8Z9GdAdBdBe0Z:GdCdDdDe0Z;GdEdFdFe0ZGdKdLdLe>Z?e2dMdNZ@dOdPie@_Ae2dQdRZBe2dSdTZCdUdUdUdPdPdVeC_AGdWdSdSeCZDGdXdde-ZEeEdYejFeEdZejFeEd[ejGe:eEd\ejHe8eEd]ejIe8eEd^ejJe8eEd_ejKe8eEd`ejLe9eEdaejMe;eEdbejNeDeEdcee?eEddeOe@eEd8e5e=eEd:e6eBeEd6e4e<eEjdPe7ddeeEjdUddfer>GdgdhdhZPGdidjdje&ZQGdkdde-ZRdS)n BaseManager SyncManager BaseProxyTokenSharedMemoryManagerN)getpid) format_exc) connection) reductionget_spawning_popen ProcessError)pool)process)util) get_context) shared_memoryTFcCstj|j|ffSN)arraytypecodetobytes)ar=/opt/alt/python38/lib64/python3.8/multiprocessing/managers.py reduce_array-srcCsg|]}tti|qSr)typegetattr.0namerrr 1sr )itemskeysvaluescCstt|ffSr)listobjrrrrebuild_as_list3sr'c@s4eZdZdZdZddZddZddZd d Zd S) rz3 Type to uniquely identify a shared object typeidaddressidcCs||||_|_|_dSrr()selfr)r*r+rrr__init__BszToken.__init__cCs|j|j|jfSrr(r,rrr __getstate__EszToken.__getstate__cCs|\|_|_|_dSrr(r,staterrr __setstate__HszToken.__setstate__cCsd|jj|j|j|jfS)Nz %s(typeid=%r, address=%r, id=%r)) __class____name__r)r*r+r.rrr__repr__KszToken.__repr__N) r4 __module__ __qualname____doc__ __slots__r-r/r2r5rrrrr<s rcCs8|||||f|\}}|dkr*|St||dS)zL Send a message to manager using connection `c` and return response #RETURNN)sendrecvconvert_to_error)cr+ methodnameargskwdskindresultrrrdispatchSs  rDcCsd|dkr |S|dkrRt|ts4td||t||dkrHtd|St|Sntd|SdS)N#ERROR) #TRACEBACK#UNSERIALIZABLEz.Result {0!r} (kind '{1}') type is {2}, not strrGzUnserializable message: %s zUnrecognized message type {!r}) isinstancestr TypeErrorformatr RemoteError ValueError)rBrCrrrr=]s   r=c@seZdZddZdS)rLcCsdt|jddS)NzM --------------------------------------------------------------------------- rzK---------------------------------------------------------------------------)rIr@r.rrr__str__mszRemoteError.__str__N)r4r6r7rNrrrrrLlsrLcCs2g}t|D] }t||}t|r ||q |S)z4 Return a list of names of methods of `obj` )dirrcallableappend)r&temprfuncrrr all_methodsts    rTcCsddt|DS)zP Return a list of names of methods of `obj` which do not start with '_' cSsg|]}|ddkr|qS)r_rrrrrr s z"public_methods..)rTr%rrrpublic_methodssrVc @seZdZdZdddddddd d g Zd d Zd dZddZddZddZ ddZ ddZ ddZ e e e dZ ddZddZd d!Zd"d#Zd$d%Zd&e_d'd(Zd)d*Zd+d,Zd-d.Zd/S)0ServerzM Server class which runs in a process controlled by a manager object shutdowncreateaccept_connection get_methods debug_infonumber_of_objectsdummyincrefdecrefcCsxt|tstd|t|||_t||_t |\}}||dd|_ |j j |_ ddi|_ i|_ i|_t|_dS)Nz&Authkey {0!r} is type {1!s}, not bytes)r*Zbacklog0Nr)rHbytesrJrKrregistryrAuthenticationStringauthkeylistener_clientlistenerr* id_to_objid_to_refcountid_to_local_proxy_obj threadingLockmutex)r,rer*rg serializerListenerClientrrrr-s      zServer.__init__c Cst|_|t_zVtj|jd}d|_|z|jsL|jdq4Wnttfk rfYnXW5tjtjkrt dtjt_tj t_ t dXdS)z( Run the server forever zresetting stdout, stderrr)targetTr N)rmEvent stop_eventrcurrent_process_manager_serversysstdout __stdout__rdebug __stderr__stderrexitThreadaccepterdaemonstartis_setwaitKeyboardInterrupt SystemExit)r,rrrr serve_forevers       zServer.serve_forevercCsNz|j}Wntk r&YqYnXtj|j|fd}d|_|qdS)Nrsr@T)riZacceptOSErrorrmrhandle_requestrr)r,r>trrrrs zServer.accepterc Cs4d}}}z>t||jt||j|}|\}}}}t||}Wntk rhdtf} Yn>Xz||f||}Wntk rdtf} Yn Xd|f} z|| Wnrtk r&} zRz|dtfWntk rYnXt d| t d|t d| W5d} ~ XYnX| dS)z) Handle a new connection NrFr:zFailure to send message: %rz ... request was %r ... exception was %r) r Zdeliver_challengergZanswer_challenger<r Exceptionrr;rinfoclose) r,r>funcnamerCrequestignorer@rArSmsgerrrrs2    zServer.handle_requestc Cstdtj|j}|j}|j}|j szBd}}|}|\}}} } z||\}} } Wn^t k r} z@z|j |\}} } Wn&t k r}z| W5d}~XYnXW5d} ~ XYnX|| krt d|t || ft||}z|| | }Wn,tk r"}z d|f}W5d}~XYnPX| o4| |d}|rj||||\}}t||j|}d||ff}nd|f}Wnt k r|dkrdtf}nNz,|j|}|||||f| | }d|f}Wn tk rdtf}YnXYnPtk rtdtjtd Yn tk r<dtf}YnXzDz ||Wn2tk r~}z|d tfW5d}~XYnXWq$tk r}z@td tjtd |td ||tdW5d}~XYq$Xq$dS)zQ Handle requests from the proxies in a particular process/thread z$starting server thread to service %rNz+method %r of %r object is not in exposed=%rrE#PROXYr:rFz$got EOF -- exiting thread serving %rrrGzexception in thread serving %rz ... message was %rrr )rr{rmcurrent_threadrr<r;rjrurKeyErrorrlAttributeErrorrrrgetrYrr*rfallback_mappingEOFErrorrxr~rr)r,connr<r;rjr?r&ridentr@rAexposed gettypeidkeZ second_keZfunctionresrrr)ZridentZrexposedtokenZ fallback_funcrCrrr serve_clients   (        $  zServer.serve_clientcCs|Srrr,rrr&rrrfallback_getvalue5szServer.fallback_getvaluecCst|SrrIrrrr fallback_str8szServer.fallback_strcCst|Sr)reprrrrr fallback_repr;szServer.fallback_repr)rNr5 #GETVALUEcCsdSrrr,r>rrrr^Dsz Server.dummyc Cs|jtg}t|j}||D]<}|dkr&|d||j|t|j|dddfq&d|W5QRSQRXdS)zO Return some info --- useful to spot problems with refcounting rbz %s: refcount=%s %srNK ) ror$rkr"sortrQrIrjjoin)r,r>rCr"rrrrr\Gs zServer.debug_infocCs t|jS)z* Number of shared objects )lenrkrrrrr]WszServer.number_of_objectscCsLz:ztd|dWnddl}|YnXW5|jXdS)z' Shutdown this process z!manager received shutdown messager:NrN)rusetrr{r; traceback print_exc)r,r>rrrrrX^s zServer.shutdownc Ost|dkr|^}}}}n|s(tdnd|krDtdt|d|d}t|dkr~|^}}}ddl}|jd tdd nFd |krtdt|d|d }|^}}ddl}|jd tdd t|}|j|j|\}}}} |dkr|st|dkr t d |d} n |||} |dkr2t | }|dk rlt |t s\td |t|t|t|}dt| } td|| | t||f|j| <| |jkrd|j| <W5QRX||| | t|fS)z> Create a new shared object and return its id z8descriptor 'create' of 'Server' object needs an argumentr)7create expected at least 2 positional arguments, got %dr rNz2Passing 'typeid' as keyword argument is deprecated) stacklevelr>z-Passing 'c' as keyword argument is deprecatedz4Without callable, must have one non-keyword argumentz,Method_to_typeid {0!r}: type {1!s}, not dictz%xz&%r callable returned object with id %r)rrJpopwarningswarnDeprecationWarningtuplerorerMrVrHdictrKrr$r+rr{rrjrkr_) r@rAr,r>r)rrPrmethod_to_typeid proxytyper&rrrrrYksp                  z Server.createz$($self, c, typeid, /, *args, **kwds)cCst|j|jdS)zL Return the methods of the shared object indicated by token r )rrjr+)r,r>rrrrr[szServer.get_methodscCs"|t_|d||dS)z= Spawn a new thread to serve this connection rN)rmrrr;r)r,r>rrrrrZs  zServer.accept_connectionc Cs|jz|j|d7<Wnhtk r}zJ||jkrrd|j|<|j||j|<|j|\}}}td|n|W5d}~XYnXW5QRXdS)Nr z&Server re-enabled tracking & INCREF %r)rorkrrlrjrr{)r,r>rrr&rrrrrr_s  z Server.increfc Cs||jkr$||jkr$td|dS|jZ|j|dkrXtd||j||j||j|d8<|j|dkr|j|=W5QRX||jkrd|j|<td||j|j|=W5QRXdS)NzServer DECREF skipping %rrz+Id {0!s} ({1!r}) has refcount {2:n}, not 1+r )NrNzdisposing of obj with id %r)rkrlrr{roAssertionErrorrKrj)r,r>rrrrr`s,     z Server.decrefN)r4r6r7r8publicr-rrrrrrrrr^r\r]rXrY__text_signature__r[rZr_r`rrrrrWs< "Q =rWc@seZdZdgZdZdZdZdS)Statevaluerr rN)r4r6r7r9INITIALSTARTEDSHUTDOWNrrrrrsr)pickleZ xmlrpclibc@seZdZdZiZeZd"ddZddZdd Z d#d d Z e d$d dZ ddZ d%ddZddZddZddZddZeddZeddZe d&d d!ZdS)'rz! Base class for managers NrcCs\|dkrtj}||_t||_t|_tj|j_ ||_ t |\|_ |_ |pTt|_dSr)rrvrg_addressrf_authkeyr_staterr _serializerrhZ _Listener_Clientr_ctx)r,r*rgrpZctxrrrr-s   zBaseManager.__init__cCsf|jjtjkrP|jjtjkr&tdn*|jjtjkr>tdntd|jjt|j |j |j |j S)zX Return server object with serve_forever() method and address attribute Already started serverManager has shut downUnknown state {!r}) rrrrrr rrKrW _registryrrrr.rrr get_servers    zBaseManager.get_servercCs8t|j\}}||j|jd}t|ddtj|j_dS)z> Connect manager object to the server process rgNr^) rhrrrrDrrrr)r,rqrrrrrrconnects zBaseManager.connectrc Cs4|jjtjkrP|jjtjkr&tdn*|jjtjkr>tdntd|jj|dk rht|sht dt j dd\}}|j j t|j|j|j|j|j|||fd|_d d d |jjD}t|jd ||j_|j|||_|tj|j_tj|t|j|j|j|j|j|jfd d|_ dS)z@ Spawn a server process for this manager object rrrNzinitializer must be a callableF)Zduplexr:css|]}t|VqdSrr)rirrr Asz$BaseManager.start..-rr@Z exitpriority)!rrrrrr rrKrPrJr ZPiperZProcessr _run_serverrrrr_processrZ _identityr4rrrr<rFinalize_finalize_managerrrX)r, initializerinitargsreaderwriterrrrrr(sH        zBaseManager.startc Cs^ttjtj|dk r |||||||}||j|td|j| dS)z@ Create a server, report its address and run it Nzmanager serving at %r) signalSIGINTSIG_IGN_Serverr;r*rrrr) clsrer*rgrprrrserverrrrrSs zBaseManager._run_servercOsN|j|j|jd}zt|dd|f||\}}W5|Xt||j||fS)zP Create a new shared object; return the token and exposed tuple rNrY)rrrrrDr)r,r)r@rArr+rrrr_createjs  zBaseManager._createcCs*|jdk r&|j||js&d|_dS)zC Join the manager process (if it has been spawned) N)rris_aliver,timeoutrrrrvs   zBaseManager.joincCs2|j|j|jd}zt|ddWS|XdS)zS Return some info about the servers shared objects and connections rNr\rrrrrDr,rrrr _debug_infoszBaseManager._debug_infocCs2|j|j|jd}zt|ddWS|XdS)z5 Return the number of shared objects rNr]rrrrr_number_of_objectsszBaseManager._number_of_objectscCsj|jjtjkr||jjtjkrf|jjtjkr.temp) __dict__rcopy AutoProxyrr$r!r4setattr) rr)rPrrr create_methodkeyrrRrrrregisters(     zBaseManager.register)NNrN)Nr)Nr)N)NNNNT)r4r6r7r8rrWrr-rrr classmethodrrrrrrr staticmethodrpropertyr*rrrrrrs8  +       c@seZdZddZddZdS)ProcessLocalSetcCst|dddS)NcSs|Sr)clearr%rrrz*ProcessLocalSet.__init__..)rregister_after_forkr.rrrr-szProcessLocalSet.__init__cCs t|dfSrc)rr.rrr __reduce__szProcessLocalSet.__reduce__N)r4r6r7r-rrrrrr sr c@seZdZdZiZeZdddZddZ d ifd d Z d d Z ddZ e ddZddZddZddZddZddZdS)rz. A base for proxies of shared objects NTFc Cstj8tj|jd}|dkr:ttf}|tj|j<W5QRX|d|_|d|_ ||_ |j j |_ ||_ ||_t|d|_||_|dk rt||_n"|j dk r|j j|_n tj|_|r|t|tjdS)Nrr )r_mutexrrr*rZForkAwareLocalr _tls_idset_tokenr+_id_managerrrhr_owned_by_managerrrfrrvrg_increfr  _after_fork) r,rrprrgrr_ manager_ownedZ tls_idsetrrrr-s*      zBaseProxy.__init__cCsdtdtj}tjdkr4|dtj7}|j|jj |j d}t |dd|f||j _ dS)Nzmaking connection to managerZ MainThread|rrZ)rr{rrvrrmrrrr*rrDrr )r,rrrrr_connect-s  zBaseProxy._connectrc Csz |jj}Wn6tk rBtdtj||jj}YnX| |j |||f| \}}|dkrp|S|dkr|\}}|j j |jd} |jj|_| ||j|j |j|d} |j|j|jd}t|dd|jf| St||dS) zV Try to call a method of the referent and return a copy of the result z#thread %r does not own a connectionr:rrrNr`)rr rrr{rmrrrr;rr<rrr)rr*rrrrDr+r=) r,r?r@rArrBrCrrrrrrr _callmethod6s6   zBaseProxy._callmethodcCs |dS)z9 Get a copy of the value of the referent rrr.rrr _getvalueTszBaseProxy._getvaluec Cs|jrtd|jjdS|j|jj|jd}t|dd|j ftd|jj|j |j |j oj|j j }tj|tj|j|j||j|j |jfdd|_dS)Nz%owned_by_manager skipped INCREF of %rrr_z INCREF %r r)rrr{rr+rr*rrDrraddrrrr_decrefrZ_close)r,rr1rrrrZs$ zBaseProxy._increfc Cs||j|dks |jtjkrz2td|j||j|d}t|dd|jfWqt k r}ztd|W5d}~XYqXntd|j|st |drtdt j |j|`dS)Nz DECREF %rrr`z... decref failed %sz%DECREF %r -- manager already shutdownr z-thread %r has no more proxies so closing conn)discardr+rrrrr{r*rDrrrmrrr r)rrgr1ZtlsZidsetrrrrrrr!ns   zBaseProxy._decrefc CsHd|_z |Wn0tk rB}ztd|W5d}~XYnXdS)Nzincref failed: %s)rrrrr)r,rrrrrs  zBaseProxy._after_forkcCs^i}tdk r|j|d<t|ddrB|j|d<tt|j|j|ffStt||j|j|ffSdS)Nrg_isautoFr) r rrr RebuildProxyrrrrr,rArrrrs    zBaseProxy.__reduce__cCs|Sr)r)r,Zmemorrr __deepcopy__szBaseProxy.__deepcopy__cCsdt|j|jjt|fS)Nz<%s object, typeid %r at %#x>)rr4rr)r+r.rrrr5szBaseProxy.__repr__cCs:z |dWStk r4t|dddYSXdS)zV Return representation of the referent (or a fall-back if that fails) r5Nrz; '__str__()' failed>)rrrr.rrrrNs zBaseProxy.__str__)NNNTF)r4r6r7r8rrZForkAwareThreadLockrr-rrrrrr!rrr&r5rNrrrrrs( )   cCsttdd}|rT|j|jkrTtd|d|d<|j|jkrT|j|j|j|j<| ddopttdd }|||fd|i|S) z5 Function used for unpickling proxy objects. rwNz*Rebuild a proxy owned by manager, token=%rTrr_Z _inheritingF) rrrvr*rr{r+rlrjr)rSrrprArr_rrrr$s    r$cCspt|}z|||fWStk r*YnXi}|D]}td||f|q4t|tf|}||_||||f<|S)zB Return a proxy type whose methods are given by `exposed` zOdef %s(self, /, *args, **kwds): return self._callmethod(%r, args, kwds))rrexecrrr)rr_cacheZdicZmeth ProxyTyperrr MakeProxyTypes  r*c Cst|d}|dkrB||j|d}zt|dd|f}W5|X|dkrX|dk rX|j}|dkrjtj}td|j |}||||||d} d| _ | S)z* Return an auto-proxy for `token` r Nrr[z AutoProxy[%s])rrgr_T) rhr*rrDrrrvrgr*r)r#) rrprrgrr_rrr)rrrrrs     rc@seZdZddZddZdS) NamespacecKs|j|dSr)rupdater%rrrr-szNamespace.__init__cCsZt|j}g}|D]$\}}|ds|d||fq|d|jjd|fS)NrUz%s=%rz%s(%s)z, ) r$rr! startswithrQrr3r4r)r,r!rRrrrrrr5s  zNamespace.__repr__N)r4r6r7r-r5rrrrr+sr+c@s8eZdZd ddZddZddZdd ZeeeZd S) ValueTcCs||_||_dSr) _typecode_value)r,rrlockrrrr-szValue.__init__cCs|jSrr0r.rrrrsz Value.getcCs ||_dSrr2r,rrrrr sz Value.setcCsdt|j|j|jfS)Nz %s(%r, %r))rr4r/r0r.rrrr5 szValue.__repr__N)T) r4r6r7r-rrr5rrrrrrr.s  r.cCs t||Sr)r)rsequencer1rrrArraysr5c@s8eZdZdZddZddZddZdd Zd d Zd S) IteratorProxy)__next__r;throwrcCs|Srrr.rrr__iter__szIteratorProxy.__iter__cGs |d|S)Nr7rr,r@rrrr7szIteratorProxy.__next__cGs |d|S)Nr;rr:rrrr;szIteratorProxy.sendcGs |d|S)Nr8rr:rrrr8szIteratorProxy.throwcGs |d|S)Nrrr:rrrr!szIteratorProxy.closeN) r4r6r7rr9r7r;r8rrrrrr6s r6c@s2eZdZdZd ddZddZdd Zd d ZdS) AcquirerProxy)acquirereleaseTNcCs"|dkr|fn||f}|d|SNr<r)r,Zblockingrr@rrrr<'szAcquirerProxy.acquirecCs |dSNr=rr.rrrr=*szAcquirerProxy.releasecCs |dSr>rr.rrrr,szAcquirerProxy.__enter__cCs |dSr?rrrrrr.szAcquirerProxy.__exit__)TN)r4r6r7rr<r=rrrrrrr;%s  r;c@s6eZdZdZd ddZd ddZdd Zdd d ZdS)ConditionProxy)r<r=rnotify notify_allNcCs|d|fSNrrrrrrr4szConditionProxy.waitr cCs|d|fS)NrAr)r,nrrrrA6szConditionProxy.notifycCs |dS)NrBrr.rrrrB8szConditionProxy.notify_allcCsd|}|r|S|dk r$t|}nd}d}|s`|dk rN|t}|dkrNq`|||}q,|S)Nr)time monotonicr)r,Z predicaterrCZendtimeZwaittimerrrwait_for:s  zConditionProxy.wait_for)N)r )N)r4r6r7rrrArBrGrrrrr@2s   r@c@s2eZdZdZddZddZddZd d d ZdS) EventProxy)rrr rcCs |dS)Nrrr.rrrrOszEventProxy.is_setcCs |dSNrrr.rrrrQszEventProxy.setcCs |dS)Nr rr.rrrr SszEventProxy.clearNcCs|d|fSrCrrrrrrUszEventProxy.wait)N)r4r6r7rrrr rrrrrrHMs rHc@sNeZdZdZdddZddZddZed d Zed d Z ed dZ dS) BarrierProxy)__getattribute__rabortresetNcCs|d|fSrCrrrrrr[szBarrierProxy.waitcCs |dS)NrLrr.rrrrL]szBarrierProxy.abortcCs |dS)NrMrr.rrrrM_szBarrierProxy.resetcCs |ddS)NrK)partiesrr.rrrrNaszBarrierProxy.partiescCs |ddS)NrK) n_waitingrr.rrrrOdszBarrierProxy.n_waitingcCs |ddS)NrK)brokenrr.rrrrPgszBarrierProxy.broken)N) r4r6r7rrrLrMrrNrOrPrrrrrJYs   rJc@s(eZdZdZddZddZddZdS) NamespaceProxy)rK __setattr__ __delattr__cCs0|ddkrt||St|d}|d|fS)NrrUrrK)objectrKr,r callmethodrrr __getattr__ns   zNamespaceProxy.__getattr__cCs4|ddkrt|||St|d}|d||fS)NrrUrrR)rTrRrK)r,rrrVrrrrRss  zNamespaceProxy.__setattr__cCs0|ddkrt||St|d}|d|fS)NrrUrrS)rTrSrKrUrrrrSxs   zNamespaceProxy.__delattr__N)r4r6r7rrWrRrSrrrrrQlsrQc@s*eZdZdZddZddZeeeZdS) ValueProxy)rrcCs |dS)Nrrr.rrrrszValueProxy.getcCs|d|fSrIrr3rrrrszValueProxy.setN)r4r6r7rrrrrrrrrrXsrX BaseListProxy)__add__ __contains__ __delitem__ __getitem____len____mul__ __reversed____rmul__ __setitem__rQcountextendindexinsertrremovereverser__imul__c@seZdZddZddZdS) ListProxycCs|d|f|S)Nrdrr3rrr__iadd__szListProxy.__iadd__cCs|d|f|S)Nrirr3rrrriszListProxy.__imul__N)r4r6r7rkrirrrrrjsrj DictProxy)r[r\r]r9r^rbr rrr!r"rpopitem setdefaultr,r#r9Iterator ArrayProxy)r^r]rb PoolProxy) Zapply apply_asyncrimapimap_unorderedrmap map_asyncstarmap starmap_asyncrZ AsyncResult)rrrvrxrsrtc@seZdZddZddZdS)rqcCs|Srrr.rrrrszPoolProxy.__enter__cCs |dSr)rrrrrrszPoolProxy.__exit__N)r4r6r7rrrrrrrqsc@seZdZdZdS)ra( Subclass of `BaseManager` which supports a number of shared object types. The types registered are those intended for the synchronization of threads, plus `dict`, `list` and `Namespace`. The `multiprocessing.Manager()` function creates started instances of this class. N)r4r6r7r8rrrrrsQueueZ JoinableQueuertrnRLock SemaphoreBoundedSemaphore ConditionBarrierPoolr$r)rr)rc@sLeZdZdZgfddZddZddZdd Zd d Zd d Z ddZ dS)_SharedMemoryTrackerz+Manages one or more shared memory segments.cCs||_||_dSrZshared_memory_context_name segment_names)r,rrrrrr-sz_SharedMemoryTracker.__init__cCs(td|dt|j|dS)z6Adds the supplied shared memory block name to tracker.zRegister segment  in pid N)rr{rrrQr, segment_namerrrregister_segmentsz%_SharedMemoryTracker.register_segmentcCsBtd|dt|j|t|}||dS)zCalls unlink() on the shared memory block with the supplied name and removes it from the list of blocks being tracked.zDestroy segment rN) rr{rrrgr SharedMemoryrunlink)r,rZsegmentrrrdestroy_segments   z$_SharedMemoryTracker.destroy_segmentcCs"|jddD]}||qdS)zrrrrr.sz SharedMemoryServer.track_segmentcCs|j|dS)zCalls unlink() on the shared memory block with the supplied name and removes it from the tracker instance inside the Server.N)rrrrrrr2sz"SharedMemoryServer.release_segmentcCs|jjS)zbReturns a list of names of shared memory blocks that the Server is currently tracking.)rrrrrrr7sz SharedMemoryServer.list_segmentsN) r4r6r7rWrr-rYrrXrrrrrrrrs rc@s<eZdZdZeZddZddZddZdd Z d d Z d S) raLike SyncManager but uses SharedMemoryServer instead of Server. It provides methods for creating and returning SharedMemory instances and for creating a list-like object (ShareableList) backed by shared memory. It also provides methods that create and return Proxy Objects that support synchronization across processes (i.e. multi-process-safe locks and semaphores). cOsNtjdkrddlm}|tj|f||t|j j dt dS)Nposixr )resource_trackerz created by pid ) rrrZensure_runningrr-rr{r3r4r)r,r@rrrrrr-Is   zSharedMemoryManager.__init__cCst|jjdtdS)Nz.__del__ by pid )rr{r3r4rr.rrrrUszSharedMemoryManager.__del__cCsh|jjtjkrP|jjtjkr&tdn*|jjtjkr>tdntd|jj||j |j |j |j S)z@Better than monkeypatching for now; merge into Server ultimatelyz"Already started SharedMemoryServerz!SharedMemoryManager has shut downr) rrrrrr rrKrrrrrr.rrrrYs    zSharedMemoryManager.get_serverc Csx|j|j|jd\}tjdd|d}zt|dd|jfWn.tk rh}z||W5d}~XYnXW5QRX|S)zoReturns a new SharedMemory instance with the specified size in bytes, to be tracked by the manager.rNT)rYsizer) rrrrrrDr BaseExceptionr)r,rrZsmsrrrrrfs z SharedMemoryManager.SharedMemoryc Csv|j|j|jdZ}t|}zt|dd|jjfWn0tk rf}z|j |W5d}~XYnXW5QRX|S)zReturns a new ShareableList instance populated with the values from the input sequence, to be tracked by the manager.rNr) rrrr ShareableListrDZshmrrr)r,r4rZslrrrrrrs   z!SharedMemoryManager.ShareableListN) r4r6r7r8rrr-rrrrrrrrr=s    )NNNT)T)S__all__rxrmrrZqueuerErrrrrr contextr r r rrrrrZ HAS_SHMEM ImportErrorrrZ view_typesr$r'Z view_typerTrrDr=rrLrTrVrWrrqrrZ XmlListenerZ XmlClientrhrrr rr$r*rr+r.r5r6r;r@rHrJrQrXrYrjrlrrpZ BasePoolProxyrqrryrtrnrzr{r|r}r~rrrrrrrrr s            c   w 4             %8__pycache__/shared_memory.cpython-38.opt-1.pyc000064400000033541147577350250015226 0ustar00U ,aD@sdZddgZddlmZddlZddlZddlZddlZddlZej dkrXddl Z dZ n ddl Z dZ ej ejBZd Ze r~d Znd Zd d ZGdddZdZGdddZdS)zProvides shared memory for direct access across processes. The API of this package is currently provisional. Refer to the documentation for details. SharedMemory ShareableList)partialNntFTz/psm_Zwnsm_cCs"tttd}tt|}|S)z6Create a random filename for the shared memory object.)_SHM_SAFE_NAME_LENGTHlen_SHM_NAME_PREFIXsecretsZ token_hex)nbytesnamerB/opt/alt/python38/lib64/python3.8/multiprocessing/shared_memory.py_make_filename&src@seZdZdZdZdZdZdZej Z dZ e r.dndZ ddd Zd d Zd d ZddZeddZeddZeddZddZddZdS)raCreates a new shared memory block or attaches to an existing shared memory block. Every shared memory block is assigned a unique name. This enables one process to create a shared memory block with a particular name so that a different process can attach to that same shared memory block using that same name. As a resource for sharing data across processes, shared memory blocks may outlive the original process that created them. When one process no longer needs access to a shared memory block that might still be needed by other processes, the close() method should be called. When a shared memory block is no longer needed by any process, the unlink() method should be called to ensure proper cleanup.NiTFrc Csl|dkstd|r0ttjB|_|dkr0td|dkrL|jtj@sLtdtrH|dkrt}ztj ||j|j d|_ Wnt k rYqZYnX||_ qqZn.|jrd|n|}tj ||j|j d|_ ||_ z<|r|rt|j |t|j }|j}t|j ||_Wn tk r*|YnXddlm}||j d n|r|dkr^tn|}ttjtjtj|d ?d @|d @|}zXt}|tjkr|dk rt t j!t"t j!|tjnWqNtjd ||d |_W5t|X||_ qVqNnX||_ t#tj$d|}zt%|tj$ddd} W5t|Xt&| }tjd ||d |_||_'t(|j|_)dS)Nrz!'size' must be a positive integerz4'size' must be a positive number different from zeroz&'name' can only be None if create=True)mode/)register shared_memory lr)ZtagnameF)* ValueError_O_CREXosO_RDWR_flagsO_EXCL _USE_POSIXr _posixshmemZshm_open_mode_fdFileExistsError_name_prepend_leading_slash ftruncatefstatst_sizemmap_mmapOSErrorunlinkresource_trackerr_winapiZCreateFileMappingZINVALID_HANDLE_VALUEZNULLZPAGE_READWRITEZ CloseHandleZ GetLastErrorZERROR_ALREADY_EXISTSerrnoZEEXISTstrerrorZOpenFileMappingZ FILE_MAP_READZ MapViewOfFileZVirtualQuerySize_size memoryview_buf) selfr createsizeZstatsrZ temp_nameZh_mapZlast_error_codeZp_bufrrr__init__Is             zSharedMemory.__init__cCs&z |Wntk r YnXdSN)closer*r3rrr__del__s zSharedMemory.__del__cCs|j|jd|jffS)NF) __class__r r5r9rrr __reduce__s zSharedMemory.__reduce__cCs|jjd|jd|jdS)N(z, size=))r;__name__r r5r9rrr__repr__szSharedMemory.__repr__cCs|jS)z4A memoryview of contents of the shared memory block.)r2r9rrrbufszSharedMemory.bufcCs.|j}tr*|jr*|jdr*|jdd}|S)z4Unique name that identifies the shared memory block.rrN)r#rr$ startswith)r3Z reported_namerrrr s   zSharedMemory.namecCs|jS)zSize in bytes.)r0r9rrrr5szSharedMemory.sizecCsX|jdk r|jd|_|jdk r4|jd|_trT|jdkrTt|jd|_dS)zkCloses access to the shared memory from this instance but does not destroy the shared memory block.Nrr)r2releaser)r8rr!rr9rrrr8s     zSharedMemory.closecCs2tr.|jr.ddlm}t|j||jddS)zRequests that the underlying shared memory block be destroyed. In order to ensure proper cleanup of resources, unlink should be called once (and only once) across all processes which have access to the shared memory block.r) unregisterrN)rr#r,rDrZ shm_unlink)r3rDrrrr+s   zSharedMemory.unlink)NFr)r? __module__ __qualname____doc__r#r!r)r2rrrr rr$r6r:r<r@propertyrAr r5r8r+rrrrr0s(  l     utf8c @seZdZdZedededededdj diZ dZ d d d d d d d d dZ e ddZd6ddddZddZddZddZddZddZddZd d!Zd"d#Zed$d%Zed&d'Zed(d)Zed*d+Zed,d-Zed.d/Zed0d1Zd2d3Z d4d5Z!dS)7raPattern for a mutable list-like object shareable via a shared memory block. It differs from the built-in list type in that these lists can not change their overall length (i.e. no append, insert, etc.) Because values are packed into a memoryview as bytes, the struct packing format for any storable value must require no more than 8 characters to describe its format.qdzxxxxxxx?z%dsNzxxxxxx?xcCs|Sr7rvaluerrr zShareableList.cCs|dtSN)rstripdecode _encodingrMrrrrO rPcCs |dSrQ)rSrMrrrrO rPcCsdSr7r)Z_valuerrrrO rP)rrrcCs:t|ttdjfsdSt|tr$dSt|tr2dSdSdS)zUsed in concert with _back_transforms_mapping to convert values into the appropriate Python objects when retrieving them from the list as well as when storing them.NrrrrV) isinstancestrbytesr;rMrrr_extract_recreation_codes  z&ShareableList._extract_recreation_coder csr|dk rvfdd|D}t|_tfdd|D_fdd|D}tdjd|jj }nd}|dk r|dkrt |_ nt |d |d _ |dk rNt tj djj jd jfjtj d|j jjffd d|Dtj jj jjffd d|Dtj j j jjf|n t_tjj jd_dS)NcsPg|]H}t|ttfs$jt|n&jt|jt|jdfqS)r)rWrXrY_types_mappingtype _alignmentr .0itemr9rr s   z*ShareableList.__init__..c3s0|](}|ddkrjnt|ddVqdS)rsN)r^int)r`fmtr9rr *sz)ShareableList.__init__..csg|]}|qSr)rZr_r9rrrb.srJrLT)r4r5rc3s&|]}t|tr|n|VqdSr7)rWrXencoder`v_encrrrfMsc3s|]}|VqdSr7)rhrirkrrrfSs)r _list_lentuple_allocated_bytesstructZcalcsize_format_size_metainfojoin_format_packing_metainfo_format_back_transform_codesrshmrU pack_intorA_offset_data_start_offset_packing_formats_offset_back_transform_codes unpack_from)r3Zsequencer Z_formatsZ_recreation_codesZrequested_sizer)rlr3rr6sz        zShareableList.__init__cCsj|dkr |n||j}||jks*|jdkr2tdtd|jj|j|dd}|d}|t }|S)z>Gets the packing format for a single value stored in the list.r Requested position out of range.8srLrR) rm IndexErrorrprzrurArxrSrTrU)r3positionrjre fmt_as_strrrr_get_packing_formatds   z!ShareableList._get_packing_formatcCs\|dkr |n||j}||jks*|jdkr2tdtd|jj|j|d}|j|}|S)z9Gets the back transformation function for a single value.rr{b)rmr}rprzrurAry_back_transforms_mapping)r3r~transform_codeZtransform_functionrrr_get_back_transformts z!ShareableList._get_back_transformcCs~|dkr |n||j}||jks*|jdkr2tdtd|jj|j|d|t| |}td|jj|j ||dS)zvSets the packing format and back transformation code for a single value in the list at the specified position.rr{r|rLrN) rmr}rprvrurArxrhrUrZry)r3r~rrNrrrr!_set_packing_format_and_transforms   z/ShareableList._set_packing_format_and_transformcCsjz6|jt|jd|}t|||jj|\}Wntk rRtdYnX| |}||}|S)Nzindex out of range) rwsumrorprzrrurAr}r)r3r~offsetrjZback_transformrrr __getitem__s  zShareableList.__getitem__cCsz&|jt|jd|}||}Wntk rBtdYnXt|ttfsf|jt |}|}nZt|trz| t n|}t ||j|krt d|ddkr|}n|jt|j|f}||||t||jj||dS)Nzassignment index out of rangez(bytes/str item exceeds available storagerrc)rwrrorr}rWrXrYr\r]rhrUr rrrprvrurA)r3r~rNrZcurrent_formatZ new_formatZ encoded_valuerrr __setitem__s6  zShareableList.__setitem__cCst|j|jjddfS)Nr[r)rr;rur r9rrrr<szShareableList.__reduce__cCstd|jjddS)NrJr)rprzrurAr9rrr__len__szShareableList.__len__cCs"|jjdt|d|jjdS)Nr=z, name=r>)r;r?listrur r9rrrr@szShareableList.__repr__csdfddtjDS)z>The struct packing format used by all currently stored values.rgc3s|]}|VqdSr7)r)r`ir9rrrfsz'ShareableList.format..)rrrangermr9rr9rformatszShareableList.formatcCs |jdS)z=The struct packing format used for metainfo on storage sizes.rJrmr9rrrrqsz#ShareableList._format_size_metainfocCs d|jS)z?The struct packing format used for the values' packing formats.r|rr9rrrrssz&ShareableList._format_packing_metainfocCs d|jS)z?The struct packing format used for the values' back transforms.rrr9rrrrtsz*ShareableList._format_back_transform_codescCs|jddS)NrrLrr9rrrrwsz ShareableList._offset_data_startcCs|jt|jSr7)rwrror9rrrrxsz%ShareableList._offset_packing_formatscCs|j|jdS)NrL)rxrmr9rrrrysz*ShareableList._offset_back_transform_codescstfdd|DS)zCL.count(value) -> integer -- return number of occurrences of value.c3s|]}|kVqdSr7r)r`entryrMrrrfsz&ShareableList.count..)r)r3rNrrMrcountszShareableList.countcCs4t|D]\}}||kr|Sqt|ddS)zpL.index(value) -> integer -- return first index of value. Raises ValueError if the value is not present.z not in this containerN) enumerater)r3rNr~rrrrindexs zShareableList.index)N)"r?rErFrGrdfloatboolrXrYr;r\r^r staticmethodrZr6rrrrrr<rr@rHrrqrsrtrwrxryrrrrrrrs^  F       )rG__all__ functoolsrr(rr.rpr r r-rrO_CREATrrrr rrrUrrrrrs,    Eresource_tracker.py000064400000020645147577350250010506 0ustar00############################################################################### # Server process to keep track of unlinked resources (like shared memory # segments, semaphores etc.) and clean them. # # On Unix we run a server process which keeps track of unlinked # resources. The server ignores SIGINT and SIGTERM and reads from a # pipe. Every other process of the program has a copy of the writable # end of the pipe, so we get EOF when all other processes have exited. # Then the server process unlinks any remaining resource names. # # This is important because there may be system limits for such resources: for # instance, the system only supports a limited number of named semaphores, and # shared-memory segments live in the RAM. If a python process leaks such a # resource, this resource will not be removed till the next reboot. Without # this resource tracker process, "killall python" would probably leave unlinked # resources. import os import signal import sys import threading import warnings from . import spawn from . import util __all__ = ['ensure_running', 'register', 'unregister'] _HAVE_SIGMASK = hasattr(signal, 'pthread_sigmask') _IGNORED_SIGNALS = (signal.SIGINT, signal.SIGTERM) _CLEANUP_FUNCS = { 'noop': lambda: None, } if os.name == 'posix': import _multiprocessing import _posixshmem _CLEANUP_FUNCS.update({ 'semaphore': _multiprocessing.sem_unlink, 'shared_memory': _posixshmem.shm_unlink, }) class ResourceTracker(object): def __init__(self): self._lock = threading.Lock() self._fd = None self._pid = None def _stop(self): with self._lock: if self._fd is None: # not running return # closing the "alive" file descriptor stops main() os.close(self._fd) self._fd = None os.waitpid(self._pid, 0) self._pid = None def getfd(self): self.ensure_running() return self._fd def ensure_running(self): '''Make sure that resource tracker process is running. This can be run from any process. Usually a child process will use the resource created by its parent.''' with self._lock: if self._fd is not None: # resource tracker was launched before, is it still running? if self._check_alive(): # => still alive return # => dead, launch it again os.close(self._fd) # Clean-up to avoid dangling processes. try: # _pid can be None if this process is a child from another # python process, which has started the resource_tracker. if self._pid is not None: os.waitpid(self._pid, 0) except ChildProcessError: # The resource_tracker has already been terminated. pass self._fd = None self._pid = None warnings.warn('resource_tracker: process died unexpectedly, ' 'relaunching. Some resources might leak.') fds_to_pass = [] try: fds_to_pass.append(sys.stderr.fileno()) except Exception: pass cmd = 'from multiprocessing.resource_tracker import main;main(%d)' r, w = os.pipe() try: fds_to_pass.append(r) # process will out live us, so no need to wait on pid exe = spawn.get_executable() args = [exe] + util._args_from_interpreter_flags() args += ['-c', cmd % r] # bpo-33613: Register a signal mask that will block the signals. # This signal mask will be inherited by the child that is going # to be spawned and will protect the child from a race condition # that can make the child die before it registers signal handlers # for SIGINT and SIGTERM. The mask is unregistered after spawning # the child. try: if _HAVE_SIGMASK: signal.pthread_sigmask(signal.SIG_BLOCK, _IGNORED_SIGNALS) pid = util.spawnv_passfds(exe, args, fds_to_pass) finally: if _HAVE_SIGMASK: signal.pthread_sigmask(signal.SIG_UNBLOCK, _IGNORED_SIGNALS) except: os.close(w) raise else: self._fd = w self._pid = pid finally: os.close(r) def _check_alive(self): '''Check that the pipe has not been closed by sending a probe.''' try: # We cannot use send here as it calls ensure_running, creating # a cycle. os.write(self._fd, b'PROBE:0:noop\n') except OSError: return False else: return True def register(self, name, rtype): '''Register name of resource with resource tracker.''' self._send('REGISTER', name, rtype) def unregister(self, name, rtype): '''Unregister name of resource with resource tracker.''' self._send('UNREGISTER', name, rtype) def _send(self, cmd, name, rtype): self.ensure_running() msg = '{0}:{1}:{2}\n'.format(cmd, name, rtype).encode('ascii') if len(name) > 512: # posix guarantees that writes to a pipe of less than PIPE_BUF # bytes are atomic, and that PIPE_BUF >= 512 raise ValueError('name too long') nbytes = os.write(self._fd, msg) assert nbytes == len(msg), "nbytes {0:n} but len(msg) {1:n}".format( nbytes, len(msg)) _resource_tracker = ResourceTracker() ensure_running = _resource_tracker.ensure_running register = _resource_tracker.register unregister = _resource_tracker.unregister getfd = _resource_tracker.getfd def main(fd): '''Run resource tracker.''' # protect the process from ^C and "killall python" etc signal.signal(signal.SIGINT, signal.SIG_IGN) signal.signal(signal.SIGTERM, signal.SIG_IGN) if _HAVE_SIGMASK: signal.pthread_sigmask(signal.SIG_UNBLOCK, _IGNORED_SIGNALS) for f in (sys.stdin, sys.stdout): try: f.close() except Exception: pass cache = {rtype: set() for rtype in _CLEANUP_FUNCS.keys()} try: # keep track of registered/unregistered resources with open(fd, 'rb') as f: for line in f: try: cmd, name, rtype = line.strip().decode('ascii').split(':') cleanup_func = _CLEANUP_FUNCS.get(rtype, None) if cleanup_func is None: raise ValueError( f'Cannot register {name} for automatic cleanup: ' f'unknown resource type {rtype}') if cmd == 'REGISTER': cache[rtype].add(name) elif cmd == 'UNREGISTER': cache[rtype].remove(name) elif cmd == 'PROBE': pass else: raise RuntimeError('unrecognized command %r' % cmd) except Exception: try: sys.excepthook(*sys.exc_info()) except: pass finally: # all processes have terminated; cleanup any remaining resources for rtype, rtype_cache in cache.items(): if rtype_cache: try: warnings.warn('resource_tracker: There appear to be %d ' 'leaked %s objects to clean up at shutdown' % (len(rtype_cache), rtype)) except Exception: pass for name in rtype_cache: # For some reason the process which created and registered this # resource has failed to unregister it. Presumably it has # died. We therefore unlink it. try: try: _CLEANUP_FUNCS[rtype](name) except Exception as e: warnings.warn('resource_tracker: %r: %s' % (name, e)) finally: pass shared_memory.py000064400000042016147577350250007776 0ustar00"""Provides shared memory for direct access across processes. The API of this package is currently provisional. Refer to the documentation for details. """ __all__ = [ 'SharedMemory', 'ShareableList' ] from functools import partial import mmap import os import errno import struct import secrets if os.name == "nt": import _winapi _USE_POSIX = False else: import _posixshmem _USE_POSIX = True _O_CREX = os.O_CREAT | os.O_EXCL # FreeBSD (and perhaps other BSDs) limit names to 14 characters. _SHM_SAFE_NAME_LENGTH = 14 # Shared memory block name prefix if _USE_POSIX: _SHM_NAME_PREFIX = '/psm_' else: _SHM_NAME_PREFIX = 'wnsm_' def _make_filename(): "Create a random filename for the shared memory object." # number of random bytes to use for name nbytes = (_SHM_SAFE_NAME_LENGTH - len(_SHM_NAME_PREFIX)) // 2 assert nbytes >= 2, '_SHM_NAME_PREFIX too long' name = _SHM_NAME_PREFIX + secrets.token_hex(nbytes) assert len(name) <= _SHM_SAFE_NAME_LENGTH return name class SharedMemory: """Creates a new shared memory block or attaches to an existing shared memory block. Every shared memory block is assigned a unique name. This enables one process to create a shared memory block with a particular name so that a different process can attach to that same shared memory block using that same name. As a resource for sharing data across processes, shared memory blocks may outlive the original process that created them. When one process no longer needs access to a shared memory block that might still be needed by other processes, the close() method should be called. When a shared memory block is no longer needed by any process, the unlink() method should be called to ensure proper cleanup.""" # Defaults; enables close() and unlink() to run without errors. _name = None _fd = -1 _mmap = None _buf = None _flags = os.O_RDWR _mode = 0o600 _prepend_leading_slash = True if _USE_POSIX else False def __init__(self, name=None, create=False, size=0): if not size >= 0: raise ValueError("'size' must be a positive integer") if create: self._flags = _O_CREX | os.O_RDWR if size == 0: raise ValueError("'size' must be a positive number different from zero") if name is None and not self._flags & os.O_EXCL: raise ValueError("'name' can only be None if create=True") if _USE_POSIX: # POSIX Shared Memory if name is None: while True: name = _make_filename() try: self._fd = _posixshmem.shm_open( name, self._flags, mode=self._mode ) except FileExistsError: continue self._name = name break else: name = "/" + name if self._prepend_leading_slash else name self._fd = _posixshmem.shm_open( name, self._flags, mode=self._mode ) self._name = name try: if create and size: os.ftruncate(self._fd, size) stats = os.fstat(self._fd) size = stats.st_size self._mmap = mmap.mmap(self._fd, size) except OSError: self.unlink() raise from .resource_tracker import register register(self._name, "shared_memory") else: # Windows Named Shared Memory if create: while True: temp_name = _make_filename() if name is None else name # Create and reserve shared memory block with this name # until it can be attached to by mmap. h_map = _winapi.CreateFileMapping( _winapi.INVALID_HANDLE_VALUE, _winapi.NULL, _winapi.PAGE_READWRITE, (size >> 32) & 0xFFFFFFFF, size & 0xFFFFFFFF, temp_name ) try: last_error_code = _winapi.GetLastError() if last_error_code == _winapi.ERROR_ALREADY_EXISTS: if name is not None: raise FileExistsError( errno.EEXIST, os.strerror(errno.EEXIST), name, _winapi.ERROR_ALREADY_EXISTS ) else: continue self._mmap = mmap.mmap(-1, size, tagname=temp_name) finally: _winapi.CloseHandle(h_map) self._name = temp_name break else: self._name = name # Dynamically determine the existing named shared memory # block's size which is likely a multiple of mmap.PAGESIZE. h_map = _winapi.OpenFileMapping( _winapi.FILE_MAP_READ, False, name ) try: p_buf = _winapi.MapViewOfFile( h_map, _winapi.FILE_MAP_READ, 0, 0, 0 ) finally: _winapi.CloseHandle(h_map) size = _winapi.VirtualQuerySize(p_buf) self._mmap = mmap.mmap(-1, size, tagname=name) self._size = size self._buf = memoryview(self._mmap) def __del__(self): try: self.close() except OSError: pass def __reduce__(self): return ( self.__class__, ( self.name, False, self.size, ), ) def __repr__(self): return f'{self.__class__.__name__}({self.name!r}, size={self.size})' @property def buf(self): "A memoryview of contents of the shared memory block." return self._buf @property def name(self): "Unique name that identifies the shared memory block." reported_name = self._name if _USE_POSIX and self._prepend_leading_slash: if self._name.startswith("/"): reported_name = self._name[1:] return reported_name @property def size(self): "Size in bytes." return self._size def close(self): """Closes access to the shared memory from this instance but does not destroy the shared memory block.""" if self._buf is not None: self._buf.release() self._buf = None if self._mmap is not None: self._mmap.close() self._mmap = None if _USE_POSIX and self._fd >= 0: os.close(self._fd) self._fd = -1 def unlink(self): """Requests that the underlying shared memory block be destroyed. In order to ensure proper cleanup of resources, unlink should be called once (and only once) across all processes which have access to the shared memory block.""" if _USE_POSIX and self._name: from .resource_tracker import unregister _posixshmem.shm_unlink(self._name) unregister(self._name, "shared_memory") _encoding = "utf8" class ShareableList: """Pattern for a mutable list-like object shareable via a shared memory block. It differs from the built-in list type in that these lists can not change their overall length (i.e. no append, insert, etc.) Because values are packed into a memoryview as bytes, the struct packing format for any storable value must require no more than 8 characters to describe its format.""" _types_mapping = { int: "q", float: "d", bool: "xxxxxxx?", str: "%ds", bytes: "%ds", None.__class__: "xxxxxx?x", } _alignment = 8 _back_transforms_mapping = { 0: lambda value: value, # int, float, bool 1: lambda value: value.rstrip(b'\x00').decode(_encoding), # str 2: lambda value: value.rstrip(b'\x00'), # bytes 3: lambda _value: None, # None } @staticmethod def _extract_recreation_code(value): """Used in concert with _back_transforms_mapping to convert values into the appropriate Python objects when retrieving them from the list as well as when storing them.""" if not isinstance(value, (str, bytes, None.__class__)): return 0 elif isinstance(value, str): return 1 elif isinstance(value, bytes): return 2 else: return 3 # NoneType def __init__(self, sequence=None, *, name=None): if sequence is not None: _formats = [ self._types_mapping[type(item)] if not isinstance(item, (str, bytes)) else self._types_mapping[type(item)] % ( self._alignment * (len(item) // self._alignment + 1), ) for item in sequence ] self._list_len = len(_formats) assert sum(len(fmt) <= 8 for fmt in _formats) == self._list_len self._allocated_bytes = tuple( self._alignment if fmt[-1] != "s" else int(fmt[:-1]) for fmt in _formats ) _recreation_codes = [ self._extract_recreation_code(item) for item in sequence ] requested_size = struct.calcsize( "q" + self._format_size_metainfo + "".join(_formats) + self._format_packing_metainfo + self._format_back_transform_codes ) else: requested_size = 8 # Some platforms require > 0. if name is not None and sequence is None: self.shm = SharedMemory(name) else: self.shm = SharedMemory(name, create=True, size=requested_size) if sequence is not None: _enc = _encoding struct.pack_into( "q" + self._format_size_metainfo, self.shm.buf, 0, self._list_len, *(self._allocated_bytes) ) struct.pack_into( "".join(_formats), self.shm.buf, self._offset_data_start, *(v.encode(_enc) if isinstance(v, str) else v for v in sequence) ) struct.pack_into( self._format_packing_metainfo, self.shm.buf, self._offset_packing_formats, *(v.encode(_enc) for v in _formats) ) struct.pack_into( self._format_back_transform_codes, self.shm.buf, self._offset_back_transform_codes, *(_recreation_codes) ) else: self._list_len = len(self) # Obtains size from offset 0 in buffer. self._allocated_bytes = struct.unpack_from( self._format_size_metainfo, self.shm.buf, 1 * 8 ) def _get_packing_format(self, position): "Gets the packing format for a single value stored in the list." position = position if position >= 0 else position + self._list_len if (position >= self._list_len) or (self._list_len < 0): raise IndexError("Requested position out of range.") v = struct.unpack_from( "8s", self.shm.buf, self._offset_packing_formats + position * 8 )[0] fmt = v.rstrip(b'\x00') fmt_as_str = fmt.decode(_encoding) return fmt_as_str def _get_back_transform(self, position): "Gets the back transformation function for a single value." position = position if position >= 0 else position + self._list_len if (position >= self._list_len) or (self._list_len < 0): raise IndexError("Requested position out of range.") transform_code = struct.unpack_from( "b", self.shm.buf, self._offset_back_transform_codes + position )[0] transform_function = self._back_transforms_mapping[transform_code] return transform_function def _set_packing_format_and_transform(self, position, fmt_as_str, value): """Sets the packing format and back transformation code for a single value in the list at the specified position.""" position = position if position >= 0 else position + self._list_len if (position >= self._list_len) or (self._list_len < 0): raise IndexError("Requested position out of range.") struct.pack_into( "8s", self.shm.buf, self._offset_packing_formats + position * 8, fmt_as_str.encode(_encoding) ) transform_code = self._extract_recreation_code(value) struct.pack_into( "b", self.shm.buf, self._offset_back_transform_codes + position, transform_code ) def __getitem__(self, position): try: offset = self._offset_data_start \ + sum(self._allocated_bytes[:position]) (v,) = struct.unpack_from( self._get_packing_format(position), self.shm.buf, offset ) except IndexError: raise IndexError("index out of range") back_transform = self._get_back_transform(position) v = back_transform(v) return v def __setitem__(self, position, value): try: offset = self._offset_data_start \ + sum(self._allocated_bytes[:position]) current_format = self._get_packing_format(position) except IndexError: raise IndexError("assignment index out of range") if not isinstance(value, (str, bytes)): new_format = self._types_mapping[type(value)] encoded_value = value else: encoded_value = (value.encode(_encoding) if isinstance(value, str) else value) if len(encoded_value) > self._allocated_bytes[position]: raise ValueError("bytes/str item exceeds available storage") if current_format[-1] == "s": new_format = current_format else: new_format = self._types_mapping[str] % ( self._allocated_bytes[position], ) self._set_packing_format_and_transform( position, new_format, value ) struct.pack_into(new_format, self.shm.buf, offset, encoded_value) def __reduce__(self): return partial(self.__class__, name=self.shm.name), () def __len__(self): return struct.unpack_from("q", self.shm.buf, 0)[0] def __repr__(self): return f'{self.__class__.__name__}({list(self)}, name={self.shm.name!r})' @property def format(self): "The struct packing format used by all currently stored values." return "".join( self._get_packing_format(i) for i in range(self._list_len) ) @property def _format_size_metainfo(self): "The struct packing format used for metainfo on storage sizes." return f"{self._list_len}q" @property def _format_packing_metainfo(self): "The struct packing format used for the values' packing formats." return "8s" * self._list_len @property def _format_back_transform_codes(self): "The struct packing format used for the values' back transforms." return "b" * self._list_len @property def _offset_data_start(self): return (self._list_len + 1) * 8 # 8 bytes per "q" @property def _offset_packing_formats(self): return self._offset_data_start + sum(self._allocated_bytes) @property def _offset_back_transform_codes(self): return self._offset_packing_formats + self._list_len * 8 def count(self, value): "L.count(value) -> integer -- return number of occurrences of value." return sum(value == entry for entry in self) def index(self, value): """L.index(value) -> integer -- return first index of value. Raises ValueError if the value is not present.""" for position, entry in enumerate(self): if value == entry: return position else: raise ValueError(f"{value!r} not in this container") dummy/__pycache__/connection.cpython-38.pyc000064400000005003147577350250014713 0ustar00U ,a>@sRdddgZddlmZdgZGdddeZddZd d dZGd d d eZdS) ClientListenerPipe)QueueNc@sBeZdZdddZddZddZed d Zd d Zd dZ dS)rNcCst||_dSN)r_backlog_queue)selfaddressZfamilyZbacklogr E/opt/alt/python38/lib64/python3.8/multiprocessing/dummy/connection.py__init__szListener.__init__cCst|jSr) Connectionrgetr r r r acceptszListener.acceptcCs d|_dSrrrr r r closeszListener.closecCs|jSrrrr r r r szListener.addresscCs|Srr rr r r __enter__!szListener.__enter__cCs |dSrrr exc_type exc_valueZexc_tbr r r __exit__$szListener.__exit__)NNr) __name__ __module__ __qualname__r rrpropertyr rrr r r r rs  cCs&tt}}|||ft||Sr)rputr)r _in_outr r r r(sTcCs"tt}}t||t||fSr)rr)Zduplexabr r r r.sc@s6eZdZddZd ddZddZdd Zd d Zd S)rcCs,||_||_|j|_|_|j|_|_dSr)r rrsendZ send_bytesrZrecvZ recv_bytes)r rr r r r r 5szConnection.__init__c CsN|jdkrdS|dkrdS|jj|jj|W5QRX|jdkS)NrTr$F)rZqsizeZ not_emptywait)r Ztimeoutr r r poll;s zConnection.pollcCsdSrr rr r r rDszConnection.closecCs|Srr rr r r rGszConnection.__enter__cCs |dSrrrr r r rJszConnection.__exit__N)r$)rrrr r&rrrr r r r r3s  r)T) __all__ZqueuerZfamiliesobjectrrrrr r r r  s   dummy/__pycache__/__init__.cpython-38.opt-2.pyc000064400000007516147577350250015266 0ustar00U ,a @sdddddddddd d d d d ddgZddlZddlZddlZddlZddlmZddlmZmZm Z m Z ddlm Z m Z m Z ddlmZGdddejZeZejZee_ddZddZGdddeZeZeZd'ddZGd d!d!eZd"d Zd#d$Z d(d&dZ!eZ"dS))Processcurrent_processactive_childrenfreeze_supportLockRLock SemaphoreBoundedSemaphore ConditionEventBarrierQueueManagerPipePool JoinableQueueN)r)rrrr)r r r )r c@s4eZdZddddifddZddZeddZdS) DummyProcessNcCs8tj||||||d|_t|_d|_t|_ dS)NF) threadingThread__init__Z_pidweakrefWeakKeyDictionary _children _start_calledr_parent)selfgrouptargetnameargskwargsrrC/opt/alt/python38/lib64/python3.8/multiprocessing/dummy/__init__.pyr$s  zDummyProcess.__init__cCsN|jtk r td|jtd|_t|jdr>d|jj|<tj |dS)Nz,Parent is {0!r} but current_process is {1!r}Tr) rr RuntimeErrorformatrhasattrrrrstartrrrr#r'+s   zDummyProcess.startcCs|jr|sdSdSdS)Nr)ris_aliver(rrr#exitcode5szDummyProcess.exitcode)__name__ __module__ __qualname__rr'propertyr*rrrr#r"s rcCs2tj}t|D]}|s||dqt|SN)rrlistr)pop)Zchildrenprrr#rDs  cCsdSr/rrrrr#rKsc@seZdZddZddZdS) NamespacecKs|j|dSr/)__dict__update)rkwdsrrr#rSszNamespace.__init__cCsZt|j}g}|D]$\}}|ds|d||fq|d|jjd|fS)N_z%s=%rz%s(%s)z, ) r0r4items startswithappendsort __class__r+join)rr8Ztempr valuerrr#__repr__Us  zNamespace.__repr__N)r+r,r-rr?rrrr#r3Rsr3TcCs t||Sr/)array)typecodeZsequencelockrrr#ArrayasrCc@s8eZdZd ddZeddZejddZddZd S) ValueTcCs||_||_dSr/) _typecode_value)rrAr>rBrrr#reszValue.__init__cCs|jSr/rFr(rrr#r>isz Value.valuecCs ||_dSr/rG)rr>rrr#r>mscCsdt|j|j|jfS)Nz <%s(%r, %r)>)typer+rErFr(rrr#r?qszValue.__repr__N)T)r+r,r-rr.r>setterr?rrrr#rDds    rDcCs tjtSr/)sysmodulesr+rrrr#r tscCsdSr/rrrrr#shutdownwsrLrcCsddlm}||||S)N) ThreadPool)ZpoolrN)Z processesZ initializerZinitargsrNrrr#rzs )T)NNr)#__all__rrJrr@Z connectionrrrrrr r r Zqueuer rrrZcurrent_threadrrrrrobjectr3dictr0rCrDr rLrrrrrr# sN       dummy/__pycache__/connection.cpython-38.opt-2.pyc000064400000005003147577350250015653 0ustar00U ,a>@sRdddgZddlmZdgZGdddeZddZd d dZGd d d eZdS) ClientListenerPipe)QueueNc@sBeZdZdddZddZddZed d Zd d Zd dZ dS)rNcCst||_dSN)r_backlog_queue)selfaddressZfamilyZbacklogr E/opt/alt/python38/lib64/python3.8/multiprocessing/dummy/connection.py__init__szListener.__init__cCst|jSr) Connectionrgetr r r r acceptszListener.acceptcCs d|_dSrrrr r r closeszListener.closecCs|jSrrrr r r r szListener.addresscCs|Srr rr r r __enter__!szListener.__enter__cCs |dSrrr exc_type exc_valueZexc_tbr r r __exit__$szListener.__exit__)NNr) __name__ __module__ __qualname__r rrpropertyr rrr r r r rs  cCs&tt}}|||ft||Sr)rputr)r _in_outr r r r(sTcCs"tt}}t||t||fSr)rr)Zduplexabr r r r.sc@s6eZdZddZd ddZddZdd Zd d Zd S)rcCs,||_||_|j|_|_|j|_|_dSr)r rrsendZ send_bytesrZrecvZ recv_bytes)r rr r r r r 5szConnection.__init__c CsN|jdkrdS|dkrdS|jj|jj|W5QRX|jdkS)NrTr$F)rZqsizeZ not_emptywait)r Ztimeoutr r r poll;s zConnection.pollcCsdSrr rr r r rDszConnection.closecCs|Srr rr r r rGszConnection.__enter__cCs |dSrrrr r r rJszConnection.__exit__N)r$)rrrr r&rrrr r r r r3s  r)T) __all__ZqueuerZfamiliesobjectrrrrr r r r  s   dummy/__pycache__/connection.cpython-38.opt-1.pyc000064400000005003147577350250015652 0ustar00U ,a>@sRdddgZddlmZdgZGdddeZddZd d dZGd d d eZdS) ClientListenerPipe)QueueNc@sBeZdZdddZddZddZed d Zd d Zd dZ dS)rNcCst||_dSN)r_backlog_queue)selfaddressZfamilyZbacklogr E/opt/alt/python38/lib64/python3.8/multiprocessing/dummy/connection.py__init__szListener.__init__cCst|jSr) Connectionrgetr r r r acceptszListener.acceptcCs d|_dSrrrr r r closeszListener.closecCs|jSrrrr r r r szListener.addresscCs|Srr rr r r __enter__!szListener.__enter__cCs |dSrrr exc_type exc_valueZexc_tbr r r __exit__$szListener.__exit__)NNr) __name__ __module__ __qualname__r rrpropertyr rrr r r r rs  cCs&tt}}|||ft||Sr)rputr)r _in_outr r r r(sTcCs"tt}}t||t||fSr)rr)Zduplexabr r r r.sc@s6eZdZddZd ddZddZdd Zd d Zd S)rcCs,||_||_|j|_|_|j|_|_dSr)r rrsendZ send_bytesrZrecvZ recv_bytes)r rr r r r r 5szConnection.__init__c CsN|jdkrdS|dkrdS|jj|jj|W5QRX|jdkS)NrTr$F)rZqsizeZ not_emptywait)r Ztimeoutr r r poll;s zConnection.pollcCsdSrr rr r r rDszConnection.closecCs|Srr rr r r rGszConnection.__enter__cCs |dSrrrr r r rJszConnection.__exit__N)r$)rrrr r&rrrr r r r r3s  r)T) __all__ZqueuerZfamiliesobjectrrrrr r r r  s   dummy/__pycache__/__init__.cpython-38.opt-1.pyc000064400000007516147577350250015265 0ustar00U ,a @sdddddddddd d d d d ddgZddlZddlZddlZddlZddlmZddlmZmZm Z m Z ddlm Z m Z m Z ddlmZGdddejZeZejZee_ddZddZGdddeZeZeZd'ddZGd d!d!eZd"d Zd#d$Z d(d&dZ!eZ"dS))Processcurrent_processactive_childrenfreeze_supportLockRLock SemaphoreBoundedSemaphore ConditionEventBarrierQueueManagerPipePool JoinableQueueN)r)rrrr)r r r )r c@s4eZdZddddifddZddZeddZdS) DummyProcessNcCs8tj||||||d|_t|_d|_t|_ dS)NF) threadingThread__init__Z_pidweakrefWeakKeyDictionary _children _start_calledr_parent)selfgrouptargetnameargskwargsrrC/opt/alt/python38/lib64/python3.8/multiprocessing/dummy/__init__.pyr$s  zDummyProcess.__init__cCsN|jtk r td|jtd|_t|jdr>d|jj|<tj |dS)Nz,Parent is {0!r} but current_process is {1!r}Tr) rr RuntimeErrorformatrhasattrrrrstartrrrr#r'+s   zDummyProcess.startcCs|jr|sdSdSdS)Nr)ris_aliver(rrr#exitcode5szDummyProcess.exitcode)__name__ __module__ __qualname__rr'propertyr*rrrr#r"s rcCs2tj}t|D]}|s||dqt|SN)rrlistr)pop)Zchildrenprrr#rDs  cCsdSr/rrrrr#rKsc@seZdZddZddZdS) NamespacecKs|j|dSr/)__dict__update)rkwdsrrr#rSszNamespace.__init__cCsZt|j}g}|D]$\}}|ds|d||fq|d|jjd|fS)N_z%s=%rz%s(%s)z, ) r0r4items startswithappendsort __class__r+join)rr8Ztempr valuerrr#__repr__Us  zNamespace.__repr__N)r+r,r-rr?rrrr#r3Rsr3TcCs t||Sr/)array)typecodeZsequencelockrrr#ArrayasrCc@s8eZdZd ddZeddZejddZddZd S) ValueTcCs||_||_dSr/) _typecode_value)rrAr>rBrrr#reszValue.__init__cCs|jSr/rFr(rrr#r>isz Value.valuecCs ||_dSr/rG)rr>rrr#r>mscCsdt|j|j|jfS)Nz <%s(%r, %r)>)typer+rErFr(rrr#r?qszValue.__repr__N)T)r+r,r-rr.r>setterr?rrrr#rDds    rDcCs tjtSr/)sysmodulesr+rrrr#r tscCsdSr/rrrrr#shutdownwsrLrcCsddlm}||||S)N) ThreadPool)ZpoolrN)Z processesZ initializerZinitargsrNrrr#rzs )T)NNr)#__all__rrJrr@Z connectionrrrrrr r r Zqueuer rrrZcurrent_threadrrrrrobjectr3dictr0rCrDr rLrrrrrr# sN       dummy/__pycache__/__init__.cpython-38.pyc000064400000007516147577350250014326 0ustar00U ,a @sdddddddddd d d d d ddgZddlZddlZddlZddlZddlmZddlmZmZm Z m Z ddlm Z m Z m Z ddlmZGdddejZeZejZee_ddZddZGdddeZeZeZd'ddZGd d!d!eZd"d Zd#d$Z d(d&dZ!eZ"dS))Processcurrent_processactive_childrenfreeze_supportLockRLock SemaphoreBoundedSemaphore ConditionEventBarrierQueueManagerPipePool JoinableQueueN)r)rrrr)r r r )r c@s4eZdZddddifddZddZeddZdS) DummyProcessNcCs8tj||||||d|_t|_d|_t|_ dS)NF) threadingThread__init__Z_pidweakrefWeakKeyDictionary _children _start_calledr_parent)selfgrouptargetnameargskwargsrrC/opt/alt/python38/lib64/python3.8/multiprocessing/dummy/__init__.pyr$s  zDummyProcess.__init__cCsN|jtk r td|jtd|_t|jdr>d|jj|<tj |dS)Nz,Parent is {0!r} but current_process is {1!r}Tr) rr RuntimeErrorformatrhasattrrrrstartrrrr#r'+s   zDummyProcess.startcCs|jr|sdSdSdS)Nr)ris_aliver(rrr#exitcode5szDummyProcess.exitcode)__name__ __module__ __qualname__rr'propertyr*rrrr#r"s rcCs2tj}t|D]}|s||dqt|SN)rrlistr)pop)Zchildrenprrr#rDs  cCsdSr/rrrrr#rKsc@seZdZddZddZdS) NamespacecKs|j|dSr/)__dict__update)rkwdsrrr#rSszNamespace.__init__cCsZt|j}g}|D]$\}}|ds|d||fq|d|jjd|fS)N_z%s=%rz%s(%s)z, ) r0r4items startswithappendsort __class__r+join)rr8Ztempr valuerrr#__repr__Us  zNamespace.__repr__N)r+r,r-rr?rrrr#r3Rsr3TcCs t||Sr/)array)typecodeZsequencelockrrr#ArrayasrCc@s8eZdZd ddZeddZejddZddZd S) ValueTcCs||_||_dSr/) _typecode_value)rrAr>rBrrr#reszValue.__init__cCs|jSr/rFr(rrr#r>isz Value.valuecCs ||_dSr/rG)rr>rrr#r>mscCsdt|j|j|jfS)Nz <%s(%r, %r)>)typer+rErFr(rrr#r?qszValue.__repr__N)T)r+r,r-rr.r>setterr?rrrr#rDds    rDcCs tjtSr/)sysmodulesr+rrrr#r tscCsdSr/rrrrr#shutdownwsrLrcCsddlm}||||S)N) ThreadPool)ZpoolrN)Z processesZ initializerZinitargsrNrrr#rzs )T)NNr)#__all__rrJrr@Z connectionrrrrrr r r Zqueuer rrrZcurrent_threadrrrrrobjectr3dictr0rCrDr rLrrrrrr# sN