python多线程有用吗_Python多线程理解
前言
在寫python爬蟲的時候遇到了多線程,使用多線程的目的是降低抓取時間。接著我接觸了一些IO概念,IO就是Input和Ouput,數據進出CPU的意思。
數據從網線或網卡進入CPU算Input(get請求得到源碼),反之就是Output,這是網絡IO。
數據從硬盤進入CPU也是Input,反過來就是Output(把數據write進文件),這是磁盤IO。
先不細究IO的原理,只需要知道有IO(IO密集型任務),就用python多線程,提高效率。
概念
怎么理解線程:
線程可以是一整個Py程序,也可以是Py文件里的一個函數。如果Py程序或者函數開始執行了,你也可以說線程開始執行了。
上個圖
接下來是并發和并行
python的多線程是并發還是并行呢? 答案是并發。
同一時間還是只干一件事,跟單線程沒什么兩樣,所以有大佬說python的多線程就雞肋。
不過.....對于IO密集型任務,會大概率遇到阻塞(等待),CPU等待的時候就不做事,相當于浪費了。這里使用多線程就有幫助。
掛起、競爭gil的操作是由系統調度的,我們不用管。掛起、競爭、另一個線程開始執行,這個過程會消耗一點時間,稱切換時間
若切換時間<
最后一個重要的概念是主線程、子線程
子線程其實就是你要并發(同一時間窗做很多次)的任務,比如get請求和write入文件。
這些任務一般都會寫進一個函數func或者類里面,然后兩步走
thread? =? Threading.Thread(target =函數func,args=(參數1,參數2)) #用Thread類包(封裝)起來
thread.start() #start之后就開始跑了
等待,還有一個東西Join()、setDaemon(True) 阻塞和守護線程
Join() == 當一些任務要先于另一些任務完成的時候,可以用
setDaemon? == 當你覺得一些線程不重要的時候,可以設置守護線程。
對于非守護線程,就算主線程執行完了,也要等非守護進程完成才能退出
實例:一個搶車票的例子
總結
以上是生活随笔為你收集整理的python多线程有用吗_Python多线程理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vs2013配置python_VS201
- 下一篇: xgboost算法_XGBoost算法可