Um dies zu tun, müssen Sie multiprocessing
verwenden, mit dem Sie Prozesse erstellen und zuweisen Prozeduren zu ihnen. Hier ist ein Code-Schnipsel, die Teil tut, was Sie wollen:
#!/usr/bin/env python3
from datetime import datetime
MAX_NUM = 10000000
NUMPROCS = 1
# LINEAR VERSION
start_time = datetime.now()
my_sum = 0
counter = 1
while counter <= MAX_NUM:
my_sum += counter
counter += 1
end_time =datetime.now()
print (my_sum)
print('Time taken : {}'. format(end_time-start_time))
# THREADING VERSION
from multiprocessing import Process, Queue
start_time = datetime.now()
def sum_range(start,stop,out_q):
i = start
counter = 0
while i < stop:
counter += i
i += 1
out_q.put(counter)
mysums = Queue()
mybounds = [1+i for i in range(0,MAX_NUM+1,int(MAX_NUM/NUMPROCS))]
myprocs = []
for i in range(NUMPROCS):
p = Process(target=sum_range, args=(mybounds[i],mybounds[i+1],mysums))
p.start()
myprocs.append(p)
mytotal = 0
for i in range(NUMPROCS):
mytotal += mysums.get()
for i in range(NUMPROCS):
myprocs[i].join()
print(mytotal)
end_time =datetime.now()
print('Time taken : {}'. format(end_time-start_time))
Obwohl der Code adaptiv nicht-Prozessoren verwenden, ist es die Aufgabe in einer vorgegebenen Anzahl von Prozessen nicht teilt.
Dies ist der Fehler, den ich bekomme, wenn ich es starten Runtime: Ein Versuch, einen neuen Prozess zu starten, bevor der aktuelle Prozess seine Bootstrapping Phase vorgenommen wurde beendet. Das bedeutet wahrscheinlich, dass Sie sich nicht mit Gabel sind Ihre Child-Prozesse zu starten und Sie haben die richtige Idiom im Hauptmodul zu verwenden, vergessen: wenn __name__ == ‚__main__‘: freeze_support() ... Die Zeile "freeze_support()" kann weggelassen werden, wenn das Programm nicht eingefroren wird, um eine ausführbare Datei zu erzeugen. –