任務調度並行演算法的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文件處理
TAG:Python |