我有一個嵌套的循環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核心上運行快得多。但我得到了類似的結果。任何形式的幫助,將不勝感激。
是隊列也許線程隊列(導入隊列),而不是多一? (來自多進程導入隊列) –
我仍然在學習自己的多處理技術,但是如果您使用的是多線程技術,那麼我認爲處理器中心任務在速度上沒有任何優勢。我知道你說過你曾經使用過泳池,但也許再看看它。 –
@HugoWalter沒有它的非導入隊列 –