Ich versuche, den Unterschied in der Zeit der Ausführung zu finden, wie ich die Anzahl der Threads erhöhen. Im Grunde möchte ich herausfinden, wie lange die äußere Schleife benötigt, um nach Abschluss der Jobs in allen Threads in dieser Schleife ausgeführt zu werden.Finde die Ausführungszeit nach der Ausführung mit N Threads
import threading
import time
from math import sqrt
def run(start, end):
[sqrt(i) for i in range(start,end)]
n_threads = 2
n_vals = 1000000
start_time = time.time()
for n_threads in range(1,11):
start_time = time.time()
for i in range(0,n_threads):
first = int((n_vals/n_threads)*i)
last = int((n_vals/n_threads)*(i+1))
t=threading.Thread(target=run, args=(first,last))
t.start()
print("For Threads = "+ str(n_threads) +" --- %s seconds ---" % (time.time() - start_time))
Dies ist ein einfaches Programm, um den Job zu gleichen Teilen zwischen Threads aufgeteilt, wo n_threads ist die Anzahl der threads.I die Ausführungszeit, wenn n_threads finden will = 1,2 .... 10. In meinem gegenwärtigen Code glaube ich jedoch nicht, dass ich die Zeit bekomme, nachdem alle Threads ausgeführt wurden, sondern die Zeit wird parallel gegeben, während der Rest der Threads ausgeführt wird. Wie behebe ich das?
Ein Problem mit dem, was Sie versuchen, ist Python hat eine globale Interpreter-Sperre (GIL). Was das im Grunde bedeutet, ist, dass Ihr Programm tatsächlich nur die Threads verschachtelt und keine echte Nebenläufigkeit ausführt. Sie werden keine Beschleunigung erleben. Sie können stattdessen versuchen, die Multiprocessing-Bibliothek zu verwenden. – Strikeskids
Gibt es noch eine Möglichkeit, den Zeitpunkt zu finden, an dem eine Gruppe von Threads in einer Iteration ihre Ausführung beendet hat? – Muhammad