[Python-de] threads

Christian Heimes christian at python.org
Di Sep 25 14:09:08 CEST 2012


Am 25.09.2012 13:52, schrieb Diez Roggisch:
> Angehalten oder abgebrochen? Wenn letzteres, dann vielleicht doch besser
> über das Modul multiprocessing gehen + einfach den Subprozess töten.
> 
> Und in Antwort auf deine andere Mail: nein, ich habe da keinen
> Beispielcode, und ich zweifele auch ein bisschen an der Durchführbarkeit.
> 
> Eine Garantie für dieses Verhalten kann es letztlich auch mit dem GIL
> nicht geben, denn wie gesagt - wenn du dich da in einem C-Callstack
> befindest, dann hat das GIL da keinen Einfluss mehr.

Diez hat absolut recht.

Das gewünschte Verhalten ist mit threads nicht umsetzbar. Wenn du einen
Programmablauf zu jeder Zeit, sofort und zuverlässig beenden willst,
dann musst du einen weiteren Prozess verwenden. Nicht mal
pthread_cancel() oder pthread_kill() garantieren ein verlässliches und
zeitnahes beenden eines Threads. Mal abgesehen davon, dass bei
pthread_kill() dein Programm in einem undefinierten Zustand hängen wird.

Dein Problem ist unabhängig von Python und ist auch mit reinem C-Code
nicht umsetzbar. Selbst bei Prozessen geht es mit SIGTERM, SIGKILL,
SIGSTOP / SIGCONT nicht zuverlässig synchron.

Christian




Mehr Informationen über die Mailingliste python-de