a :êdg¥!ã@sÒddlZddlZddlZddlZddlZddlmZddlmZgd¢Ze edƒZ ej ej fZ ddd „iZejd kr˜ddlZddlZe ejejd œ¡Gd d „d eƒZeƒZejZejZejZejZdd„ZdS)éNé)Úspawn)Úutil)Úensure_runningÚregisterÚ unregisterÚpthread_sigmaskZnoopcCsdS©N©r r r ú!ór Úposix)Ú semaphoreZ shared_memoryc@sLeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dS)ÚResourceTrackercCst ¡|_d|_d|_dSr )Ú threadingÚLockÚ_lockÚ_fdÚ_pid©Úselfr r r Ú__init__0s zResourceTracker.__init__cCsj|jP|jdur"WdƒdSt |j¡d|_t |jd¡d|_Wdƒn1s\0YdS)Nr)rrÚosÚcloseÚwaitpidrrr r r Ú_stop5s  zResourceTracker._stopcCs| ¡|jSr )rrrr r r ÚgetfdBszResourceTracker.getfdc Cs¦|jˆ|jdur~| ¡r,WdƒdSt |j¡z|jdurRt |jd¡WntyfYn0d|_d|_t  d¡g}z|  t j   ¡¡Wnty¨Yn0d}t ¡\}}zºz†|  |¡t ¡}|gt ¡}|d||g7}z:trt tjt¡t |||¡}Wtr@t tjt¡ntr>t tjt¡0Wnt |¡‚Yn0||_||_Wt |¡n t |¡0Wdƒn1s˜0YdS)NrzUresource_tracker: process died unexpectedly, relaunching. Some resources might leak.z:from multiprocessing.resource_tracker import main;main(%d)z-c)rrÚ _check_aliverrrrÚChildProcessErrorÚwarningsÚwarnÚappendÚsysÚstderrÚfilenoÚ ExceptionÚpiperZget_executablerÚ_args_from_interpreter_flagsÚ _HAVE_SIGMASKÚsignalrÚ SIG_BLOCKÚ_IGNORED_SIGNALSÚspawnv_passfdsÚ SIG_UNBLOCK)rZ fds_to_passÚcmdÚrÚwZexeÚargsÚpidr r r rFsN         ÿ zResourceTracker.ensure_runningcCs0zt |jd¡Wnty&YdS0dSdS)Ns PROBE:0:noop FT)rÚwriterÚOSErrorrr r r r†s  zResourceTracker._check_alivecCs| d||¡dS)NÚREGISTER©Ú_send©rÚnameÚrtyper r r r‘szResourceTracker.registercCs| d||¡dS)NÚ UNREGISTERr7r9r r r r•szResourceTracker.unregistercCsB| ¡d |||¡ d¡}t|ƒdkr0tdƒ‚t |j|¡}dS)Nz {0}:{1}:{2} Úasciiiz name too long)rÚformatÚencodeÚlenÚ ValueErrorrr4r)rr/r:r;ÚmsgÚnbytesr r r r8™s  zResourceTracker._sendN) Ú__name__Ú __module__Ú __qualname__rrrrrrrr8r r r r r.s @ rc CsÐt tjtj¡t tjtj¡tr2t tjt¡tj tj fD]$}z |  ¡Wq>t y`Yq>0q>dd„t  ¡Dƒ}z¨t|dƒà}|D]Ê}z| ¡ d¡ d¡\}}}t  |d¡}|durÒtd|›d|›ƒ‚|dkrê|| |¡n2|d kr|| |¡n|d krn td |ƒ‚WqŠt yRztjt ¡ŽWn Yn0YqŠ0qŠWdƒn1sl0YW| ¡D]ž\}}|r¾zt d t|ƒ|f¡Wnt y¼Yn0|D]X}zNzt ||ƒWn8t y} zt d || f¡WYd} ~ n d} ~ 00Wn0qÂq€nª| ¡D]ž\}}|rhzt d t|ƒ|f¡Wnt yfYn0|D]X}zNzt ||ƒWn8t yº} zt d || f¡WYd} ~ n d} ~ 00Wn0qlq*0dS)NcSsi|] }|tƒ“qSr )Úset)Ú.0r;r r r Ú ¹r zmain..Úrbr=ú:zCannot register z. for automatic cleanup: unknown resource type r6r<ZPROBEzunrecognized command %rzQresource_tracker: There appear to be %d leaked %s objects to clean up at shutdownzresource_tracker: %r: %s)r*ÚSIGINTÚSIG_IGNÚSIGTERMr)rr.r,r#ÚstdinÚstdoutrr&Ú_CLEANUP_FUNCSÚkeysÚopenÚstripÚdecodeÚsplitÚgetrAÚaddÚremoveÚ RuntimeErrorÚ excepthookÚexc_infoÚitemsr r!r@) ÚfdÚfÚcacheÚliner/r:r;Z cleanup_funcZ rtype_cacheÚer r r Úmain«s€    ÿÿ  0 þ *î þ *rc)rr*r#rr ÚrrÚ__all__Úhasattrr)rLrNr,rQr:Ú_multiprocessingZ _posixshmemÚupdateÚ sem_unlinkZ shm_unlinkÚobjectrÚ_resource_trackerrrrrrcr r r r Ús2    ÿ þw