在程式設計人生中,一定會遇到計算時間過長的問題,這個時候提高演算法效率就成了必然。有幾種方法:演算法優化、激發cpugpu的力量等。
我現在分享關於python多執行緒多程序的方式和心得,用於激發電腦效能。
from threading import thread
任何優化方式都有自己的侷限性,python3由於gil鎖機制的問題,在多執行緒方面對於一大部分情況效果不好。但是對於網路程式設計方面,多執行緒卻是乙個非常好的優化手段!注意上述一句話!!!!!!!!!!!!
多執行緒使用過程中,開啟任務管理器可以看到大量記憶體被消耗。
使用方式:
temp=thread(target=function,args)
temp.start
()
from multiprocessing import process
多執行緒是一張桌子好幾個人圍著坐,多程序則是好多張桌子大家一起坐。顯然多程序取決於電腦cpu的效能,也就是核數。使用過程中,開啟任務管理器可以看到cpu處於100%狀態。
使用方式:
temp=process(target=function,args)
temp.start
()
常見的順序執行**
為了更直觀地體會到三者的區別和優勢,舉個例子,從結果中感受差別。
# 三種測試函式
#(1)定義cpu密集計算函式
defcount
(x,y):
#使程式完成150萬次計算
c=0while c<500000:
c+=1
x+=1
y+=1
#(2)定義io密集的檔案讀寫函式
defwrite
(): f=open('test.txt','w')
for x in range(500000):
f.write("testwrite\n")
f.close()
defread
(): f=open('test.txt','r')
f.readlines()
f.close()
defio
(): write()
read()
#(3)定義網路請求函式
return
注意理解cpu密集運算、io密集運算和網路運算的意義,這三者對應了大多數的專案需求。
為了減少**量,定義測試函式,可以理解為泛型程式設計的思想。
#(x)定義測試函式
deftest
(testname='thread',number=10,way=thread,function=none,args=()):
counts=
t=time.time()
#保證預設值
if function==none:
defdie():
i=1000
return i
function=die
pass
#開啟多執行緒或多程序
for x in range(number):
temp=way(target=function,args=args)
temp.start()
#等待演算法停止,注意這是比較不好的方式,可以用強制殺死
e=counts.__len__()
while e:
for th in counts:
ifnot th.is_alive():
counts.remove(th)
e=counts.__len__()
#列印出演算法執行時間
print("%s %s : %s"%(way.__name__,testname,(time.time()-t)))
#(5)測試線性執行io密集操作、cpu密集操作所需時間、網路請求密集型操作所需時間
if __name__=='__main__':
#io密集型操作
t=time.time()
for x in range(50):
io()
print("line io: %s"%(time.time()-t))
#cpu密集型操作
t=time.time()
for x in range(50):
count(1,1)
print("line cpu: %s"%(time.time()-t))
#網路請求密集型操作
#(6)測試多執行緒執行io密集操作、cpu密集操作所需時間、網路請求密集型操作所需時間
#(7)測試多程序執行io密集操作、cpu密集操作所需時間、網路請求密集型操作所需時間
process http request : 8.39150881767273
很顯然,可以看到python多執行緒在網路請求方面的優勢,同時多程序在io、cpu方面的特點。唯物主義辯證思想告訴我們具體問題具體分析~~~所以我們在學會上述方式後,根據專案需求選擇合理的解決方式,那會變得非常有趣!
丁。
python 多執行緒 和 多程序
單執行緒例子 usr bin python coding utf 8 name danxiancheng.py import time import threading def loop num,sec print loop s start num,time.strftime y m d h m s...
python多執行緒和多程序
pool 感謝多執行緒和多程序最大的不同在於,多程序中,同乙個變數,各自有乙份拷貝存在於每個程序中,互不影響 而多執行緒中,所有變數都由所有執行緒共享,所以,任何乙個變數都可以被任何乙個執行緒修改,因此,執行緒之間共享資料最大的危險在於多個執行緒同時改乙個變數,把內容給改亂了。python中,多執行...
多程序和多執行緒python
coding utf8 import threading import time class mop floor threading.thread def init self super mop floor,self init def run self print 我要拖地了 time.sleep ...