PNG  IHDRQgAMA a cHRMz&u0`:pQ<bKGDgmIDATxwUﹻ& ^CX(J I@ "% (** BX +*i"]j(IH{~R)[~>h{}gy)I$Ij .I$I$ʊy@}x.: $I$Ii}VZPC)I$IF ^0ʐJ$I$Q^}{"r=OzI$gRZeC.IOvH eKX $IMpxsk.쒷/&r[޳<v| .I~)@$updYRa$I |M.e JaֶpSYR6j>h%IRز if&uJ)M$I vLi=H;7UJ,],X$I1AҒJ$ XY XzI@GNҥRT)E@;]K*Mw;#5_wOn~\ DC&$(A5 RRFkvIR}l!RytRl;~^ǷJj اy뷦BZJr&ӥ8Pjw~vnv X^(I;4R=P[3]J,]ȏ~:3?[ a&e)`e*P[4]T=Cq6R[ ~ޤrXR Հg(t_HZ-Hg M$ãmL5R uk*`%C-E6/%[t X.{8P9Z.vkXŐKjgKZHg(aK9ڦmKjѺm_ \#$5,)-  61eJ,5m| r'= &ڡd%-]J on Xm|{ RҞe $eڧY XYrԮ-a7RK6h>n$5AVڴi*ֆK)mѦtmr1p| q:흺,)Oi*ֺK)ܬ֦K-5r3>0ԔHjJئEZj,%re~/z%jVMڸmrt)3]J,T K֦OvԒgii*bKiNO~%PW0=dii2tJ9Jݕ{7"I P9JKTbu,%r"6RKU}Ij2HKZXJ,妝 XYrP ެ24c%i^IK|.H,%rb:XRl1X4Pe/`x&P8Pj28Mzsx2r\zRPz4J}yP[g=L) .Q[6RjWgp FIH*-`IMRaK9TXcq*I y[jE>cw%gLRԕiFCj-ďa`#e~I j,%r,)?[gp FI˨mnWX#>mʔ XA DZf9,nKҲzIZXJ,L#kiPz4JZF,I,`61%2s $,VOϚ2/UFJfy7K> X+6 STXIeJILzMfKm LRaK9%|4p9LwJI!`NsiazĔ)%- XMq>pk$-$Q2x#N ؎-QR}ᶦHZډ)J,l#i@yn3LN`;nڔ XuX5pF)m|^0(>BHF9(cզEerJI rg7 4I@z0\JIi䵙RR0s;$s6eJ,`n 䂦0a)S)A 1eJ,堌#635RIgpNHuTH_SԕqVe ` &S)>p;S$魁eKIuX`I4춒o}`m$1":PI<[v9^\pTJjriRŭ P{#{R2,`)e-`mgj~1ϣLKam7&U\j/3mJ,`F;M'䱀 .KR#)yhTq;pcK9(q!w?uRR,n.yw*UXj#\]ɱ(qv2=RqfB#iJmmL<]Y͙#$5 uTU7ӦXR+q,`I}qL'`6Kͷ6r,]0S$- [RKR3oiRE|nӦXR.(i:LDLTJjY%o:)6rxzҒqTJjh㞦I.$YR.ʼnGZ\ֿf:%55 I˼!6dKxm4E"mG_ s? .e*?LRfK9%q#uh$)i3ULRfK9yxm܌bj84$i1U^@Wbm4uJ,ҪA>_Ij?1v32[gLRD96oTaR׿N7%L2 NT,`)7&ƝL*꽙yp_$M2#AS,`)7$rkTA29_Iye"|/0t)$n XT2`YJ;6Jx".e<`$) PI$5V4]29SRI>~=@j]lp2`K9Jaai^" Ԋ29ORI%:XV5]JmN9]H;1UC39NI%Xe78t)a;Oi Ҙ>Xt"~G>_mn:%|~ޅ_+]$o)@ǀ{hgN;IK6G&rp)T2i୦KJuv*T=TOSV>(~D>dm,I*Ɛ:R#ۙNI%D>G.n$o;+#RR!.eU˽TRI28t)1LWϚ>IJa3oFbu&:tJ*(F7y0ZR ^p'Ii L24x| XRI%ۄ>S1]Jy[zL$adB7.eh4%%누>WETf+3IR:I3Xה)3אOۦSRO'ٺ)S}"qOr[B7ϙ.edG)^ETR"RtRݜh0}LFVӦDB^k_JDj\=LS(Iv─aTeZ%eUAM-0;~˃@i|l @S4y72>sX-vA}ϛBI!ݎߨWl*)3{'Y|iSlEڻ(5KtSI$Uv02,~ԩ~x;P4ցCrO%tyn425:KMlD ^4JRxSهF_}شJTS6uj+ﷸk$eZO%G*^V2u3EMj3k%)okI]dT)URKDS 7~m@TJR~荪fT"֛L \sM -0T KfJz+nإKr L&j()[E&I ߴ>e FW_kJR|!O:5/2跌3T-'|zX ryp0JS ~^F>-2< `*%ZFP)bSn"L :)+pʷf(pO3TMW$~>@~ū:TAIsV1}S2<%ޟM?@iT ,Eūoz%i~g|`wS(]oȤ8)$ ntu`өe`6yPl IzMI{ʣzʨ )IZ2= ld:5+請M$-ї;U>_gsY$ÁN5WzWfIZ)-yuXIfp~S*IZdt;t>KūKR|$#LcԀ+2\;kJ`]YǔM1B)UbG"IRߊ<xܾӔJ0Z='Y嵤 Leveg)$znV-º^3Ւof#0Tfk^Zs[*I꯳3{)ˬW4Ւ4 OdpbZRS|*I 55#"&-IvT&/윚Ye:i$ 9{LkuRe[I~_\ؠ%>GL$iY8 9ܕ"S`kS.IlC;Ҏ4x&>u_0JLr<J2(^$5L s=MgV ~,Iju> 7r2)^=G$1:3G< `J3~&IR% 6Tx/rIj3O< ʔ&#f_yXJiގNSz; Tx(i8%#4 ~AS+IjerIUrIj362v885+IjAhK__5X%nV%Iͳ-y|7XV2v4fzo_68"S/I-qbf; LkF)KSM$ Ms>K WNV}^`-큧32ŒVؙGdu,^^m%6~Nn&͓3ŒVZMsRpfEW%IwdǀLm[7W&bIRL@Q|)* i ImsIMmKmyV`i$G+R 0tV'!V)֏28vU7͒vHꦼtxꗞT ;S}7Mf+fIRHNZUkUx5SAJㄌ9MqμAIRi|j5)o*^'<$TwI1hEU^c_j?Е$%d`z cyf,XO IJnTgA UXRD }{H}^S,P5V2\Xx`pZ|Yk:$e ~ @nWL.j+ϝYb퇪bZ BVu)u/IJ_ 1[p.p60bC >|X91P:N\!5qUB}5a5ja `ubcVxYt1N0Zzl4]7­gKj]?4ϻ *[bg$)+À*x쳀ogO$~,5 زUS9 lq3+5mgw@np1sso Ӻ=|N6 /g(Wv7U;zωM=wk,0uTg_`_P`uz?2yI!b`kĸSo+Qx%!\οe|އԁKS-s6pu_(ֿ$i++T8=eY; צP+phxWQv*|p1. ά. XRkIQYP,drZ | B%wP|S5`~́@i޾ E;Չaw{o'Q?%iL{u D?N1BD!owPHReFZ* k_-~{E9b-~P`fE{AܶBJAFO wx6Rox5 K5=WwehS8 (JClJ~ p+Fi;ŗo+:bD#g(C"wA^ r.F8L;dzdIHUX݆ϞXg )IFqem%I4dj&ppT{'{HOx( Rk6^C٫O.)3:s(۳(Z?~ٻ89zmT"PLtw䥈5&b<8GZ-Y&K?e8,`I6e(֍xb83 `rzXj)F=l($Ij 2*(F?h(/9ik:I`m#p3MgLaKjc/U#n5S# m(^)=y=đx8ŬI[U]~SцA4p$-F i(R,7Cx;X=cI>{Km\ o(Tv2vx2qiiDJN,Ҏ!1f 5quBj1!8 rDFd(!WQl,gSkL1Bxg''՞^ǘ;pQ P(c_ IRujg(Wz bs#P­rz> k c&nB=q+ؔXn#r5)co*Ũ+G?7< |PQӣ'G`uOd>%Mctz# Ԫڞ&7CaQ~N'-P.W`Oedp03C!IZcIAMPUۀ5J<\u~+{9(FbbyAeBhOSܳ1 bÈT#ŠyDžs,`5}DC-`̞%r&ڙa87QWWp6e7 Rϫ/oY ꇅ Nܶըtc!LA T7V4Jsū I-0Pxz7QNF_iZgúWkG83 0eWr9 X]㾮݁#Jˢ C}0=3ݱtBi]_ &{{[/o[~ \q鯜00٩|cD3=4B_b RYb$óBRsf&lLX#M*C_L܄:gx)WΘsGSbuL rF$9';\4Ɍq'n[%p.Q`u hNb`eCQyQ|l_C>Lb꟟3hSb #xNxSs^ 88|Mz)}:](vbۢamŖ࿥ 0)Q7@0=?^k(*J}3ibkFn HjB׻NO z x}7p 0tfDX.lwgȔhԾŲ }6g E |LkLZteu+=q\Iv0쮑)QٵpH8/2?Σo>Jvppho~f>%bMM}\//":PTc(v9v!gոQ )UfVG+! 35{=x\2+ki,y$~A1iC6#)vC5^>+gǵ@1Hy٪7u;p psϰu/S <aʸGu'tD1ԝI<pg|6j'p:tպhX{o(7v],*}6a_ wXRk,O]Lܳ~Vo45rp"N5k;m{rZbΦ${#)`(Ŵg,;j%6j.pyYT?}-kBDc3qA`NWQū20/^AZW%NQ MI.X#P#,^Ebc&?XR tAV|Y.1!؅⨉ccww>ivl(JT~ u`ٵDm q)+Ri x/x8cyFO!/*!/&,7<.N,YDŽ&ܑQF1Bz)FPʛ?5d 6`kQձ λc؎%582Y&nD_$Je4>a?! ͨ|ȎWZSsv8 j(I&yj Jb5m?HWp=g}G3#|I,5v珿] H~R3@B[☉9Ox~oMy=J;xUVoj bUsl_35t-(ՃɼRB7U!qc+x4H_Qo֮$[GO<4`&č\GOc[.[*Af%mG/ ňM/r W/Nw~B1U3J?P&Y )`ѓZ1p]^l“W#)lWZilUQu`-m|xĐ,_ƪ|9i:_{*(3Gѧ}UoD+>m_?VPۅ15&}2|/pIOʵ> GZ9cmíتmnz)yߐbD >e}:) r|@R5qVSA10C%E_'^8cR7O;6[eKePGϦX7jb}OTGO^jn*媓7nGMC t,k31Rb (vyܴʭ!iTh8~ZYZp(qsRL ?b}cŨʊGO^!rPJO15MJ[c&~Z`"ѓޔH1C&^|Ш|rʼ,AwĴ?b5)tLU)F| &g٣O]oqSUjy(x<Ϳ3 .FSkoYg2 \_#wj{u'rQ>o;%n|F*O_L"e9umDds?.fuuQbIWz |4\0 sb;OvxOSs; G%T4gFRurj(֍ڑb uԖKDu1MK{1^ q; C=6\8FR艇!%\YÔU| 88m)֓NcLve C6z;o&X x59:q61Z(T7>C?gcļxѐ Z oo-08jہ x,`' ҔOcRlf~`jj".Nv+sM_]Zk g( UOPyεx%pUh2(@il0ݽQXxppx-NS( WO+轾 nFߢ3M<;z)FBZjciu/QoF 7R¥ ZFLF~#ȣߨ^<쩡ݛкvџ))ME>ώx4m#!-m!L;vv#~Y[đKmx9.[,UFS CVkZ +ߟrY٧IZd/ioi$%͝ب_ֶX3ܫhNU ZZgk=]=bbJS[wjU()*I =ώ:}-蹞lUj:1}MWm=̛ _ ¾,8{__m{_PVK^n3esw5ӫh#$-q=A̟> ,^I}P^J$qY~Q[ Xq9{#&T.^GVj__RKpn,b=`żY@^՝;z{paVKkQXj/)y TIc&F;FBG7wg ZZDG!x r_tƢ!}i/V=M/#nB8 XxЫ ^@CR<{䤭YCN)eKOSƟa $&g[i3.C6xrOc8TI;o hH6P&L{@q6[ Gzp^71j(l`J}]e6X☉#͕ ׈$AB1Vjh㭦IRsqFBjwQ_7Xk>y"N=MB0 ,C #o6MRc0|$)ف"1!ixY<B9mx `,tA>)5ػQ?jQ?cn>YZe Tisvh# GMމȇp:ԴVuږ8ɼH]C.5C!UV;F`mbBk LTMvPʍϤj?ԯ/Qr1NB`9s"s TYsz &9S%U԰> {<ؿSMxB|H\3@!U| k']$U+> |HHMLޢ?V9iD!-@x TIî%6Z*9X@HMW#?nN ,oe6?tQwڱ.]-y':mW0#!J82qFjH -`ѓ&M0u Uγmxϵ^-_\])@0Rt.8/?ٰCY]x}=sD3ojަЫNuS%U}ԤwHH>ڗjܷ_3gN q7[q2la*ArǓԖ+p8/RGM ]jacd(JhWko6ڎbj]i5Bj3+3!\j1UZLsLTv8HHmup<>gKMJj0@H%,W΃7R) ">c, xixј^ aܖ>H[i.UIHc U1=yW\=S*GR~)AF=`&2h`DzT󑓶J+?W+}C%P:|0H܆}-<;OC[~o.$~i}~HQ TvXΈr=b}$vizL4:ȰT|4~*!oXQR6Lk+#t/g lԁߖ[Jڶ_N$k*". xsxX7jRVbAAʯKҎU3)zSNN _'s?f)6X!%ssAkʱ>qƷb hg %n ~p1REGMHH=BJiy[<5 ǁJҖgKR*倳e~HUy)Ag,K)`Vw6bRR:qL#\rclK/$sh*$ 6덤 KԖc 3Z9=Ɣ=o>X Ώ"1 )a`SJJ6k(<c e{%kϊP+SL'TcMJWRm ŏ"w)qc ef꒵i?b7b('"2r%~HUS1\<(`1Wx9=8HY9m:X18bgD1u ~|H;K-Uep,, C1 RV.MR5άh,tWO8WC$ XRVsQS]3GJ|12 [vM :k#~tH30Rf-HYݺ-`I9%lIDTm\ S{]9gOڒMNCV\G*2JRŨ;Rҏ^ڽ̱mq1Eu?To3I)y^#jJw^Ńj^vvlB_⋌P4x>0$c>K†Aļ9s_VjTt0l#m>E-,,x,-W)سo&96RE XR.6bXw+)GAEvL)͞K4$p=Ũi_ѱOjb HY/+@θH9޼]Nԥ%n{ &zjT? Ty) s^ULlb,PiTf^<À] 62R^V7)S!nllS6~͝V}-=%* ʻ>G DnK<y&>LPy7'r=Hj 9V`[c"*^8HpcO8bnU`4JȪAƋ#1_\ XϘHPRgik(~G~0DAA_2p|J묭a2\NCr]M_0 ^T%e#vD^%xy-n}-E\3aS%yN!r_{ )sAw ڼp1pEAk~v<:`'ӭ^5 ArXOI驻T (dk)_\ PuA*BY]yB"l\ey hH*tbK)3 IKZ򹞋XjN n *n>k]X_d!ryBH ]*R 0(#'7 %es9??ښFC,ՁQPjARJ\Ρw K#jahgw;2$l*) %Xq5!U᢯6Re] |0[__64ch&_}iL8KEgҎ7 M/\`|.p,~`a=BR?xܐrQ8K XR2M8f ?`sgWS%" Ԉ 7R%$ N}?QL1|-эټwIZ%pvL3Hk>,ImgW7{E xPHx73RA @RS CC !\ȟ5IXR^ZxHл$Q[ŝ40 (>+ _C >BRt<,TrT {O/H+˟Pl6 I B)/VC<6a2~(XwV4gnXR ϱ5ǀHٻ?tw똤Eyxp{#WK qG%5],(0ӈH HZ])ג=K1j&G(FbM@)%I` XRg ʔ KZG(vP,<`[ Kn^ SJRsAʠ5xՅF`0&RbV tx:EaUE/{fi2;.IAwW8/tTxAGOoN?G}l L(n`Zv?pB8K_gI+ܗ #i?ޙ.) p$utc ~DžfՈEo3l/)I-U?aԅ^jxArA ΧX}DmZ@QLےbTXGd.^|xKHR{|ΕW_h] IJ`[G9{).y) 0X YA1]qp?p_k+J*Y@HI>^?gt.06Rn ,` ?);p pSF9ZXLBJPWjgQ|&)7! HjQt<| ؅W5 x W HIzYoVMGP Hjn`+\(dNW)F+IrS[|/a`K|ͻ0Hj{R,Q=\ (F}\WR)AgSG`IsnAR=|8$}G(vC$)s FBJ?]_u XRvύ6z ŨG[36-T9HzpW̞ú Xg큽=7CufzI$)ki^qk-) 0H*N` QZkk]/tnnsI^Gu't=7$ Z;{8^jB% IItRQS7[ϭ3 $_OQJ`7!]W"W,)Iy W AJA;KWG`IY{8k$I$^%9.^(`N|LJ%@$I}ֽp=FB*xN=gI?Q{٥4B)mw $Igc~dZ@G9K X?7)aK%݅K$IZ-`IpC U6$I\0>!9k} Xa IIS0H$I H ?1R.Чj:4~Rw@p$IrA*u}WjWFPJ$I➓/6#! LӾ+ X36x8J |+L;v$Io4301R20M I$-E}@,pS^ޟR[/s¹'0H$IKyfŸfVOπFT*a$I>He~VY/3R/)>d$I>28`Cjw,n@FU*9ttf$I~<;=/4RD~@ X-ѕzἱI$: ԍR a@b X{+Qxuq$IЛzo /~3\8ڒ4BN7$IҀj V]n18H$IYFBj3̵̚ja pp $Is/3R Ӻ-Yj+L;.0ŔI$Av? #!5"aʄj}UKmɽH$IjCYs?h$IDl843.v}m7UiI=&=0Lg0$I4: embe` eQbm0u? $IT!Sƍ'-sv)s#C0:XB2a w I$zbww{."pPzO =Ɔ\[ o($Iaw]`E).Kvi:L*#gР7[$IyGPI=@R 4yR~̮´cg I$I/<tPͽ hDgo 94Z^k盇΄8I56^W$I^0̜N?4*H`237}g+hxoq)SJ@p|` $I%>-hO0eO>\ԣNߌZD6R=K ~n($I$y3D>o4b#px2$yڪtzW~a $I~?x'BwwpH$IZݑnC㧄Pc_9sO gwJ=l1:mKB>Ab<4Lp$Ib o1ZQ@85b̍ S'F,Fe,^I$IjEdù{l4 8Ys_s Z8.x m"+{~?q,Z D!I$ϻ'|XhB)=…']M>5 rgotԎ 獽PH$IjIPhh)n#cÔqA'ug5qwU&rF|1E%I$%]!'3AFD/;Ck_`9 v!ٴtPV;x`'*bQa w I$Ix5 FC3D_~A_#O݆DvV?<qw+I$I{=Z8".#RIYyjǪ=fDl9%M,a8$I$Ywi[7ݍFe$s1ՋBVA?`]#!oz4zjLJo8$I$%@3jAa4(o ;p,,dya=F9ً[LSPH$IJYЉ+3> 5"39aZ<ñh!{TpBGkj}Sp $IlvF.F$I z< '\K*qq.f<2Y!S"-\I$IYwčjF$ w9 \ߪB.1v!Ʊ?+r:^!I$BϹB H"B;L'G[ 4U#5>੐)|#o0aڱ$I>}k&1`U#V?YsV x>{t1[I~D&(I$I/{H0fw"q"y%4 IXyE~M3 8XψL}qE$I[> nD?~sf ]o΁ cT6"?'_Ἣ $I>~.f|'!N?⟩0G KkXZE]ޡ;/&?k OۘH$IRۀwXӨ<7@PnS04aӶp.:@\IWQJ6sS%I$e5ڑv`3:x';wq_vpgHyXZ 3gЂ7{{EuԹn±}$I$8t;b|591nءQ"P6O5i }iR̈́%Q̄p!I䮢]O{H$IRϻ9s֧ a=`- aB\X0"+5"C1Hb?߮3x3&gşggl_hZ^,`5?ߎvĸ%̀M!OZC2#0x LJ0 Gw$I$I}<{Eb+y;iI,`ܚF:5ܛA8-O-|8K7s|#Z8a&><a&/VtbtLʌI$I$I$I$I$I$IRjDD%tEXtdate:create2022-05-31T04:40:26+00:00!Î%tEXtdate:modify2022-05-31T04:40:26+00:00|{2IENDB`Mini Shell

HOME


Mini Shell 1.0
DIR:/lib/python3.9/multiprocessing/__pycache__/
Upload File :
Current File : //lib/python3.9/multiprocessing/__pycache__/managers.cpython-39.pyc
a

�RLg���@sBgd�ZddlZddlZddlZddlZddlZddlZddlZddlZddlm	Z	ddl
mZddlm
Z
ddlmZmZmZddlmZdd	lmZdd
lmZddlmZzddlmZd
ZWney�dZYn0dd�Ze�eje�dd�dD�Zedeu�r.dd�ZeD]Ze�ee��qGdd�de�Z difdd�Z!dd�Z"Gdd�de#�Z$dd �Z%d!d"�Z&Gd#d$�d$e�Z'Gd%d&�d&e�Z(e
j)e
j*fe
j+e
j,fd'�Z-Gd(d)�d)e�Z.Gd*d+�d+e/�Z0Gd,d-�d-e�Z1d.d/�Z2ifd0d1�Z3dmd2d3�Z4Gd4d5�d5e�Z5Gd6d7�d7e�Z6dnd8d9�Z7Gd:d;�d;e1�Z8Gd<d=�d=e1�Z9Gd>d?�d?e9�Z:Gd@dA�dAe1�Z;GdBdC�dCe1�Z<GdDdE�dEe1�Z=GdFdG�dGe1�Z>e3dHdI�Z?GdJdK�dKe?�Z@e3dLdM�ZAdNdOieA_Be3dPdQ�ZCe3dRdS�ZDdTdTdTdOdOdU�eD_BGdVdR�dReD�ZEGdWdX�dXe.�ZFeF�dYejG�eF�dZejG�eF�d[ejHe;�eF�d\ejIe9�eF�d]ejJe9�eF�d^ejKe9�eF�d_ejLe9�eF�d`ejMe:�eF�daejNe<�eF�dbejOeE�eF�dcee@�eF�ddePeA�eF�d7e6e>�eF�d9e7eC�eF�d5e5e=�eFjdOe8dde�eFjdTddf�e�r>Gdgdh�dh�ZQGdidj�dje'�ZRGdkdl�dle.�ZSdS)o)�BaseManager�SyncManager�	BaseProxy�Token�SharedMemoryManager�N)�getpid)�
format_exc�)�
connection)�	reduction�get_spawning_popen�ProcessError)�pool)�process)�util)�get_context)�
shared_memoryTFcCstj|j|��ffS�N)�array�typecode�tobytes)�a�r�./usr/lib/python3.9/multiprocessing/managers.py�reduce_array.srcCsg|]}tti|����qSr)�type�getattr��.0�namerrr�
<listcomp>2�r )�items�keys�valuescCstt|�ffSr)�list��objrrr�rebuild_as_list4sr(c@s4eZdZdZdZdd�Zdd�Zdd�Zd	d
�ZdS)rz3
    Type to uniquely identify a shared object
    ��typeid�address�idcCs||||_|_|_dSrr))�selfr*r+r,rrr�__init__CszToken.__init__cCs|j|j|jfSrr)�r-rrr�__getstate__FszToken.__getstate__cCs|\|_|_|_dSrr)�r-�staterrr�__setstate__IszToken.__setstate__cCsd|jj|j|j|jfS)Nz %s(typeid=%r, address=%r, id=%r))�	__class__�__name__r*r+r,r/rrr�__repr__Ls�zToken.__repr__N)	r5�
