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

歡迎訪問 生活随笔!

生活随笔

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

python

python中的多进程与多线程(二)

發布時間:2025/3/15 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中的多进程与多线程(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、使用多線程可以有效利用CPU資源,線程享有相同的地址空間和內存,這些線程如果同時讀寫變量,導致互相干擾,就會產生并發問題,為了避免并發問題,絕不能讓多個線程讀取或寫入相同的變量,因此python中使用了全局鎖(GIL),此鎖只有一個,當某線程執行某個函數時,其他線程不能同時執行,直到鎖被釋放(同時也要小心死鎖的情況),因此無論有多少個線程,同一時刻只有一個線程持有該鎖,也就是只能以單線程模式執行,因此代碼并不能在同時在多核上并發,多線程在python中只能交替執行,即使100個線程跑在100核CPU上,也只能用到一核。 2、GIL是Python解釋器設計的歷史遺留問題,通常我們用的解釋器是官方實現的CPython,要真正利用多核,除非重寫一個不帶GIL的解釋器。所以,在Python中,可以使用多線程,但不要指望能有效利用多核。如果一定要通過多線程利用多核,那只能通過C擴展來實現,不過這樣就失去了Python簡單易用的特點。 3、不過,Python雖然不能利用多線程實現多核任務,但可以通過多進程實現多核任務,并實現真正意義上的并發。多個Python進程有各自獨立的GIL鎖,互不影響。但是,進程的開銷比線程大,如果有較多并發進程的話,不建議。 4、由于線程享有相同的地址空間和內存,所以線程間通信非常容易,進程間通信復雜,常見進程間通信有:管道(Pipes)、消息隊列(Queue)、socket接口(TCP/IP)(麻煩)等,python的mutilprocess模塊提供了封裝好的管道和隊列,可以方便的在進程間通信,python進程間的同步使用鎖,這點和線程一樣。 5、計算密集型:不適合用多線程,因為要進行大量的計算,消耗CPU資源,雖然可以用多任務,但任務越多,花在任務切換的時間越多,CPU執行任務的效率越低,因此,代碼運行效率至關重要。Python這樣的腳本語言運行效率很低,完全不適合計算密集型任務。對于計算密集型任務,最好用C語言編寫; IO密集型:CPU消耗很少,大部分時間都在等待IO操作完成,執行任務期間,99%花在IO上,因此,對于IO密集型任務,最合適的語言就是開發效率最高(代碼量最少)的語言,腳本語言是首選,C語言最差,可以使用多線程,或者偽線程。 異步IO:考慮到CPU和IO之間巨大的速度差異,一個任務在執行的過程中大部分時間都在等待IO操作,單進程單線程模型會導致別的任務無法并行執行,因此,我們才需要多進程模型或者多線程模型來支持多任務并發執行。 現代操作系統對IO操作已經做了巨大的改進,最大的特點就是支持異步IO。如果充分利用操作系統提供的異步IO支持,就可以用單進程單線程模型來執行多任務,這種全新的模型稱為事件驅動模型,Nginx就是支持異步IO的Web服務器,它在單核CPU上采用單進程模型就可以高效地支持多任務。在多核CPU上,可以運行多個進程(數量與CPU核心數相同),充分利用多核CPU。由于系統總的進程數量十分有限,因此操作系統調度非常高效。用異步IO編程模型來實現多任務是一個主要的趨勢。 對應到Python語言,單線程的異步編程模型稱為協程,有了協程的支持,就可以基于事件驅動編寫高效的多任務程序。 6、進程由若干線程組成,一個進程至少有一個線程。 7、python標準庫提供了兩個模塊:thread和threading。thread是低級模塊,以Function作為線程的運行體;threading是高級模塊,基于對象,可以繼承Thread對象來實現線程,通常只需使用threading這個高級模塊。 8、進程 vs. 線程 多進程模式最大的優點就是穩定性高,因為一個子進程崩潰了,不會影響主進程和其他子進程。(當然主進程掛了所有進程就全掛了,但是Master進程只負責分配任務,掛掉的概率低)著名的Apache最早就是采用多進程模式。 多進程模式的缺點是創建進程的代價大,在Unix/Linux系統下,用fork調用還行,在Windows下創建進程開銷巨大。另外,操作系統能同時運行的進程數也是有限的,在內存和CPU的限制下,如果有幾千個進程同時運行,操作系統連調度都會成問題。 多線程模式通常比多進程快一點,但是也快不到哪去,而且,多線程模式致命的缺點就是任何一個線程掛掉都可能直接造成整個進程崩潰,因為所有線程共享進程的內存。在Windows上,如果一個線程執行的代碼出了問題,你經常可以看到這樣的提示:“該程序執行了非法操作,即將關閉”,其實往往是某個線程出了問題,但是操作系統會強制結束整個進程。

轉載于:https://www.cnblogs.com/chaofan-/p/8615724.html

總結

以上是生活随笔為你收集整理的python中的多进程与多线程(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。