Ich habe ein Skript und möchte, dass eine Funktion gleichzeitig mit der anderen ausgeführt wird.
Der Beispielcode, den ich mir angesehen habe:
import threading
def MyThread (threading.thread):
# doing something........
def MyThread2 (threading.thread):
# doing something........
MyThread().start()
MyThread2().start()
Ich habe Probleme damit. Ich würde es vorziehen, dies mit einer Thread-Funktion anstelle einer Klasse in Gang zu bringen.
Dies ist das Arbeitsskript:
from threading import Thread
class myClass():
def help(self):
os.system('./ssh.py')
def nope(self):
a = [1,2,3,4,5,6,67,78]
for i in a:
print i
sleep(1)
if __name__ == "__main__":
Yep = myClass()
thread = Thread(target = Yep.help)
thread2 = Thread(target = Yep.nope)
thread.start()
thread2.start()
thread.join()
print 'Finished'
python
multithreading
chrissygormley
quelle
quelle
exiting
alsexciting
, was ich sowieso für angemessener hielt.Es gibt einige Probleme mit Ihrem Code:
Wenn Sie dies wirklich nur mit Funktionen tun möchten, haben Sie zwei Möglichkeiten:
Mit Einfädeln:
Mit Faden:
Dokument für thread.start_new_thread
quelle
thread.start_new_thread(function, args[, kwargs])
Ich habe versucht, einen weiteren Join () hinzuzufügen, und es scheint funktioniert zu haben. Hier ist Code
quelle
Sie können das
target
Argument imThread
Konstruktor verwenden, um direkt eine Funktion zu übergeben, die anstelle von aufgerufen wirdrun
.quelle
Haben Sie die run () -Methode überschrieben? Wenn Sie überschrieben haben
__init__
, haben Sie sichergestellt, dass Sie die Basis anrufenthreading.Thread.__init__()
?Funktioniert der Hauptthread nach dem Starten der beiden Threads weiterhin auf unbestimmte Zeit / blockiert / verbindet die untergeordneten Threads, sodass die Ausführung des Hauptthreads nicht endet, bevor die untergeordneten Threads ihre Aufgaben abgeschlossen haben?
Und schließlich, bekommen Sie unbehandelte Ausnahmen?
quelle
__init__
. Ist run () dann erforderlich? Dankedef MyThread ( threading.thread )
... Ich habe angenommen, dass dies Klassendefinitionen sind. Wenn Sie threading.thread in eine Unterklasse verschieben und das Thread-Objekt mittarget=None
demtarget
Argument initialisieren oder weglassen möchten, ist eine Implementierung von run () erforderlich. Wenn Sie andernfalls nur eine einfache Aufgabe in einem anderen Thread ausführen möchten, lesen Sie die Antwort von jkp.Python 3 bietet die Möglichkeit, parallele Aufgaben zu starten . Dies erleichtert unsere Arbeit.
Es hat für Thread-Pooling und Prozess-Pooling .
Folgendes gibt einen Einblick:
ThreadPoolExecutor-Beispiel
Ein anderes Beispiel
quelle