Seite 1 von 1

frage zu: threading

Verfasst: Freitag 24. August 2012, 12:34
von taake
Moin,
ich hab ein kleines Problem, bzw. wohl eher ein Verständnissproblem, da ich das erste mal mit threads arbeite.
Folgendes Problem, da inotify leider nicht funktioniert, muss ich das ganze von hand machen.
Also Ordner auf veränderung (neue Dateien) kontrollieren.

Hier mal der probleme bereitene Ausschnitt:

Code: Alles auswählen

#!/usr/bin/python2.7

import time
import os
from thread import start_new_thread

def folderwatch ( dest, folder, path ):
        path_to_watch = dest
        before = dict ([(f, None) for f in os.listdir (path_to_watch)])
        while true:
                time.sleep (10)
                after = dict ([(f, None) for f in os.listdir (path_to_watch)])
                added = [f for f in after if not f in before]
                if added: print "Added: ", ", ".join (added)
#              if added: send_e_mail ( folder, ", ".join (added), path )
                before = after

try:
        start_new_thread(folderwatch,('/tmp/test1/','Test 1','none',))
        start_new_thread(folderwatch,('/tmp/test2/','Test 2','none',))
except:
        print "Unable to start thread"
Eigentlich bin ich der Meinung alles so gemacht zu haben wie ich es in Tuts gefunden habe, allerdings passiert genau nichts wenn ich das script starte, es beendet sich ohne jede Rückmeldung.
Kann mir jemand sagen was hier falsch läuft?
Eigentlich möchte ich nur das er mir solange das Script gestartet ist die Veränderungen in den angegebenen Ordnern überwacht.
So wie es aussieht wird folderwatch() aber gar nicht aufgerufen.
Kann mir Jemand sagen was ich übersehen / falsch gemacht habe?

Re: frage zu: threading

Verfasst: Freitag 24. August 2012, 12:42
von EyDu
Ich habe mir nicht genau deinen Code angeschaut, aber threads haben eine join-Methode, welche du nach dem starten der Threads aufrufen solltest. Dann wird so lange gewartet, bis der Thread abgearbeitet ist. Du erreichst also wahrscheinlich eher das Ende des Programms, als dass in einen Thread eingestiegen wird.

Außerdem solltest du ganz dringend das except ohne eine konkrete Fehlerangabe entfernen. Das ist immer eine unerschöpfliche Quelle von seltsamen Fehlern, welche schwer zu finden sind. Du solltest daher nur die Fehler bearbeiten, mit denen du auch umgehen kannst. In allen anderen Fällen solltest du froh sein, dass dein Programm mit einer hilfreichen Fehlermeldung abschmiert und nicht so etwas Allgemeinem wie "Unable to start thread". Dein Programm befindet sich in einem solchen Fehlerfall eh in einem nicht merh konsistenten Zustand und sollte nicht weiter arbeiten.

Re: frage zu: threading

Verfasst: Freitag 24. August 2012, 13:35
von BlackJack
@taake: Das `thread`-Modul ist „deprecated” und sollte nicht mehr verwendet werden.

Ausserdem solltest Du Dir mal den Datentyp `set` anschauen.

Ich verstehe nicht warum `dest` nicht gleich `path_to_watch` heisst in der Argumentliste‽

Re: frage zu: threading

Verfasst: Freitag 24. August 2012, 14:03
von taake
Danke für die Hilfe, konnte das Problem mitlerweile lösen, die join-methode hat geholfen.

http://www.artfulcode.net/articles/mult ... ng-python/ < da hab ichs mir abgeschaut, wenns wen interessiert.

Ausserdem solltest Du Dir mal den Datentyp `set` anschauen.
Sagt mir gar nichts, finde da auch gerade keine Infos zu, nehm also gerne ein Link zum Thema.

Re: frage zu: threading

Verfasst: Freitag 24. August 2012, 14:11
von schaeffkoch
Set Types — set, frozenset

oder

list

Re: frage zu: threading

Verfasst: Freitag 24. August 2012, 14:12
von cofi
Hier solltest du _immer_ zuerst suchen http://docs.python.org/library/ und schon stoesst man auf http://docs.python.org/library/stdtypes ... -frozenset

Re: frage zu: threading

Verfasst: Freitag 24. August 2012, 14:24
von taake
Sieht interessant aus, heute wieder was gelernt.

Vielen Dank dafür.