Wie kann man unzuverlässiges Stück Code sicher ausführen?

8

Angenommen, Sie arbeiten mit einem bodigen Code, dem Sie nicht vertrauen können. Gibt es eine Möglichkeit, den Code sicher auszuführen, ohne die Kontrolle über Ihr Skript zu verlieren?

Ein Beispiel könnte eine Funktion sein, die nur zeitweise funktioniert und zufällig / spektakulär ausfallen kann. Wie können Sie es wiederholen, bis es funktioniert? Ich habe versucht, mit dem Threading-Modul zu hacken, hatte aber Schwierigkeiten, einen aufgehängten Thread sauber zu töten.

%Vor%     
wim 21.03.2012, 11:13
quelle

3 Antworten

4

Sie können versuchen, es in einer Sandbox auszuführen.

    
root 21.03.2012, 12:08
quelle
5

Um sicher gegen Ausnahmen zu sein, verwenden Sie try / except (aber Sie wissen das).

Um vor hängendem Code (Endlosschleife) sicher zu sein, muss ich den Code nur in einem anderen Prozess laufen lassen. Dieser Kindprozess kann vom Vaterprozess aus beendet werden, falls er nicht bald genug beendet wird.

Um vor bösartigem Code sicher zu sein (Dinge tun, die es nicht tun sollte), schauen Sie sich Ссылка an.

    
Alfe 21.03.2012 11:21
quelle
4

In Ihrer realen Anwendung können Sie zu Multiprocessing wechseln? Weil es scheint, dass das, was Sie fragen, mit multiprocessing + threading.Timer + try/except .

Sieh dir das an:

%Vor%

Das gab mir in einem (glücklichen) Fall:

%Vor%

In Ihren Code-Samples haben Sie 4 von 5 Chancen, einen Fehler zu erhalten, also können Sie auch einen Pool oder etwas spawnen, um Ihre Chancen auf ein korrektes Ergebnis zu verbessern.

    
Rik Poggi 21.03.2012 13:08
quelle