Supongamos que está trabajando con un pedazo de código que no puede confiar, ¿hay alguna forma de ejecutarlo de manera segura sin perder el control de su script?¿Cómo ejecutar de forma segura una pieza de código no confiable?
Un ejemplo podría ser una función que solo funciona algunas veces y puede fallar al azar/espectacularmente, ¿cómo podría volver a intentarlo hasta que funcione? Intenté algunas intrusiones con el uso del módulo de subprocesamiento, pero tuve problemas para eliminar perfectamente un hilo colgado.
#!/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!!":
# ???
¿Qué tan espectacularmente se puede bloquear el código? ¿Es incluso seguro ejecutarlo en el mismo intérprete de Python que tu propio código? Si usa extensiones c rotas (o usa mal las que no están rotas), o potencialmente modifica las globales de python, puede que tenga que ejecutarlo en un intérprete de Python completamente diferente en un subproceso. –