\d #ddlZddlZddlZddlZddlZddlmZddlmZgdZe edZ ej ej fZ ddiZejd krLddlZddlZe ed red ejied ejiGd deZeZejZejZejZejZdZdS)N)spawn)util)ensure_runningregister unregisterpthread_sigmasknoopcdSNr 1..\python\lib\multiprocessing\resource_tracker.pyr!sDrposix sem_unlink semaphore shared_memoryc>eZdZdZdZdZdZdZdZdZ dZ d S) ResourceTrackercRtj|_d|_d|_dSr ) threadingLock_lock_fd_pidselfs r__init__zResourceTracker.__init__8s#^%%  rc|j5|j ddddStj|jd|_tj|jdd|_ddddS#1swxYwYdS)Nr)rrosclosewaitpidrrs r_stopzResourceTracker._stop=s Z  x         HTX   DH Jty! $ $ $DI                  s A,AA,,A03A0c8||jSr )rrrs rgetfdzResourceTracker.getfdJs xrc|j5|j|r ddddStj|j |jtj|jdn#t$rYnwxYwd|_d|_tj dg} | tj n#t$rYnwxYwd}tj\}} | |t!j}|gt%jz}|d||zgz } t(r$t+jt*jt0t%j|||}t(r$t+jt*jt0n1#t(r%t+jt*jt0wwxYw||_||_n#tj|xYw tj|n#tj|wxYw ddddS#1swxYwYdS)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_aliver!r"rr#ChildProcessErrorwarningswarnappendsysstderrfileno Exceptionpiperget_executabler_args_from_interpreter_flags _HAVE_SIGMASKsignalr SIG_BLOCK_IGNORED_SIGNALSspawnv_passfds SIG_UNBLOCK)r fds_to_passcmdrwexeargspids rrzResourceTracker.ensure_runningNs Z9 9 x#$$&& 9 9 9 9 9 9 9 9 """y, 49a000(D    IJJJK ""3:#4#4#6#67777    NC799DAq ""1%%%*,,ut@BBBsQw'U$S.v/?AQRRR-c4EEC$U.v/ACSTTT%U.v/ACSTTTTU      s9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 sI I  !A.-I . A;8I :A;;'I #1CI  C"I !C""I >A G5AF5 ,G55.G##G5&H%5H  H%I %H;;I  IIc^ tj|jddS#t$rYdSwxYw)z;Check that the pipe has not been closed by sending a probe.s PROBE:0:noop TF)r!writerOSErrorrs rr(zResourceTracker._check_alivesI  HTX0 1 1 14   55 s  ,,c4|d||dS)z0Register name of resource with resource tracker.REGISTERN_sendrnamertypes rrzResourceTracker.registers :tU+++++rc4|d||dS)z2Unregister name of resource with resource tracker. UNREGISTERNrFrHs rrzResourceTracker.unregisters <u-----rcv|d|||d}t|dkrt dt j|j|}|t|ks+Jd|t|dS)Nz {0}:{1}:{2} asciiiz msg too longznbytes {0:n} but len(msg) {1:n})rformatencodelen ValueErrorr!rBr)rr;rIrJmsgnbytess rrGzResourceTracker._sends $$S$66==gFF s88c>>^,, ,$(C((S!!!#D#K#K CHH$$!!!!!rN) __name__ __module__ __qualname__rr$r&rr(rrrGr rrrr6s   >>>@   ,,,...     rrc tjtjtjtjtjtjtr$tjtjttj tj fD]'} | #t$rY$wxYwdtD} t|d5}|D] } |dd\}}}t|d}|t)d|d||dkr|||n;|d kr|||n|d krnt/d |z#t$r, tjtjn#YnxYwYwxYw dddn #1swxYwY|D]\}}|r8 t7jd t;||fzn#t$rYnwxYw|D]P} t||n1#t$r$} t7jd |d| Yd} ~ nd} ~ wwxYwL#wxYwdS#|D]\}}|r8 t7jd t;||fzn#t$rYnwxYw|D]P} t||n1#t$r$} t7jd |d| Yd} ~ nd} ~ wwxYwL#wxYwwxYw)zRun resource tracker.c,i|]}|tSr )set).0rJs r zmain..s = = =eUCEE = = =rrbrN:NzCannot register z. for automatic cleanup: unknown resource type rErLPROBEzunrecognized command %rzQresource_tracker: There appear to be %d leaked %s objects to clean up at shutdownzresource_tracker: z: )r5SIGINTSIG_IGNSIGTERMr4r r9r7r-stdinstdoutr"r0_CLEANUP_FUNCSkeysopenstripdecodesplitgetrRaddremove RuntimeError excepthookexc_infoitemsr*r+rQ) fdfcacheliner;rIrJ cleanup_func rtype_cachees rmainrys M&-000 M&.&.111Ev13CDDDi $  GGIIII    D  > =~':':'<'< = = =E- "d^^ q  '+zz||':':7'C'C'I'I#'N'N$Cu#1#5#5eT#B#BL#+(=t==5:==>>>j((e ((.... ,,e ++D1111*+Ds+JKKK  777 #                2#(++--   E; M#N#&{#3#3U";#<====!D#  N&u-d3333$NNN DDD!!&LMMMMMMMMNDDDD   %++--   E; M#N#&{#3#3U";#<====!D#  N&u-d3333$NNN DDD!!&LMMMMMMMMNDDDD  s!B.. B;:B;"K2H 9C GH  G=G21G=2G6 4G=9H <G==H  K HKHK4&I I('I(1JJ9 J5J0+J90J55J99J;M*&LM* L M*L M*L10M#1 M ;M M#M M#"M*#M% %M*)r!r5r-rr*rr__all__hasattrr4r`rbr7rerI_multiprocessing _posixshmemupdater shm_unlinkobjectr_resource_trackerrrrr&ryr rrrs$  6 6 6 122 M6>2 LL7gw..  )4    / tttttftttn$O%%"1  %  ) <<<<<r