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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

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

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

想要提高程序的運行速度----->提高cpu利用率。

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

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

2、cpu都是分核。每個核就是一個小腦袋。可以理解一心多用。讓每個核都作用起來,去干不同的事情,這種方法是就叫多進程。

一、程序、線程、進程

1、程序:一個應用就可以理解為一個程序。

2、進程:程序運行資源分配的最小單位,一個程序可以有多個進程。

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

二、什么是多線程?

程序中包含多個并行的線程來完成不同的任務。

三、python中的threading模塊

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

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

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

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

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

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

可迭代對象:有__iter__屬性的對象。

迭代器:有__iter___和__next__屬性的對象。

這兩個如何轉化:迭代器=iter(可迭代對象)

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

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

(1)python的繼承

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

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

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

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

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

①繼承threading.Thread

②重寫run方法:

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

t = MyThread()

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

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

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

super().__init__()

threading.Tread.__init__(self)

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

如果沒有給線程自定義名稱,默認線程的名稱是: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ù)的共享問題

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

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

多線程避免多個線程同時處理公有變量。——解耦。

1 importthreading2

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

4

5 if mutex.acquire(): #上鎖

6

7 '''

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

mutex.release()#釋放鎖

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

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

四、多進程和多線程

1、并發(fā)和并行

2、多線程和多進程的優(yōu)缺點

多線程

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

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

線程方式消耗的總資源比進程方式少。

(2)多線程缺點

程序邏輯和控制方式復雜。

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

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

多進程

(1)多進程優(yōu)點

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

通過增加cup,可以輕松擴展性能。

每個子進程都有2GB地址空間和相關資源,總體性能能夠達到的上限非常大。

(2)多進程的缺點

邏輯控制復雜,需要和主程序交互。----進程之間通信是很困難度。

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

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

五、死鎖

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

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

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

總結

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

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