From 72c3119a711bcce89816e4ff87f141552a67034d Mon Sep 17 00:00:00 2001 From: themixray Date: Fri, 7 Jan 2022 16:08:53 +0300 Subject: [PATCH] fixed ramlimit4 --- build/lib/pygwin/_win.py | 62 +++++++++++++++++++++++++++------------ dist/pgw-0.1.2-py3.7.egg | Bin 50682 -> 51006 bytes 2 files changed, 43 insertions(+), 19 deletions(-) diff --git a/build/lib/pygwin/_win.py b/build/lib/pygwin/_win.py index ba5544b..4eae82d 100644 --- a/build/lib/pygwin/_win.py +++ b/build/lib/pygwin/_win.py @@ -12,6 +12,9 @@ try: nonwin32api = False except: nonwin32api = True +import sys as _sys +import warnings as _warn +import winwerror as _we import requests as _req import tempfile as _tf import threading as _t @@ -179,25 +182,46 @@ def create(title=None, size=(0,0), icon=None, resizable=False, noframe=False): def ramLimit(memory_limit): if not nonwin32api: - job_name = '' - breakaway = 'silent' - hjob = _w32j.CreateJobObject(None,job_name) - if breakaway: - info = _w32j.QueryInformationJobObject(hjob,_w32j.JobObjectExtendedLimitInformation) - if breakaway=='silent':info['BasicLimitInformation']['LimitFlags']|=(_w32j.JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK) - else:info['BasicLimitInformation']['LimitFlags']|=(_w32j.JOB_OBJECT_LIMIT_BREAKAWAY_OK) - _w32j.SetInformationJobObject(hjob,_w32j.JobObjectExtendedLimitInformation,info) - hprocess = _w32a.GetCurrentProcess() - try:_w32j.AssignProcessToJobObject(hjob, hprocess);g_hjob=hjob - except _w32j.error as e: - if e.winerror!=winerror.ERROR_ACCESS_DENIED:raise - elif sys.getwindowsversion()>=(6,2):raise - elif _w32j.IsProcessInJob(hprocess,None):raise - warnings.warn('The process is already in a job. Nested jobs are not supported prior to Windows 8.') - info=_w32j.QueryInformationJobObject(g_hjob,_w32j.JobObjectExtendedLimitInformation) - info['ProcessMemoryLimit']=memory_limit - info['BasicLimitInformation']['LimitFlags']|=(_w32j.JOB_OBJECT_LIMIT_PROCESS_MEMORY) - _w32j.SetInformationJobObject(g_hjob,_w32j.JobObjectExtendedLimitInformation,info) + g_hjob = None + def create_job(job_name='', breakaway='silent'): + hjob = _w32j.CreateJobObject(None, job_name) + if breakaway: + info = _w32j.QueryInformationJobObject(hjob, + _w32j.JobObjectExtendedLimitInformation) + if breakaway == 'silent': + info['BasicLimitInformation']['LimitFlags'] |= ( + _w32j.JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK) + else: + info['BasicLimitInformation']['LimitFlags'] |= ( + _w32j.JOB_OBJECT_LIMIT_BREAKAWAY_OK) + _w32j.SetInformationJobObject(hjob, + _w32j.JobObjectExtendedLimitInformation, info) + return hjob + def assign_job(hjob): + global g_hjob + hprocess = _w32a.GetCurrentProcess() + try: + _w32j.AssignProcessToJobObject(hjob, hprocess) + g_hjob = hjob + except _w32j.error as e: + if (e._we != _we.ERROR_ACCESS_DENIED or + _sys.getwindowsversion() >= (6, 2) or + not _w32j.IsProcessInJob(hprocess, None)): + raise + _warn.warn('The process is already in a job. Nested jobs are not ' + 'supported prior to Windows 8.') + def limit_memory(memory_limit): + if g_hjob is None: + return + info = _w32j.QueryInformationJobObject(g_hjob, + _w32j.JobObjectExtendedLimitInformation) + info['ProcessMemoryLimit'] = memory_limit + info['BasicLimitInformation']['LimitFlags'] |= ( + _w32j.JOB_OBJECT_LIMIT_PROCESS_MEMORY) + _w32j.SetInformationJobObject(g_hjob, + _w32j.JobObjectExtendedLimitInformation, info) + assign_job(create_job()) + limit_memory(memory_limit) def close(): _pg.quit() diff --git a/dist/pgw-0.1.2-py3.7.egg b/dist/pgw-0.1.2-py3.7.egg index 18518644e94cded1ca3c667f9ce53ad4545f4ca0..ca09cf0755232e9cb9f4ba1584c81d94ac53fae6 100644 GIT binary patch delta 7077 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öw$>)B=Y*}qMc zjPLon`;)6gyT1aH)?A$%OVg{)?U!{3QdPMrkau3wy=ATT44>EaKi(ere5tGb<@7l2 z+o9*HZ+(ugY6*&*A{dmxt+|2i@|s0?3nt~Z^6fu&c~3vth!^kLZq+$>68Vz4!J%bwV9%n&n?YbnHAo<%JX%-?iRku^2w=d zTu$l*vB^$rw~^RyxBXY!tdsiFuWKvM zU-P`W@5Cg5r~6K9U0kFgR(4wZ^Xl$*cjmHx&dbcKOiX?Ea8H%2`~71~yiKc~x-`}= ze^YXB`|B;UjMD8oI-*~>yyl8{f9uvl>sKC)o&HVr=Z{7_Z!f%+=52{DJo zuAKPyC_3ts{lo`FCybUF{7`6h?5y%RWu4;vQ*VcYgUE;d<)2@y-ZX`&!y>2ge%Owk zX~zV+?wG&mu&oejSjN=5dC~{nUrLYL9VJ5-=GA9EkChTT!TBjw(%@dw+|BL3bno(4 z->B-}w=rK~{g&`9{)nn)ee&&J*%PgO#100n*yg{_v9(Gps!n;`)RF_&OOC%6;(YJ! zKW)Cr!I$3W|NH6(+;)D==Dc3??9cU+7br7V{^0q3>+e(Rd!Oe1{#<^24|_Mi`1L(k zkFtOE&b~KyYW>fh^5<-4{XP}_Z(;S%6Kftm{37Er_c-Hh1%$qQ`;Iu!(k7fIx zI>&5c+`FmnKURI1>#dMovbgcOVMJVqK$oBD z^Y@#3_WxkW_ka0;r-Ywb>e=l6i1f2A_ix-a4%3lPmQx>d~92 z7ysl(T@b4l^@)7n{iA#S#*~!xTCA_6sx}H;`?vQ;kws$Sf!$xYuFjuxbneuxy$NhN ziMAb&XBy1=82#d3&iR(PlJ#sK&Y#m^Efn&|IlO`^%_`7H`1`KA9*O1Qt%4EV8E(=) zE1pfhd27WqA$wa^$D?=W1t~nYufOE3Q6hQwA7q2b)`;p-Tly^9kw83$%B*k zxb9s3tgU@o``(?qyFag9eQ)p2rAL2OuY7s*c43!W#Qv&}n;nj7cqMliZhNoP#o+WY zRNZuAi@8~&+){W{J?F&k|5`jOGguwl9RCY1;fg=Lv3A3kA159%I@^n% zsb9Q!)f5vJ!HUjTnhr}V=l}C9>dy3E6A-&NAU60stD|98!=<@r@_q~4iQMYja7FFj zvevXqN=@2ZK4=|U9dEnH**+>#?U3D^`W<^dO+EC3`OlNA+21}#ZCQAU|ME4*pwP?< zmyQ3=7X7bX)b@p?H0AlJz#v|IR(H)KzO#Rce33m+-};07P1nXBnqvPgzBuHG3e2f_ z{y$-+d+)prC$*E$Wo!+4_$oc)*v$+64}E;atT^5a&3Ng!%I(GU%xyc~DyDPBw){_R zeg3xKmF2%FlY_1)JUs898^o;gV~6u4Bc3ylr~KHy=0xJE`NF}|Mc5vAb8~N%emCRa z{<}Hf_PeQi9Qa&cZ@WwRroq426FyDidcRg+=PyIQwQ0f{U)KkOT$O#ZKIL!R_Jt>6 z1bjb;mig-En8&miwJW?t;gu-l~?}H}7uP z$Ju=7^{z1MS4SHU{aGY+bZ>&Iha8LT2Nk(nPk;a9ywjEtynE{Qz@^DwcvjbZ(B8Cw zt^T8F0pI_w&iR{8o?7vFUGhJ9W(`# zD9t*~%D|A#Gx12lYjEoJ=TopCx6^y!=xoRS%0rBc>*i7<>|TVs19SfT16a5#G&l3`jF4;HC8Bo8+1 zkPMS`3RvXAAtkV3{ob0c51APl(%2Xn)KLuc%$ls2sR?tI=V2M9{5-JMn!^yk9+qKp zD+G&NISg@`{IdAQv&;+(iR|cxeJlqnyjLayGtm2p3=?w=SoA}cC`@$W5g8``7O<#I zGdN7ZuH2>PbEJfmfk8$b-ODnaV8xsrVlX3oj><4yp9B`IKMMBtf}=7_i)VmECQKKc N{N$(ro6ByHUjgQ)R1yFH delta 6827 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