__module__�__qualname__�__doc__�	__slots__r.r0r3r6rrrrr=srrcCs8|�||||f�|��\}}|dkr*|St||��dS)zL
    Send a message to manager using connection `c` and return response
    �#RETURNN)�send�recv�convert_to_error)�cr,�
methodname�args�kwds�kind�resultrrr�dispatchTs
rEcCsd|dkr|S|dvrRt|t�s4td�||t|����|dkrHtd|�St|�Sntd�|��SdS)N�#ERROR)�
#TRACEBACK�#UNSERIALIZABLEz.Result {0!r} (kind '{1}') type is {2}, not strrHzUnserializable message: %s
zUnrecognized message type {!r})�
isinstance�str�	TypeError�formatr�RemoteError�
ValueError)rCrDrrrr>^s

��
r>c@seZdZdd�ZdS)rMcCsdt|jd�dS)NzM
---------------------------------------------------------------------------
rzK---------------------------------------------------------------------------)rJrAr/rrr�__str__nszRemoteError.__str__N)r5r7r8rOrrrrrMmsrMcCs2g}t|�D] }t||�}t|�r|�|�q|S)z4
    Return a list of names of methods of `obj`
    )�dirr�callable�append)r'�tempr�funcrrr�all_methodsus
rUcCsdd�t|�D�S)zP
    Return a list of names of methods of `obj` which do not start with '_'
    cSsg|]}|ddkr|�qS)r�_rrrrrr �r!z"public_methods.<locals>.<listcomp>)rUr&rrr�public_methods�srWc@s�eZdZdZgd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�Zdd�Zeee
d�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&S)'�ServerzM
    Server class which runs in a process controlled by a manager object
    )	�shutdown�create�accept_connection�get_methods�
debug_info�number_of_objects�dummy�incref�decrefcCsxt|t�std�|t|����||_t�|�|_t	|\}}||dd�|_
|j
j|_ddi|_i|_
i|_t��|_dS)Nz&Authkey {0!r} is type {1!s}, not bytes�)r+Zbacklog�0�Nr)rI�bytesrKrLr�registryr�AuthenticationString�authkey�listener_client�listenerr+�	id_to_obj�id_to_refcount�id_to_local_proxy_obj�	threading�Lock�mutex)r-rfr+rh�
serializer�Listener�Clientrrrr.�s
��

zServer.__init__c	Cs�t��|_|t��_z�tj|jd�}d|_|�	�z|j�
�sL|j�d�q4Wntt
fydYn0Wtjtjkr�t�d�tjt_tjt_t�d�n2tjtjkr�t�d�tjt_tjt_t�d�0dS)z(
        Run the server forever
        )�targetTr	zresetting stdout, stderrrN)rn�Event�
stop_eventr�current_process�_manager_server�Thread�accepter�daemon�start�is_set�wait�KeyboardInterrupt�
SystemExit�sys�stdout�
__stdout__r�debug�
__stderr__�stderr�exit)r-rzrrr�
serve_forever�s*



