Python爬蟲的多線程使用方法
1.構造線程
構建新的線程有兩種方法,一種是直接通過Thread方法構建一個線程,另一種時通過繼承Thread類,重寫run()方法構建。
Thread(group=None,target=None,name=None,args=(),kwargs={})
groups :線程組,這個暫時不用管,官方文檔是這樣說的:“group should be None”,所以我們可以不寫就行。
target :我們要使用線程的方法
name :線程名
args/kwargs :傳給方法的參數。要注意,如果只有一個參數,元組記得加個“,”,否則就會報錯。
2.其他實例方法
setDaemon(bool) :設置守護線程,參數默認為False,如果需要設置,則設置為True,將子線程設置成守護線程后,主線程結束,無論守護線程是否執行完畢,守護線程和主線程一起停止。看一下下面這個示例就知道了。
守護線程有兩種設置方法,守護線程一定要在線程執行前設置,否則無效。主任務結束后,守護線程其實還沒有結束,但也一起隨主線程結束了。
start() :這個不用再多介紹了,就是啟動線程
join(timeout) :這個就是為了防止主線程直接結束,先阻塞當前進程,直到調用這個方法的進程終止,或者達到設置的可選參數timeout時限。
setName(anme)/getName(name) :設置/獲取線程名字
isAlive() :返回線程是否在運行。
enumerate() :返回正在運行的線程名
activeCount() : 返回正在運行的線程數
3.鎖,可重入鎖
具體方法如下:
acquire([timeout]): 請求獲得鎖定。使線程進入同步阻塞狀態。
release(): 釋放鎖。使用前線程必須已獲得鎖定,否則將拋出異常。
關于線程的鎖的案例,這里給出一個簡單的指令鎖的示例,主要看下,鎖的作用。
簡單的線程代碼如下:
import time
import threading
def spider(a):
print("啟動任務")
print(f"執行的參數為{a}")
time.sleep(5)
print(f"結束任務{a}")
print('已經結束任務')
def main():
start_time = time.time()
for i in range(1,5):
s1 = threading.Thread(target=spider, args=(i,))
s1.start()
# 等待兩個子線程結束再結束主線程
s1.join()
end_time = time.time()
total_time = end_time - start_time
print(f"所有任務結束,總耗時為:{total_time}")
main()
到這里已經簡單的介紹完畢。
Python 任務調度 多線程
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。