Versuchen, meinen Kopf um Threading zu bekommen. In meinem Code feuert es nur einen Thread, wenn ich denke, dass es direkt zum zweiten gehen sollte. Ich habe über Sperren und Zuteilung gelesen, verstehe sie aber nicht ganz. Was müsste ich hier tun, um 2 Threads unabhängig voneinander laufen zu lassen?Verständnis Threading
Antwort
Sie haben die Signatur start_new_thread
falsch. Sie rufen myproc
an und übergeben das Ergebnis als Argument an start_new_thread
, was nie passiert, da myproc
nie beendet wird.
Stattdessen sollte es sein:
thread.start_new_thread(myproc, (thing,))
Das erste Argument ist die Funktion (dh die Funktion Objekt, nicht die Funktion aufrufen.) Und das zweite ist ein Tupel von Argumenten.
See: https://docs.python.org/2/library/thread.html#thread.start_new_thread
Sobald Sie Ihr Programm haben beide Threads tatsächlich beginnen, möchten Sie wahrscheinlich eine Pause am Ende hinzugefügt werden, da die Fäden bei der Haupt-Thread beendet beendet wird.
Verwenden Sie auch das Modul threading
anstelle des Moduls thread
, da es eine viel nettere Schnittstelle auf höherer Ebene bietet, z. B. eine bequeme Möglichkeit zu warten, bis die Ausführung der Threads abgeschlossen ist.
See: https://docs.python.org/2/library/threading.html#module-threading
Das Skript beendet auch, bevor die Threads die Möglichkeit haben, etwas zu drucken –
Das ursprüngliche Skript in der Frage nicht - es kam nicht so weit wie das Starten der Threads. Aber ja, das ist ein Problem, wenn Sie das ursprüngliche Problem beheben. – SpoonMeiser
Brilliant - das macht Sinn! – user4893295
Ihre Anwendung beendet, bevor der zweite Thread Zeit hatte zu beenden, was ich sagen kann.
Sie müssen für beide Threads warten beenden, bevor die Anwendung beendet wird, wie folgt aus:
#!/usr/bin/python
import thread
import time
# Define a function for the thread
def print_time(threadName, delay):
count = 0
while count < 5:
time.sleep(delay)
count += 1
print "%s: %s" % (threadName, time.ctime(time.time()))
# Create two threads as follows
try:
thread.start_new_thread(print_time, ("Thread-1", 2,))
thread.start_new_thread(print_time, ("Thread-2", 4,))
except:
print "Error: unable to start thread"
while 1: # This is a bad solution due to the busy wait loop. More below.
pass
Sie sollten die Thread-Objekte vorzugsweise speichern und thread1.join()
und thread2.join()
am Ende verwenden, vor dem Beenden, dass zu signalisieren Sie haben beide gekündigt.
Das ist auch nützlich - wie würde ich die Threads speichern, wenn sie in einer Schleife erstellt werden? Ich müsste irgendwie die Variable "Sache" in den Instanznamen bringen? – user4893295
@ user4893295 Siehe diese Seite http://www.tutorialspoint.com/python/python_multithreading.htm unter "Thread mit Threading-Modul erstellen" für Informationen zum Speichern eines Thread-Objekts! – Zolomon
- 1. Verständnis
- 2. Threading/Synchronisation
- 3. Threading Implementierung
- 4. Multi Threading
- 5. Threading iPhone
- 6. Java Swing Threading
- 7. Verständnis von os.fork und Queue.Queue
- 8. Generator Verständnis und Liste Verständnis iterieren anders
- 9. List Verständnis Verständnis Fehler von Python Debugger
- 10. Frage über asynchrone Programmierung, Threading in. NET
- 11. Popen.communicate Verständnis
- 12. Verständnis SFINAE
- 13. fft Verständnis
- 14. Verständnis reduzieren()
- 15. Verständnis DelayedInit
- 16. Verständnis URLConnection.setReadTimeout()
- 17. Verständnis Testsuites
- 18. Verständnis StateMonad
- 19. Verständnis `getArgs`
- 20. Verständnis argmax
- 21. Verständnis AccessController.doPrivileged
- 22. Verständnis gc.get_referrers
- 23. Verständnis JavaScript
- 24. Verständnis Hashwertermittlung
- 25. Basic Java-Threading (4 Threads) langsamer als Non-Threading
- 26. mehrere Threading mit SurfaceView
- 27. Grundlegende Threading in Python
- 28. Definition von Multi-Threading
- 29. D-Bus Threading Modell
- 30. C# threading Verhalten
Sie werden tatsächliche und erwartete Ausgabe zeigen müssen für jemand in der Lage sein, Ihre Frage zu beantworten. –