Załóżmy, że pracujesz z jakimś ciałem, któremu nie możesz zaufać, czy istnieje sposób na bezpieczne działanie bez utraty kontroli nad scenariuszem?Jak bezpiecznie uruchomić nierzetelny kawałek kodu?
Przykładem może być funkcja, która działa tylko przez pewien czas i może się nie udać losowo/spektakularnie, jak można spróbować ponownie, dopóki nie zadziała? Próbowałem hakowania przy użyciu modułu wątków, ale miałem problem z porządnym zabiciem zwiniętego wątku.
#!/usr/bin/env python
import os
import sys
import random
def unreliable_code():
def ok():
return "it worked!!"
def fail():
return "it didn't work"
def crash():
1/0
def hang():
while True:
pass
def bye():
os._exit(0)
return random.choice([ok, fail, crash, hang, bye])()
result = None
while result != "it worked!!":
# ???
Jak spektakularnie może nastąpić awaria kodu? Czy jest nawet bezpieczne, aby uruchomić go w tym samym interpreterze python, co Twój własny kod? Jeśli używa zepsutych rozszerzeń c (lub nadużywa niezłamanych) lub potencjalnie modyfikuje globale Pythona, może być konieczne uruchomienie go w zupełnie innym interprerze pythona w podprocesie. –