Python多執行緒多程序和線性執行的比較

2021-08-08 04:05:35 字數 3778 閱讀 7514

在程式設計人生中,一定會遇到計算時間過長的問題,這個時候提高演算法效率就成了必然。有幾種方法:演算法優化、激發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 ...