@@ -107,7 +107,8 @@ def enter_cgroup(socket_path):
107107def _get_idle ():
108108 return float (read_text_file ('/proc/uptime' ).split ()[1 ])
109109
110- async def wait_cgroup (sock , execute_task , time_limit_ns , memory_limit_bytes , process_limit ):
110+ async def wait_cgroup (sock , execute_task , cpu_limit_ns , idle_limit_ns ,
111+ memory_limit_bytes , process_limit ):
111112 cgroup = CGroup ()
112113 try :
113114 cgroup .memory_limit_bytes = memory_limit_bytes
@@ -117,13 +118,16 @@ async def wait_cgroup(sock, execute_task, time_limit_ns, memory_limit_bytes, pro
117118
118119 while True :
119120 cpu_usage_ns = cgroup .cpu_usage_ns
121+ cpu_remain_ns = cpu_limit_ns - cpu_usage_ns
122+ if cpu_remain_ns <= 0 :
123+ return cpu_usage_ns , cgroup .memory_usage_bytes
120124 idle_usage_ns = int ((_get_idle () - start_idle ) / cpu_count () * 1e9 )
121- time_usage_ns = max (cpu_usage_ns , idle_usage_ns )
122- time_remain_ns = time_limit_ns - time_usage_ns
123- if time_remain_ns <= 0 :
124- return time_usage_ns , cgroup .memory_usage_bytes
125+ idle_remain_ns = idle_limit_ns - idle_usage_ns
126+ if idle_remain_ns <= 0 :
127+ return idle_usage_ns , cgroup .memory_usage_bytes
125128 try :
126- await wait_for (shield (execute_task ), (time_remain_ns + WAIT_JITTER_NS ) / 1e9 )
129+ await wait_for (shield (execute_task ),
130+ (min (cpu_remain_ns , idle_remain_ns ) + WAIT_JITTER_NS ) / 1e9 )
127131 return cgroup .cpu_usage_ns , cgroup .memory_usage_bytes
128132 except TimeoutError :
129133 pass
0 commit comments