python 的多線程執行速度


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 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM