新年快乐呀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)