�
zServer.serve_forevercCsLz|j��}Wnty$YqYn0tj|j|fd�}d|_|��qdS)N�rtrAT)rjZaccept�OSErrorrnry�handle_requestr{r|)r-r?�trrrrz�s
zServer.acceptercCsNd}}}zTt�||j�t�||j�|��}|\}}}}||jvsTJd|��t||�}Wnty|dt�f}	YnB0z||g|�Ri|��}Wnty�dt�f}	Yn
0d|f}	z|�	|	�Wntt�y@}
zZz|�	dt�f�Wnt�yYn0t
�d|	�t
�d|�t
�d|
�WYd}
~
n
d}
~
00|��dS)z)
        Handle a new connection
        Nz%r unrecognizedrGr;zFailure to send message: %rz ... request was %r� ... exception was %r)
r
Zdeliver_challengerhZanswer_challenger=�publicr�	Exceptionrr<r�info�close)r-r?�funcnamerD�request�ignorerArBrT�msg�errrr��s4"zServer.handle_requestcCs�t�dt��j�|j}|j}|j}|j�	��sΐz:d}}|�}|\}}}	}
z||\}}}WnPt
y�}
z8z|j|\}}}Wnt
y�|
�Yn0WYd}
~
n
d}
~
00||vr�td|t
|�|f��t||�}z||	i|
��}Wn.t�y}zd|f}WYd}~nXd}~00|�o,|�|d�}|�rb|�|||�\}}t||j|�}d||ff}nd|f}Wn�t�y�|du�r�dt�f}nRz2|j|}|||||g|	�Ri|
��}d|f}Wnt�y�dt�f}Yn0YnLt�yt�dt��j�t�d	�Ynt�y2dt�f}Yn0z4z||�Wn"t�yd|d
t�f�Yn0Wq$t�y�}zHt�dt��j�t�d|�t�d
|�|��t�d�WYd}~q$d}~00q$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=%rrF�#PROXYr;rGz$got EOF -- exiting thread serving %rrrHzexception in thread serving %rz ... message was %rr�r	)rr�rn�current_threadrr=r<rkrvr}�KeyErrorrm�AttributeErrorrrr��getrZrr+r�fallback_mapping�EOFErrorr�r�r�r�)r-�connr=r<rkr@r'r��identrArB�exposed�	gettypeid�keZfunction�resr�r�r*ZridentZrexposed�tokenZ
fallback_funcrDrrr�serve_client�s��� ��


