Okay. Ich habe nach etwas spielen festgestellt, dass es egal ist, was das für Threads sind. Ich habe das so gelöst:
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)
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.