日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python结束进程树_【python爬虫】线程进程

發(fā)布時(shí)間:2023/12/15 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python结束进程树_【python爬虫】线程进程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

關(guān)注:程序運(yùn)行速度---->主要是由cpu(大腦)來決定。

想要提高程序的運(yùn)行速度----->提高cpu利用率。

提高cpu的利用率由兩種途徑:

1、讓cpu不休息。cpu每時(shí)每刻都在處理任務(wù),這個(gè)任務(wù)可以理解為線程。這種情況就叫做多線程。

2、cpu都是分核。每個(gè)核就是一個(gè)小腦袋??梢岳斫庖恍亩嘤谩W屆總€(gè)核都作用起來,去干不同的事情,這種方法是就叫多進(jìn)程。

一、程序、線程、進(jìn)程

1、程序:一個(gè)應(yīng)用就可以理解為一個(gè)程序。

2、進(jìn)程:程序運(yùn)行資源分配的最小單位,一個(gè)程序可以有多個(gè)進(jìn)程。

3、線程:cpu最小的調(diào)度單位,必須依賴進(jìn)程存在。線程是沒有獨(dú)立資源的,所有的線程共享他所在進(jìn)程的所有資源。

二、什么是多線程?

程序中包含多個(gè)并行的線程來完成不同的任務(wù)。

三、python中的threading模塊

1、創(chuàng)建多線程的第一種方法

1 t =threading.Thread(2 target =方法名,3 args = (,) #參數(shù)列表,元組

4 )5 t.start() #啟動(dòng)線程

2、查看線程的數(shù)量:threading.enumerate()

1 enumerate(2 可迭代對(duì)象,3 i, #表示索引從i開始。

4 ) #python的內(nèi)置函數(shù):枚舉可迭代對(duì)象,同時(shí)獲取迭代對(duì)象的每個(gè)值和其索引。

可迭代對(duì)象:有__iter__屬性的對(duì)象。

迭代器:有__iter___和__next__屬性的對(duì)象。

這兩個(gè)如何轉(zhuǎn)化:迭代器=iter(可迭代對(duì)象)

可迭代對(duì)象都有:list,tuple,dict,str,bytesarray,set,fp

3、創(chuàng)建第二種方法:自定線程類

(1)python的繼承

①繼承是通過在定義類的時(shí)候,類后面的()中添加父類來實(shí)現(xiàn)的。

②被繼承的類稱為父類,繼承的類稱為子類。

③子類繼承父類所有非私有的屬性及方法。

④如果子類重寫父類的屬性和方法,子類默認(rèn)是優(yōu)先拿自己的。

(2)用自定義線程的步驟

①繼承threading.Thread

②重寫run方法:

③實(shí)例化這個(gè)類,就相當(dāng)于創(chuàng)建了一個(gè)線程。

t = MyThread()

t.start()---默認(rèn)執(zhí)行就是run方法里面的內(nèi)容。

④如果自定義線程要傳參數(shù),這時(shí)候必須要寫init方法。必須在init中先調(diào)用父類的init(初始化父類。)

(3)調(diào)用父類的init方法有兩種方法

super().__init__()

threading.Tread.__init__(self)

4、線程的名稱:線程.name查看線程的名稱

如果沒有給線程自定義名稱,默認(rèn)線程的名稱是:Thread-1,Thread-2,....

自定義名稱:

t = MyThread(name=str(i))

t.start()

5、線程的五種狀態(tài)

線程的執(zhí)行順序是混亂:線程是cup調(diào)度的最小單位,線程的執(zhí)行完全是由cpu調(diào)度所決定的。cpu如何來調(diào)度呢?是由線程狀態(tài)決定。

6、線程間公用數(shù)據(jù)的共享問題

多個(gè)線程多全局變量的更改,容易造成數(shù)據(jù)的混亂。

解決辦法:將線程對(duì)公有數(shù)據(jù)更改部分,用互斥鎖鎖起來,這兩就可以解決這種問題。

多線程避免多個(gè)線程同時(shí)處理公有變量?!怦睢?/p>

1 importthreading2

3 mutex = threading.Lock() #創(chuàng)建一個(gè)鎖對(duì)象

4

5 if mutex.acquire(): #上鎖

6

7 '''

8 公有數(shù)據(jù)的處理代碼9 '''

mutex.release()#釋放鎖

mutex.acquire(True):默認(rèn)情況就是True,線程到鎖這里如果沒有獲取鎖狀態(tài),就會(huì)被阻塞。

mutex.acquire(False):線程到鎖這里如果沒有獲取鎖狀態(tài),不會(huì)被阻塞。

四、多進(jìn)程和多線程

1、并發(fā)和并行

2、多線程和多進(jìn)程的優(yōu)缺點(diǎn)

多線程

(1)多線程的優(yōu)點(diǎn)

所有線程可以直接共享內(nèi)存和變量,線程之間的通信變得容易。

線程方式消耗的總資源比進(jìn)程方式少。

(2)多線程缺點(diǎn)

程序邏輯和控制方式復(fù)雜。

線程之間的同步和加鎖比較麻煩。

一個(gè)線程崩潰可能影響到整個(gè)程序的穩(wěn)定性。

多進(jìn)程

(1)多進(jìn)程優(yōu)點(diǎn)

每個(gè)進(jìn)程都相互獨(dú)立,不影響主程序的穩(wěn)定性,子進(jìn)程崩潰,主程序收到影響比較小。

通過增加cup,可以輕松擴(kuò)展性能。

每個(gè)子進(jìn)程都有2GB地址空間和相關(guān)資源,總體性能能夠達(dá)到的上限非常大。

(2)多進(jìn)程的缺點(diǎn)

邏輯控制復(fù)雜,需要和主程序交互。----進(jìn)程之間通信是很困難度。

如果有大量數(shù)據(jù)傳送,需要跨進(jìn)程邊界。適合小數(shù)量數(shù)據(jù)傳送的程序。

多進(jìn)程和多線程如何選擇:在實(shí)際開發(fā)中,選擇多線程還是多進(jìn)程,應(yīng)該從具體實(shí)際開發(fā)來進(jìn)行選擇。最好是多進(jìn)程和多線程結(jié)合,即根據(jù)實(shí)際的需求,每個(gè)cpu開啟一個(gè)子進(jìn)程,這個(gè)子進(jìn)程開啟多個(gè)線程進(jìn)程數(shù)據(jù)處理。

五、死鎖

產(chǎn)生死鎖的兩中情況

1、同一個(gè)線程,先后獲取兩次鎖對(duì)象,就會(huì)產(chǎn)生死鎖。

2、A獲取鎖1,B獲取鎖2,A在不釋放鎖1的情況試圖獲取鎖2,B在不釋放鎖2的情況下試圖獲取鎖1,此時(shí)就會(huì)產(chǎn)生死鎖。

總結(jié)

以上是生活随笔為你收集整理的python结束进程树_【python爬虫】线程进程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。