標籤:col fun ini odi cal 有一個 運行程式 multi time()
python 的多線程有點雞肋,適用情境有局限,單位時間多個核只能跑一個線程。
有泳池一個,四個泵,但只有一個人,一人只能開啟管理著其中一個,所以四個泵沒什麼用。但是,如果泵的工作時間與冷卻恢復是1:3(感謝inoahx指出,已改),那麼配置的利用率高達100%。
直接運行代碼single.py
#!/usr/bin/python3#-*- coding: utf-8 -*-# author:zhouchao# 功能:直接運行程式 計算時間import threadingimport sysimport mathimport timelists = [];for x in range(1,10000000): lists.append(x);length = len(lists);for x in range(600): step = math.ceil(float(length)/600) minIndex = step * x if minIndex + step > length : maxIndex = length else: maxIndex = minIndex+step print(lists[minIndex:maxIndex]) datetime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) fileObject = open("time1.txt",‘a+‘); fileObject.write(str(datetime)+"\n"); fileObject.close();
所需時間:134 s
開600 個線程運行同一代碼
multiThread.py
#!/usr/bin/python3#-*- coding: utf-8 -*-# author:zhouchao# 功能:600線程計算執行時間import threadingimport sysimport mathimport timelists = [];for x in range(1,10000000): lists.append(x);def function(i): global lists length = len(lists); step = math.ceil(float(length)/600) minIndex = step * i if minIndex + step > length : maxIndex = length else: maxIndex = minIndex+step print(lists[minIndex:maxIndex]) datetime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) # datetime = str(lists[minIndex:maxIndex]) fileObject = open("time2.txt",‘a+‘); fileObject.write(str(datetime)+"\n"); fileObject.close();threads = []for i in range(600): t = threading.Thread(target=function , args=(i,)) threads.append(t) t.start() t.join()
所需時間:160 s
python 的多線程執行速度