�����zServer.serve_clientcCs|Srr�r-r�r�r'rrr�fallback_getvalue6szServer.fallback_getvaluecCst|�Sr�rJr�rrr�fallback_str9szServer.fallback_strcCst|�Sr)�reprr�rrr�
fallback_repr<szServer.fallback_repr)rOr6�	#GETVALUEcCsdSrr�r-r?rrrr_EszServer.dummyc
Cs�|j�vg}t|j���}|��|D]<}|dkr&|�d||j|t|j|d�dd�f�q&d�|�Wd�S1s�0YdS)zO
        Return some info --- useful to spot problems with refcounting
        rcz  %s:       refcount=%s
    %srN�K�
)	rpr%rlr#�sortrRrJrk�join)r-r?rDr#r�rrrr]Hs
��zServer.debug_infocCs
t|j�S)z*
        Number of shared objects
        )�lenrlr�rrrr^XszServer.number_of_objectscCsVzDzt�d�|�d�Wnddl}|��Yn0W|j��n|j��0dS)z'
        Shutdown this process
        z!manager received shutdown message�r;NrN)rr�r<�	traceback�	print_excrv�set)r-r?r�rrrrY_s
zServer.shutdowncOs|j��|j|\}}}}|durD|s2t|�dkr:td��|d}	n||i|��}	|durbt|	�}|dur�t|t�s�td�|t	|����t
|�t
|�}dt|	�}
t�
d||
�|	t|�|f|j|
<|
|jvr�d|j|
<Wd�n1s�0Y|�||
�|
t|�fS)z>
        Create a new shared object and return its id
        Nr	z4Without callable, must have one non-keyword argumentrz,Method_to_typeid {0!r}: type {1!s}, not dictz%xz&%r callable returned object with id %r)rprfr�rNrWrI�dictrKrLrr%r,rr�r�rkrlr`�tuple)r-r?r*rArBrQr��method_to_typeid�	proxytyper'r�rrrrZls6�
�

��
(z
Server.createcCst|j|jd�S)zL
        Return the methods of the shared object indicated by token
        r	)r�rkr,)r-r?r�rrrr\�szServer.get_methodscCs"|t��_|�d�|�|�dS)z=
        Spawn a new thread to serve this connection
        r�N)rnr�rr<r�)r-r?rrrrr[�s

zServer.accept_connectioncCs�|j��z|j|d7<Wnjty�}zR||jvrpd|j|<|j||j|<|j|\}}}t�d|�n|�WYd}~n
d}~00Wd�n1s�0YdS)Nr	z&Server re-enabled tracking & INCREF %r)rprlr�rmrkrr�)r-r?r�r�r'r�r�rrrr`�s

�z
Server.increfcCs�||jvr$||jvr$t�d|�dS|j�d|j|dkrXtd�||j||j|���|j|d8<|j|dkr�|j|=Wd�n1s�0Y||jvr�d|j|<t�d|�|j�|j|=Wd�n1s�0YdS)NzServer DECREF skipping %rrz+Id {0!s} ({1!r}) has refcount {2:n}, not 1+r	)NrNzdisposing of obj with id %r)rlrmrr�rp�AssertionErrorrLrk)r-r?r�rrrra�s*
�
��&

