- Skript gesendet vom Benutzer, < /li>
RO K8S < /code> Pod für Ausführung des Benutzerskripts (mit Wrapper -Skript unten) In Manager, - Die Ausführung des Skripts in Pod beginnen und bis zum Ende/Zeitübergang warten,
- Return Exec -Ergebnis (Was ist in STDOut , stderr ) + metriken an Manager,
- Prozessausgabe im Manager,
- POD löschen (AVG -Lebensdauer von Pod IS 1..7S ),
- Die verarbeitete Ausgabe als JSON an den Benutzer zurückgeben,
Problem ist, ich möchte nicht nur Um das Skript selbst auszuführen, aber auch Ressourcen zu zeigen, die mehr oder weniger genau verwendet haben. Die einfachste Lösung wäre, Zeit zu schreiben. > Die tatsächliche Skriptausführungszeit ist x% niedriger. Gleiches gilt für die Verwendung von Ressourcen lib. subprocess.run ?
Code: Select all
import time, resource, subprocess, sys, json
start = time.time()
timeout = 5 # 5 seconds exec timeout
exit_code = 0
try:
# /scripts/script.py - with actual user code, its resource usage I want to measure
result = subprocess.run(['python', '/scripts/script.py'],
timeout=timeout,
check=True,
capture_output=True,
text=True)
print(result.stdout, end='')
if result.stderr:
print(result.stderr, file=sys.stderr, end='')
except subprocess.TimeoutExpired:
exit_code = 124
except subprocess.CalledProcessError as e:
if e.stdout:
print(e.stdout, end='')
if e.stderr:
print(e.stderr, file=sys.stderr, end='')
exit_code = e.returncode
end = time.time()
elapsed = end - start
usage = resource.getrusage(resource.RUSAGE_CHILDREN)
cpu_time_used = usage.ru_utime + usage.ru_stime
cpu_usage_m = (cpu_time_used / elapsed) * 1000 if elapsed > 0 else 0
memory_used_mi = usage.ru_maxrss / 1024.0
metrics = {{
"execution_time": round(elapsed, 2), # in seconds
"cpu_usage": round(cpu_usage_m, 2), # in m
"memory_usage": round(memory_used_mi, 2), # in Mi
"exit_code": exit_code
}}
print("\\n###METRICS###")
print(json.dumps(metrics))
sys.exit(0)
< /code>
Zusätzlicher Kontext: < /p>
Ich bin kein großer Fan von Bash -Programmierung mit Mist wie $ {14+ 15}