frage zu: threading

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
taake
User
Beiträge: 125
Registriert: Donnerstag 14. Oktober 2010, 08:49

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?
Zuletzt geändert von Anonymous am Freitag 24. August 2012, 14:14, insgesamt 1-mal geändert.
Grund: Syntaxhervorherbung aktiviert
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
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‽
taake
User
Beiträge: 125
Registriert: Donnerstag 14. Oktober 2010, 08:49

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.
schaeffkoch
User
Beiträge: 38
Registriert: Dienstag 21. August 2012, 10:59

Set Types — set, frozenset

oder

list
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Hier solltest du _immer_ zuerst suchen http://docs.python.org/library/ und schon stoesst man auf http://docs.python.org/library/stdtypes ... -frozenset
taake
User
Beiträge: 125
Registriert: Donnerstag 14. Oktober 2010, 08:49

Sieht interessant aus, heute wieder was gelernt.

Vielen Dank dafür.
Antworten