當前位置:
首頁 > 最新 > 任務調度並行演算法的Python簡單實現

任務調度並行演算法的Python簡單實現

本來自己想先使用Java來寫一個版本,然後根據語法轉義寫成Python版本的,結果發現實際去做的時候有很多不同之處,首先就是Python中沒有直接的數組的結構,入手點就不同,然後是API的使用程度上來看,發現Python中真是豐富,幾乎都不需要再額外定製一些函數就可以輕鬆得到想要的結果。

Python版本的初版如下,我在考慮是否要引入第二維度作為參考,根據額外的維度來達到一種彈性的調度策略。

importrandom

ARRAY_SIZE =10

defrandom_int_list(start,stop,length):

start,stop = (int(start),int(stop))ifstart

length =int(abs(length))iflengthelse

random_list = []

foriinrange(length+1):

random_list.append(random.randint(start,stop))

returnrandom_list

random_list = random_int_list(1,100,ARRAY_SIZE)

print(random_list)

random_list.sort(reverse=1)

print(random_list)

GRP_NO =4

array_group = [[]*1foriinrange(GRP_NO)]

printarray_group

sum_value_array = []

foriinrange(GRP_NO):

sum_value_array.append(i)

print(sum_value_array)

foriinrandom_list[1:ARRAY_SIZE+1]:

print(i)

array_sum_group=[]*GRP_NO

forindex,valinenumerate(random_list[1:GRP_NO+1]):

#print "index is %d, val is %d" % (index,val)

array_group[index][]=val

array_sum_group[index]=val

print(array_sum_group,array_sum_group.index(min(array_sum_group)))

print(random_list)

forindex,valinenumerate(random_list[GRP_NO+1:]):

#print "index is %d, val is %d" % (index,val)

min_group_no = array_sum_group.index(min(array_sum_group))

array_group[min_group_no].append(val)

array_sum_group[min_group_no] += val

print("array_group",array_group)

print("array_sum_group",array_sum_group)

先看看目前的實現結果吧。如果是100個元素,分為4組,元素的分布還算比較平均。

("array_group",[[84,24,21],[73,51,3],[63,62],[63,61]])

("array_sum_group",[129,127,125,124])

這在元素的量級比較大的時候,效果就很明顯了,比如元素是1000個,分為4組,得到的每組的結果集都是非常平均的。

("array_sum_group",[12951,12951,12951,12951])

如果元素為1000,並行度為10,結果還不賴,達到了自己的初步預期了。

("array_sum_group",[4877,4876,4876,4876,4876,4876,4876,4876,4876,4876])


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

人工智慧時代來臨 學Python開發技術應時代趨向
Python文件處理

TAG:Python |