Hallo,
Meine Situation:
Ich habe eine Funktion gebaut.
Diese möchte ich 'normal' aufrufen oder über einen thread starten.
Wie kann ich innerhalb der Funktion herausfinden ob ich mich im Main-Thread befinde oder nicht?
Main thread
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ich bin mir zwar nicht sicher ob es einen Unterschied macht, aber: nutzt du 'thread' Threads, oder welche von 'threading'?
Bin gerade am Spielen mit threading.enumerate()..
Bin gerade am Spielen mit threading.enumerate()..
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
wie wärs so:
Wenn du die Funktion als Thread startest setzt du By_Thread auf True.
Hab schon lange nichts mehr mit Threads gemacht, aber sollte funktionieren.
MfG
Andreas
Code: Alles auswählen
def dummy(My_Value, By_Thread = False):
pass
Hab schon lange nichts mehr mit Threads gemacht, aber sollte funktionieren.
MfG
Andreas
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Okay. Ich habe nach etwas spielen festgestellt, dass es egal ist, was das für Threads sind. Ich habe das so gelöst:
Also, wir brauchen erstmal das low-level thread, dann noch das high-level threading. time nehme ich nur, damit der Mainthread sich nicht vor dem zweiten Thread verabschiedet. Dann haben wir test(), dem es egal ist, ob man es aus dem Mainthread oder woandersher aufruft. Nun, jetzt gabe es zwei Möglichkeiten: entweder test() beim starten thread=True mit angeben, aber das ist ja nicht sehr elegant. Deswegen gucken wir mal per threading: threading.enumerate()[0] zeigt auf den Mainthread, es zeigt alle gestarteten Threads an, und Main sollte immer der erste in der Liste sein. Danach vergleichen wir, ob es threading.currentThread() ist. Finito!
Edit: Die erste, imho weniger elegante Lösung hat XT@ngel gerade gepostet, als ich den Text geschrieben habe.
Code: Alles auswählen
#!/usr/bin/env python
# -*- encoding: latin-1 -*-
import thread, threading, time
def test(wait):
time.sleep(wait)
isthread = threading.enumerate()[0] is not threading.currentThread()
print "Called from a thread: %s" % str(isthread)
test(1)
thread.start_new_thread(test, (2,))
time.sleep(4)
Edit: Die erste, imho weniger elegante Lösung hat XT@ngel gerade gepostet, als ich den Text geschrieben habe.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice