Seite 1 von 1

threads in python benutzen

Verfasst: Freitag 19. Oktober 2007, 14:36
von stugi82
Hallo,

ich habe folgende Frage: ich möchte eine Funktion eines Moduls aus einem Thread aufrufen und mache das etwas so:

Code: Alles auswählen

import threading
import modul

class thread(threading.Thread):
    
    def __init__(self):
        threading.Thread.__init__(self, name="FirstThread")

    def run(self):
        modul.methode(Parameter,...)

thread=thread()
thread.start()


tut aber nicht :(

als Fehler kommt:

NameError: global name 'Parameter' is not defined

und das obwohl ich das Modul importiert hab.

EDIT by Gerold: Code in Code-Tags gesetzt

Verfasst: Freitag 19. Oktober 2007, 14:52
von Leonidas
Hallo stugi82, willkommen im Forum,

Natürlich kommt da ein Fehler. Wo soll denn ``Parameter`` her kommen? Das ist genauso als würdest du ``print das_ist_ein_beliebiger_name`` ausgeben - es ist nicht definiert. Also musst du den Parameter erstmal definieren.

Re: threads in python benutzen

Verfasst: Freitag 19. Oktober 2007, 15:27
von keppla
stugi82 hat geschrieben:[...]und das obwohl ich das Modul importiert hab.
Das klingt für mich danach, dass du "Parameter" im modul definiert hast.

Wenn Parameter in modul definiert wurde (also in modul.py etwa

Code: Alles auswählen

Parameter = x
steht) musst du ihn entweder explizit importieren:

Code: Alles auswählen

from modul import Parameter
oder auf ihn übers modul zugreifen:

Code: Alles auswählen

modul.function(modul.Parameter)
Sollte er nicht im modul definiert sein, vergiss dieses Post :)

PS: das ganze ginge auch simpler so:

Code: Alles auswählen

from threading import Thread
import modul

t = Thread(name='FirstThread', target=modul.methode, args=(Parameter, ...))
t.start()

Verfasst: Montag 22. Oktober 2007, 07:48
von stugi82
Danke für die Antworten, das Problem war aber ein anderes. Natürlich waren die Parameter definiert und auch importiert. Es lag viel mehr daran, dass die Parameter zur Laufzeit teilweise noch nicht initialisiert waren. Muss ein ziemlich unübersichtliches Prog. warten, da kann man das schon mal übersehen und die Compiler-Meldung war auch nicht gerade hilfreich...