z
Server.decrefN)r5r7r8r9r�r.r�rzr�r�r�r�r�r�r_r]r^rYrZr\r[r`rarrrrrX�s.
"Q�
$rXc@seZdZdgZdZdZdZdS)�State�valuerr	�N)r5r7r8r:�INITIAL�STARTED�SHUTDOWNrrrrr��sr�)�pickleZ	xmlrpclibc@s�eZdZdZiZeZd"dd�Zdd�Zdd	�Z	d#dd�Z
ed$d
d��Zdd�Z
d%dd�Zdd�Zdd�Zdd�Zdd�Zedd��Zedd��Zed&d d!��ZdS)'rz!
    Base class for managers
    Nr�cCs\|durt��j}||_t�|�|_t�|_tj|j_	||_
t|\|_|_
|pTt�|_dSr)rrwrh�_addressrg�_authkeyr��_stater�r��_serializerriZ	_Listener�_Clientr�_ctx)r-r+rhrq�ctxrrrr.�s

zBaseManager.__init__cCsf|jjtjkrP|jjtjkr&td��n*|jjtjkr>td��ntd�|jj���t|j	|j
|j|j�S)zX
        Return server object with serve_forever() method and address attribute
        �Already started server�Manager has shut down�Unknown state {!r})
r�r�r�r�r�r
r�rLrX�	_registryr�r�r�r/rrr�
get_server�s

�
�zBaseManager.get_servercCs8t|j\}}||j|jd�}t|dd�tj|j_dS)z>
        Connect manager object to the server process
        �rhNr_)	rir�r�r�rEr�r�r�r�)r-rrrsr�rrr�connectszBaseManager.connectrc	Cs4|jjtjkrP|jjtjkr&td��n*|jjtjkr>td��ntd�|jj���|durht|�sht	d��t
jdd�\}}|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
        r�r�r�Nzinitializer must be a callableF)Zduplexr��:css|]}t|�VqdSrr�)r�irrr�	<genexpr>'r!z$BaseManager.start.<locals>.<genexpr>�-r�rAZexitpriority)!r�r�r�r�r�r
r�rLrQrKr
ZPiper�ZProcessr�_run_serverr�r�r�r��_processr�Z	_identityr5rr|r�r=r�Finalize�_finalize_managerr�rY)r-�initializer�initargs�reader�writerr�rrrr|s>

�
��



��zBaseManager.startc	Cs^t�tjtj�|dur ||�|�||||�}|�|j�|��t�d|j�|�	�dS)z@
        Create a server, report its address and run it
        Nzmanager serving at %r)
�signal�SIGINT�SIG_IGN�_Serverr<r+r�rr�r�)	�clsrfr+rhrqr�r�r��serverrrrr�9szBaseManager._run_servercOsl|jjtjksJd��|j|j|jd�}z&t|dd|f||�\}}W|��n
|��0t	||j|�|fS)zP
        Create a new shared object; return the token and exposed tuple
        zserver not yet startedr�NrZ)
r�r�r�r�r�r�r�rEr�r)r-r*rArBr�r,r�rrr�_createPszBaseManager._createcCs*|jdur&|j�|�|j��s&d|_dS)zC
        Join the manager process (if it has been spawned)
        N)r�r��is_alive�r-�timeoutrrrr�\s

zBaseManager.joincCs8|j|j|jd�}zt|dd�W|��S|��0dS)zS
        Return some info about the servers shared objects and connections
        r�Nr]�r�r�r�rEr��r-r�rrr�_debug_infoes�zBaseManager._debug_infocCs8|j|j|jd�}zt|dd�W|��S|��0dS)z5
        Return the number of shared objects
        r�Nr^r�r�rrr�_number_of_objectsos�zBaseManager._number_of_objectscCsj|jjtjkr|��|jjtjkrf|jjtjkr<td��n*|jjtjkrTtd��ntd�|jj���|S)NzUnable to start serverr�r�)	r�r�r�r�r|r�r
r�rLr/rrr�	__enter__ys

�zBaseManager.__enter__cCs|��dSr)rY�r-�exc_typeZexc_valZexc_tbrrr�__exit__�szBaseManager.__exit__cCs�|��r�t�d�z4|||d�}zt|dd�W|��n
|��0WntyXYn0|jdd�|��r�t�d�t|d�r�t�d	�|��|jd
d�|��r�t�d�t	j
|_ztj
|=Wnty�Yn0dS)zQ
        Shutdown the manager process; will be registered as a finalizer
        z#sending shutdown message to managerr�NrYg�?)r�zmanager still alive�	terminatez'trying to `terminate()` manager processg�������?z#manager still alive after terminate)r�rr�rEr�r�r��hasattrr�r�r�r�r�_address_to_localr�)rr+rhr2r�r�rrrr��s.




zBaseManager._finalize_managercCs|jSr)r�r/rrrr+�szBaseManager.addressTc
s�d|jvr|j��|_�dur"t�|p0t�dd�}|p@t�dd�}|r�t|���D]8\}}t|�tusrJd|��t|�tusRJd|��qR|||�f|j�<|r‡�fdd�}	�|	_	t
|�|	�dS)z9
        Register a typeid with the manager type
        r�N�	_exposed_�_method_to_typeid_z%r is not a stringcsft�d��|j�g|�Ri|��\}}�||j||j|d�}|j|j|jd�}t|dd|jf�|S)Nz)requesting creation of a shared %r object��managerrhr�r�ra)	rr�r�r�r�r�r+rEr,)r-rArBr�Zexp�proxyr��r�r*rrrS�s�z"BaseManager.register.<locals>.temp)�__dict__r��copy�	AutoProxyrr%r"rrJr5�setattr)
r�r*rQr�r�r��
create_method�keyr�rSrr�r�register�s$

��

zBaseManager.register)NNr�N)Nr)Nr)N)NNNNT)r5r7r8r9r�rXr�r.r�r�r|�classmethodr�r�r�r�r�r�r��staticmethodr��propertyr+r�rrrrr�s4�
	
+�
	




�rc@seZdZdd�Zdd�ZdS)�ProcessLocalSetcCst�|dd��dS)NcSs|��Sr)�clearr&rrr�<lambda>�r!z*ProcessLocalSet.__init__.<locals>.<lambda>)r�register_after_forkr/rrrr.�szProcessLocalSet.__init__cCst|�dfSrd)rr/rrr�
__reduce__�szProcessLocalSet.__reduce__N)r5r7r8r.rrrrrr�src@s�eZdZdZiZe��Zddd�Zdd�Z	d	ifd
d�Z
dd
�Zdd�Ze
dd��Zdd�Zdd�Zdd�Zdd�Zdd�ZdS)rz.
    A base for proxies of shared objects
    NTFc	Cs�tj�Btj�|jd�}|dur:t��t�f}|tj|j<Wd�n1sN0Y|d|_|d|_	||_
|j
j|_||_
||_t|d|_||_|dur�t�|�|_n"|j
dur�|j
j|_nt��j|_|r�|��t�|tj�dS)Nrr	)r�_mutexr�r�r+rZForkAwareLocalr�_tls�_idset�_tokenr,�_id�_managerr�rir��_owned_by_managerrrgr�rwrh�_increfr�_after_fork)	r-r�rqr�rhr�r`�
manager_ownedZ	tls_idsetrrrr.�s**



zBaseProxy.__init__cCsdt�d�t��j}t��jdkr4|dt��j7}|j|jj	|j
d�}t|dd|f�||j_
dS)Nzmaking connection to managerZ
MainThread�|r�r[)rr�rrwrrnr�r�rr+r�rEr	r
)r-rr�rrr�_connects

zBaseProxy._connectrcCs�z|jj}Wn4ty@t�dt��j�|��|jj}Yn0|�	|j
|||f�|��\}}|dkrn|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;r����r�r�Nra)r	r
r�rr�rnr�rrr<rr=r
r�r*rr+r�r�r�rEr,r>)r-r@rArBr�rCrDr�r�r�r�rrr�_callmethods0�

�zBaseProxy._callmethodcCs
|�d�S)z9
        Get a copy of the value of the referent
        r��rr/rrr�	_getvalue:szBaseProxy._getvaluec	Cs�|jrt�d|jj�dS|j|jj|jd�}t|dd|j	f�t�d|jj�|j
�|j	�|joj|jj
}tj|tj|j|j||j|j
|jfdd�|_dS)Nz%owned_by_manager skipped INCREF of %rr�r`z	INCREF %r�
r�)rrr�rr,r�r+r�rErr
�addr
r�r�r�_decrefr	Z_close)r-r�r2rrrr@s
��zBaseProxy._increfc
Cs�|�|j�|dus |jtjkr�z2t�d|j�||j|d�}t|dd|jf�Wq�t	y�}zt�d|�WYd}~q�d}~00nt�d|j�|s�t
|d�r�t�dt��j
�|j��|`dS)Nz	DECREF %rr�raz... decref failed %sz%DECREF %r -- manager already shutdownr
z-thread %r has no more proxies so closing conn)�discardr,r�r�r�rr�r+rEr�r�rnr�rr
r�)r�rhr2ZtlsZidsetr�r�r�rrrrTs$�
zBaseProxy._decrefc
CsJd|_z|��Wn2tyD}zt�d|�WYd}~n
d}~00dS)Nzincref failed: %s)r
rr�rr�)r-r�rrrrms
zBaseProxy._after_forkcCs^i}t�dur|j|d<t|dd�rB|j|d<tt|j|j|ffStt|�|j|j|ffSdS)Nrh�_isautoFr�)	rr�rr��RebuildProxyr�rr�r�r-rBrrrrus


