新年快樂呀javascript
前幾天看到一段js代碼,腦洞屬實夠大。java
const original = [3, 1, 15, 2, 9, 6, 3, 2, 7, 1] const result = [] original.forEach(n => setTimeout(() => result.push(n), n))
以上代碼利用setTimeout()
函數,對於要排序的數組,根據不一樣的數值在不一樣的線程中休眠不一樣時間在push
進結果中,以此來實現排序。python
這種排序算法被稱爲「睡眠排序」。試着用Python來寫個多線程程序玩一下。算法
import time, threading original = [3, 1, 15, 2, 9, 6, 3, 2, 7, 1] result = [] # 存儲線程實例的列表 pool = [] # 睡眠後append def sleepSort(num): time.sleep(num) result.append(num) # 建立多個線程 for i in range(len(original)): t = threading.Thread(target=sleepSort, args=(original[i],)) pool.append(t) for t in pool: t.start() for t in pool: t.join() print(result)
我沒有對源數據作任何處理就將其作爲time.sleep()
的參數了,因此這個時間花費嘛,嘿嘿,娛樂娛樂就行數組
另外,threading
模塊中還有個Timer
類,其第一個參數接收一個數值爲指定的定時時間,其他地方和Thread
同樣,時間到後再調用要執行的function
。改寫的代碼以下:多線程
import time, threading original = [3, 1, 15, 2, 9, 6, 3, 2, 7, 1] result = [] pool = [] def sleepSort(num): time.sleep(num) result.append(num) for num in original: t = threading.Timer(num, sleepSort, args=(num,)) pool.append(t) for t in pool: t.start() for t in pool: t.join() print(result)