0

Ich habe eine verschachtelte for Schleife der FormPython Multiprocessing Geschwindigkeit Ausgabe

while x<lat2[0]: 
    while y>lat3[1]: 
     if (is_inside_nepal([x,y])): 
      print("inside") 
     else: 
      print("not") 
     y = y - (1/150.0) 
    y = lat2[1] 
    x = x + (1/150.0) 
#here lat2[0] represents a large number 

Jetzt normalerweise diese um 50er Jahre nimmt zur Ausführung. Und ich habe diese Schleife in einen Multiprozesscode geändert.

def v1find_coordinates(q): 
    while not(q.empty()): 

    x1 = q.get() 
    x2 = x1 + incfactor 
    while x1<x2: 
     def func(x1): 
      while y>lat3[1]: 
       if (is_inside([x1,y])): 
        print x1,y,"inside" 
       else: 
        print x1,y,"not inside" 
       y = y - (1/150.0) 

     func(x1) 
     y = lat2[1] 
     x1 = x1 + (1/150.0) 

incfactor = 0.7 
xvalues = drange(x,lat2[0],incfactor) 
#this drange function is to get list with increment factor as decimal 
cores = mp.cpu_count() 
q = Queue() 
for i in xvalues: 
    q.put(i) 
for i in range(0,cores): 
    p = Process(target = v1find_coordinates,args=(q,)) 
    p.start() 
    p.Daemon = True 
    processes.append(p) 
for i in processes: 
    print ("now joining") 
    i.join() 

Dieser Code Multiprozessing nimmt auch um 50s Ausführungszeit. Dies bedeutet, gibt es keinen Unterschied der Zeit zwischen den beiden.

Ich habe auch versucht, Pools zu verwenden. Ich habe auch die Chunk-Größe gemanagt. Ich habe gegoogelt und andere stackoverflow durchsucht. Kann aber keine befriedigende Antwort finden.

Die einzige Antwort, die ich finden konnte, war Zeit wurde in Prozess-Management genommen, um beide das Ergebnis gleiche. Wenn dies der Grund ist, wie kann ich dann die Multiprozessing-Arbeit erhalten, um schnellere Ergebnisse zu erhalten?

Wird die Implementierung in C von Python schnellere Ergebnisse liefern?

Ich erwarte keine drastischen Ergebnisse, aber mit gesundem Menschenverstand kann man sagen, dass das Laufen auf 4 Kernen viel schneller sein sollte als das Laufen in 1 Kern. Aber ich bekomme ähnliche Ergebnisse. Jede Art von Hilfe wäre willkommen.

+0

ist Queue vielleicht ein Thread-Warteschlange (Queue einspielen) anstelle eines Multiprocessing ein? (aus der Multiprocessing-Import-Queue) –

+0

Ich lerne immer noch selbst Multiprocessing, aber ich habe gelesen, dass prozessorzentrierte Tasks nichts an Geschwindigkeit gewinnen, wenn Sie Multithreading verwenden. Ich weiß, dass du gesagt hast, du hättest vorher schon einmal Billard gespielt, aber vielleicht nochmal nachsehen. –

+0

@HugoWalter Nein, es ist nicht Import Queue –

Antwort

0

Sie scheinen eine Thread-Warteschlange zu verwenden (aus Queue Import Queue). Dies funktioniert nicht wie erwartet als Prozess verwendet fork() und klont die gesamte Warteschlange in jedem Arbeitsprozess-

Verwendung:

from multiprocessing import Queue

+0

Ich habe von Multiprocessing Import Queue nicht Import-Warteschlange getan –