��zBaseProxy.__reduce__cCs|��Sr)r)r-�memorrr�__deepcopy__�szBaseProxy.__deepcopy__cCsdt|�j|jjt|�fS)Nz<%s object, typeid %r at %#x>)rr5rr*r,r/rrrr6�s�zBaseProxy.__repr__cCs8z|�d�WSty2t|�dd�dYS0dS)zV
        Return representation of the referent (or a fall-back if that fails)
        r6Nrz; '__str__()' failed>)rr�r�r/rrrrO�szBaseProxy.__str__)NNNTF)r5r7r8r9r�rZForkAwareThreadLockrr.rrrrrrrrr r6rOrrrrr�s"�
)	

rcCs�tt��dd�}|rT|j|jkrTt�d|�d|d<|j|jvrT|j|j|j|j<|�	dd�optt��dd�}|||fd|i|��S)	z5
    Function used for unpickling proxy objects.
    rxNz*Rebuild a proxy owned by manager, token=%rTrr`Z_inheritingF)
rrrwr+rr�r,rmrk�pop)rTr�rqrBr�r`rrrr�s
�
�rcCsnt|�}z|||fWSty(Yn0i}|D]}td||f|�q2t|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))r�r��execrrr�)rr��_cacheZdicZmeth�	ProxyTyperrr�
MakeProxyType�s ��r%c
Cs�t|d}|durJ||j|d�}zt|dd|f�}W|��n
|��0|dur`|dur`|j}|durrt��j}td|j	|�}||||||d�}	d|	_
|	S)z*
    Return an auto-proxy for `token`
    r	Nr�r\z
AutoProxy[%s])r�rhr`T)rir+rEr�r�rrwrhr%r*r)
r�rqr�rhr�r`r�r�r$r�rrrr��s 

�r�c@seZdZdd�Zdd�ZdS)�	NamespacecKs|j�|�dSr)r��updaterrrrr.�szNamespace.__init__cCsZt|j���}g}|D]$\}}|�d�s|�d||f�q|��d|jjd�|�fS)NrVz%s=%rz%s(%s)z, )	r%r�r"�
startswithrRr�r4r5r�)r-r"rSrr�rrrr6�s
zNamespace.__repr__N)r5r7r8r.r6rrrrr&�sr&c@s8eZdZddd�Zdd�Zdd�Zdd	�Zeee�Zd
S)�ValueTcCs||_||_dSr)�	_typecode�_value)r-rr��lockrrrr.�szValue.__init__cCs|jSr�r+r/rrrr��sz	Value.getcCs
||_dSrr-�r-r�rrrr��sz	Value.setcCsdt|�j|j|jfS)Nz
%s(%r, %r))rr5r*r+r/rrrr6�szValue.__repr__N)T)	r5r7r8r.r�r�r6rr�rrrrr)�s

r)cCst�||�Sr)r)r�sequencer,rrr�Array�sr0c@s8eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�
IteratorProxy)�__next__r<�throwr�cCs|Srrr/rrr�__iter__�szIteratorProxy.__iter__cGs|�d|�S)Nr2r�r-rArrrr2szIteratorProxy.__next__cGs|�d|�S)Nr<rr5rrrr<szIteratorProxy.sendcGs|�d|�S)Nr3rr5rrrr3szIteratorProxy.throwcGs|�d|�S)Nr�rr5rrrr�szIteratorProxy.closeN)	r5r7r8r�r4r2r<r3r�rrrrr1�sr1c@s2eZdZdZddd�Zdd�Zdd	�Zd
d�ZdS)
�
AcquirerProxy)�acquire�releaseTNcCs"|dur|fn||f}|�d|�S�Nr7r)r-Zblockingr�rArrrr7
szAcquirerProxy.acquirecCs
|�d�S�Nr8rr/rrrr8szAcquirerProxy.releasecCs
|�d�Sr9rr/rrrr�szAcquirerProxy.__enter__cCs
|�d�Sr:rr�rrrr�szAcquirerProxy.__exit__)TN)r5r7r8r�r7r8r�r�rrrrr6s

r6c@s6eZdZdZddd�Zd
dd�Zdd	�Zdd
d�ZdS)�ConditionProxy)r7r8r~�notify�
notify_allNcCs|�d|f�S�Nr~rr�rrrr~szConditionProxy.waitr	cCs|�d|f�S)Nr<r)r-�nrrrr<szConditionProxy.notifycCs
|�d�S)Nr=rr/rrrr=szConditionProxy.notify_allcCsd|�}|r|S|dur$t��|}nd}d}|s`|durN|t��}|dkrNq`|�|�|�}q,|S)Nr)�time�	monotonicr~)r-Z	predicater�rDZendtimeZwaittimerrr�wait_for s
zConditionProxy.wait_for)N)r	)N)r5r7r8r�r~r<r=rBrrrrr;s


r;c@s2eZdZdZdd�Zdd�Zdd�Zdd	d
�ZdS)�
EventProxy)r}r�rr~cCs
|�d�S)Nr}rr/rrrr}5szEventProxy.is_setcCs
|�d�S�Nr�rr/rrrr�7szEventProxy.setcCs
|�d�S)Nrrr/rrrr9szEventProxy.clearNcCs|�d|f�Sr>rr�rrrr~;szEventProxy.wait)N)r5r7r8r�r}r�rr~rrrrrC3s
rCc@sNeZdZdZddd�Zdd�Zdd�Zed	d
��Zedd��Z	ed
d��Z
dS)�BarrierProxy)�__getattribute__r~�abort�resetNcCs|�d|f�Sr>rr�rrrr~AszBarrierProxy.waitcCs
|�d�S)NrGrr/rrrrGCszBarrierProxy.abortcCs
|�d�S)NrHrr/rrrrHEszBarrierProxy.resetcCs|�dd�S)NrF)�partiesrr/rrrrIGszBarrierProxy.partiescCs|�dd�S)NrF)�	n_waitingrr/rrrrJJszBarrierProxy.n_waitingcCs|�dd�S)NrF)�brokenrr/rrrrKMszBarrierProxy.broken)N)r5r7r8r�r~rGrHrrIrJrKrrrrrE?s


rEc@s(eZdZdZdd�Zdd�Zdd�ZdS)	�NamespaceProxy)rF�__setattr__�__delattr__cCs0|ddkrt�||�St�|d�}|d|f�S)NrrVrrF)�objectrF�r-r��
callmethodrrr�__getattr__TszNamespaceProxy.__getattr__cCs4|ddkrt�|||�St�|d�}|d||f�S)NrrVrrM)rOrMrF)r-r�r�rQrrrrMYszNamespaceProxy.__setattr__cCs0|ddkrt�||�St�|d�}|d|f�S)NrrVrrN)rOrNrFrPrrrrN^szNamespaceProxy.__delattr__N)r5r7r8r�rRrMrNrrrrrLRsrLc@s4eZdZdZdd�Zdd�Zeee�Zee	j
�ZdS)�
ValueProxy)r�r�cCs
|�d�S)Nr�rr/rrrr�gszValueProxy.getcCs|�d|f�SrDrr.rrrr�iszValueProxy.setN)r5r7r8r�r�r�rr�r�types�GenericAlias�__class_getitem__rrrrrSes

