python 的多線程有點雞肋,適用場景有局限,單位時間多個核只能跑一個線程。
有泳池一個,四個泵,但只有一個人,一人只能開啟管理着其中一個,所以四個泵沒什么用。但是,如果泵的工作時間與冷卻恢復時間是1:3(感謝inoahx指出,已改),那么配置的利用率高達100%。
single.py
#!/usr/bin/python3 #-*- coding: utf-8 -*- # author:zhouchao # 功能:直接運行程序 計算時間 import threading import sys import math import time lists = []; 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 threading import sys import math import time lists = []; 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