0

我有一個嵌套的循環for形式Python的多處理速度問題

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 

的現在,這通常需要大約50多歲執行。 而且我已將此循環更改爲多處理代碼。

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() 

這多碼還需要大約50多歲的執行時間。這意味着兩者之間沒有時間差異。

我也嘗試過使用池。我也管理了塊大小。我已經通過其他計算器搜索並搜索。但找不到任何滿意的答案。

我能找到的唯一答案是在流程管理中花費的時間使得結果相同如果這是原因,那麼我如何才能獲得多處理工作以獲得更快的結果?

從Python實現的C會給出更快的結果嗎?

我並不期待會有太大的結果,但根據常識,人們可以說在4核心上運行應該比在1核心上運行快得多。但我得到了類似的結果。任何形式的幫助,將不勝感激。

+0

是隊列也許線程隊列(導入隊列),而不是多一? (來自多進程導入隊列) –

+0

我仍然在學習自己的多處理技術,但是如果您使用的是多線程技術,那麼我認爲處理器中心任務在速度上沒有任何優勢。我知道你說過你曾經使用過泳池,但也許再看看它。 –

+0

@HugoWalter沒有它的非導入隊列 –

回答

0

您似乎在使用線程隊列(來自隊列導入隊列)。這並不如預期般工作,如法使用fork()和它克隆整個隊列到每個工作進程

使用:

from multiprocessing import Queue

+0

我已經從多進程導入隊列中完成不導入隊列 –