rS�
BaseListProxy)�__add__�__contains__�__delitem__�__getitem__�__len__�__mul__�__reversed__�__rmul__�__setitem__rR�count�extend�index�insertr!�remove�reverser��__imul__c@seZdZdd�Zdd�ZdS)�	ListProxycCs|�d|f�|S)Nrbrr.rrr�__iadd__wszListProxy.__iadd__cCs|�d|f�|S)Nrgrr.rrrrgzszListProxy.__imul__N)r5r7r8rirgrrrrrhvsrh�	DictProxy)rYrZr[r4r\r`rr�r�r"r#r!�popitem�
setdefaultr'r$r4�Iterator�
ArrayProxy)r\r[r`�	PoolProxy)Zapply�apply_asyncr��imap�imap_unorderedr��map�	map_async�starmap�
starmap_asyncr�ZAsyncResult)rprtrvrqrrc@seZdZdd�Zdd�ZdS)rocCs|Srrr/rrrr��szPoolProxy.__enter__cCs|��dSr)r�r�rrrr��szPoolProxy.__exit__N)r5r7r8r�r�rrrrro�sc@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)r5r7r8r9rrrrr�sr�QueueZ
JoinableQueueruro�RLock�	Semaphore�BoundedSemaphore�	Condition�Barrier�Poolr%r�)r�r�)r�c@sLeZdZdZgfdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)�_SharedMemoryTrackerz+Manages one or more shared memory segments.cCs||_||_dSr�Zshared_memory_context_name�
segment_names)r-rr�rrrr.�sz_SharedMemoryTracker.__init__cCs(t�d|�dt����|j�|�dS)z6Adds the supplied shared memory block name to tracker.zRegister segment � in pid N)rr�rr�rR�r-�segment_namerrr�register_segment�sz%_SharedMemoryTracker.register_segmentcCsBt�d|�dt����|j�|�t�|�}|��|��dS)z�Calls unlink() on the shared memory block with the supplied name
            and removes it from the list of blocks being tracked.zDestroy segment r�N)	rr�rr�rer�SharedMemoryr��unlink)r-r�Zsegmentrrr�destroy_segment�s

z$_SharedMemoryTracker.destroy_segmentcCs"|jdd�D]}|�|�qdS)z<Calls destroy_segment() on all tracked shared memory blocks.N)r�r�r�rrrr��sz_SharedMemoryTracker.unlinkcCs(t�d|jj�dt����|��dS)NzCall z.__del__ in )rr�r4r5rr�r/rrr�__del__�sz_SharedMemoryTracker.__del__cCs|j|jfSrrr/rrrr0�sz!_SharedMemoryTracker.__getstate__cCs|j|�dSr)r.r1rrrr3�sz!_SharedMemoryTracker.__setstate__N)r5r7r8r9r.r�r�r�r�r0r3rrrrr~�s	r~c@sJeZdZejgd�Zdd�Zdd�Zdd�Zdd	�Zd
d�Z	dd
�Z
dS)�SharedMemoryServer)�
track_segment�release_segment�
list_segmentscOs`tj|g|�Ri|��|j}t|t�r2t�|�}td|�dt����|_	t
�dt����dS)NZshm_rVz"SharedMemoryServer started by pid )rXr.r+rIre�os�fsdecoder~r�shared_memory_contextrr�)r-rA�kwargsr+rrrr.�s

�zSharedMemoryServer.__init__cOs:t|j|dd�r|j|d<tj|||g|�Ri|��S)z�Create a new distributed-shared object (not backed by a shared
            memory block) and return its id to be used in a Proxy Object.rZ_shared_memory_proxyr�)r�rfr�rXrZ)r-r?r*rAr�rrrrZ�s
zSharedMemoryServer.createcCs|j��t�||�S)zACall unlink() on all tracked shared memory, terminate the Server.)r�r�rXrYr�rrrrYs
zSharedMemoryServer.shutdowncCs|j�|�dS)z?Adds the supplied shared memory block name to Server's tracker.N)r�r��r-r?r�rrrr�sz SharedMemoryServer.track_segmentcCs|j�|�dS)z�Calls unlink() on the shared memory block with the supplied name
            and removes it from the tracker instance inside the Server.N)r�r�r�rrrr�sz"SharedMemoryServer.release_segmentcCs|jjS)zbReturns a list of names of shared memory blocks that the Server
            is currently tracking.)r�r�r�rrrr�sz SharedMemoryServer.list_segmentsN)r5r7r8rXr�r.rZrYr�r�r�rrrrr��s�

r�c@s<eZdZdZeZdd�Zdd�Zdd�Zdd	�Z	d
d�Z
dS)
ra�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).
        cOsTtjdkrddlm}|��tj|g|�Ri|��t�|j	j
�dt����dS)N�posixr	)�resource_trackerz created by pid )r�r�r�Zensure_runningrr.rr�r4r5r)r-rAr�r�rrrr.&s

zSharedMemoryManager.__init__cCst�|jj�dt����dS)Nz.__del__ by pid )rr�r4r5rr/rrrr�2szSharedMemoryManager.__del__cCsh|jjtjkrP|jjtjkr&td��n*|jjtjkr>td��ntd�|jj���|�|j	|j
|j|j�S)z@Better than monkeypatching for now; merge into Server ultimatelyz"Already started SharedMemoryServerz!SharedMemoryManager has shut downr�)
r�r�r�r�r�r
r�rLr�r�r�r�r�r/rrrr�6s

��zSharedMemoryManager.get_servercCs�|j|j|jd��h}tjdd|d�}zt|dd|jf�Wn0tyj}z|��|�WYd}~n
d}~00Wd�n1s�0Y|S)zoReturns a new SharedMemory instance with the specified size in
            bytes, to be tracked by the manager.r�NT)rZ�sizer�)	r�r�r�rr�rEr�
BaseExceptionr�)r-r�r�Zsmsr�rrrr�Cs8z SharedMemoryManager.SharedMemorycCs�|j|j|jd��f}t�|�}zt|dd|jjf�Wn2tyh}z|j�	�|�WYd}~n
d}~00Wd�n1s~0Y|S)z�Returns a new ShareableList instance populated with the values
            from the input sequence, to be tracked by the manager.r�Nr�)
r�r�r�r�
ShareableListrEZshmrr�r�)r-r/r�Zslr�rrrr�Os

8z!SharedMemoryManager.ShareableListN)r5r7r8r9r�r�r.r�r�r�r�rrrrrs	
r)NNNT)T)T�__all__r�rnr�rZqueuer@rTr�rr�rr�r
�contextrrr
rrrrrZ	HAS_SHMEM�ImportErrorrr�Z
view_typesr%r(Z	view_typerOrrEr>r�rMrUrWrXr�rrrsZXmlListenerZ	XmlClientrirr�rrrr%r�r&r)r0r1r6r;rCrErLrSrWrhrjr�rnZ
BasePoolProxyrorrwrurorxryrzr{r|r}r�r~r�rrrrr�<module>s�


H

�	w
4�



	
�

�

�%-