python終止線(xiàn)程怎么解決 為什么我的python多線(xiàn)程不能交替運(yùn)行?
為什么我的python多線(xiàn)程不能交替運(yùn)行?不可以,python目前不適合多線(xiàn)程在多核上運(yùn)行。只能使用單核。如果需要多核,可以考慮多進(jìn)程模式。python selenium多線(xiàn)程怎么用?不同的線(xiàn)程創(chuàng)建不
為什么我的python多線(xiàn)程不能交替運(yùn)行?
不可以,python目前不適合多線(xiàn)程在多核上運(yùn)行。只能使用單核。如果需要多核,可以考慮多進(jìn)程模式。
python selenium多線(xiàn)程怎么用?
不同的線(xiàn)程創(chuàng)建不同的驅(qū)動(dòng)程序,或者它們可以創(chuàng)建相同的驅(qū)動(dòng)程序。
python的優(yōu)點(diǎn)不包括什么?
Python的優(yōu)勢(shì)不包括以下內(nèi)容:
多線(xiàn)程和速度
Python 的整體性能較慢,有限的線(xiàn)程和多處理能力是其未來(lái)發(fā)展的主要障礙。
Python長(zhǎng)期以來(lái)重視編程的容易程度,而不是運(yùn)行時(shí)的速度。當(dāng)你通過(guò)用C或C寫(xiě)的高速外部庫(kù)(比如Numpy和Numba)在Python中完成這么多性能密集型的任務(wù)時(shí),你會(huì)發(fā)現(xiàn)Python注重編程的易用性,這也是一個(gè)不錯(cuò)的選擇。然而,Python 的開(kāi)箱即用性能還是落后于其他語(yǔ)言,比如Nim和Julia,它們的語(yǔ)法一樣簡(jiǎn)單,但是可以編譯成機(jī)器碼,具有更高的性能優(yōu)勢(shì)。
Python可以 不能充分利用多核處理器,這是一個(gè)由來(lái)已久的問(wèn)題。它確實(shí)有線(xiàn)程功能,但是它的線(xiàn)程功能僅限于單核。盡管Python可以使用多個(gè)流程,但是調(diào)度和同步這些子流程的結(jié)果并不總是有效的。
打包和可執(zhí)行文件
即使在Python 的誕生,Python仍然沒(méi)有很好的方法生成可執(zhí)行文件(
Python多進(jìn)程和多線(xiàn)程是雞肋嘛?
什么是線(xiàn)程?你為什么想要它?本質(zhì)上,Python是一種線(xiàn)性語(yǔ)言,但是當(dāng)你需要更多的處理能力時(shí),線(xiàn)程模塊就會(huì)派上用場(chǎng)。Python中的線(xiàn)程雖然不能用于并行CPU計(jì)算,但是非常適合Web抓取等I/O操作,因?yàn)樘幚砥魇强臻e的,在等待數(shù)據(jù)。
線(xiàn)程改變了游戲規(guī)則,因?yàn)樵S多與網(wǎng)絡(luò)/數(shù)據(jù)I/O相關(guān)的腳本花費(fèi)大部分時(shí)間等待來(lái)自遠(yuǎn)程源的數(shù)據(jù)。因?yàn)橄螺d可能沒(méi)有鏈接(即抓取一個(gè)單獨(dú)的網(wǎng)站),所以處理器可以從不同的數(shù)據(jù)源并行下載,最后合并結(jié)果。對(duì)于CPU密集型進(jìn)程,使用線(xiàn)程模塊沒(méi)有什么好處。
幸運(yùn)的是,標(biāo)準(zhǔn)庫(kù)中包含了線(xiàn)程:
可以使用targ:,這基本上是一種確保嵌入其中的代碼只有在腳本直接運(yùn)行(而不是導(dǎo)入)的情況下才能運(yùn)行的方法。
鎖你通常希望你的線(xiàn)程能夠使用或修改線(xiàn)程間的公共變量,但是要做到這一點(diǎn),你必須使用一個(gè)叫做鎖的東西。每當(dāng)一個(gè)函數(shù)試圖修改一個(gè)變量時(shí),它就鎖定它。當(dāng)另一個(gè)函數(shù)想要使用一個(gè)變量時(shí),它必須等到該變量被解鎖。
想象兩個(gè)函數(shù)迭代變量1。使用鎖可以確保一個(gè)函數(shù)可以訪(fǎng)問(wèn)變量、執(zhí)行計(jì)算并寫(xiě)回變量,然后另一個(gè)函數(shù)才能訪(fǎng)問(wèn)同一個(gè)變量。
使用線(xiàn)程模塊時(shí),打印時(shí)也會(huì)發(fā)生這種情況,因?yàn)槲谋究赡軙?huì)變得混亂(并導(dǎo)致數(shù)據(jù)損壞)。您可以使用打印鎖來(lái)確保一次只能打印一個(gè)線(xiàn)程。
在這里,我們有10項(xiàng)工作要做,5名工人將完成這項(xiàng)工作。
多線(xiàn)程并不總是完美的解決方案。我發(fā)現(xiàn)許多指導(dǎo)者傾向于忽略使用他們剛剛試圖教你的工具的負(fù)面影響。理解使用所有這些工具有利也有弊是很重要的。例如:
與管理線(xiàn)程相關(guān)的開(kāi)銷(xiāo)很高,所以您不需要。;t不想用它做基本任務(wù)(比如例子);
它增加了程序的復(fù)雜性,這將使調(diào)試更加困難。
什么是多重處理?和螺紋有什么區(qū)別?如果沒(méi)有多重處理,Python程序?qū)⒉荒茏畲蠡到y(tǒng)的規(guī)格,因?yàn)镚IL(全局解釋器鎖定)。在設(shè)計(jì)Python時(shí),沒(méi)有考慮到個(gè)人計(jì)算機(jī)可能有多個(gè)內(nèi)核(向您展示了該語(yǔ)言的時(shí)代),所以GIL是必要的,因?yàn)镻ython不是線(xiàn)程安全的,并且在訪(fǎng)問(wèn)Python對(duì)象時(shí)有一個(gè)全局強(qiáng)制鎖。雖然它并不完美,但它是一種非常有效的內(nèi)存管理機(jī)制。我們能做什么?
多重處理允許你創(chuàng)建可以同時(shí)運(yùn)行的程序(繞過(guò)GIL)并使用整個(gè)CPU內(nèi)核。雖然和線(xiàn)程庫(kù)有本質(zhì)的區(qū)別,但是語(yǔ)法非常相似。多處理庫(kù)為每個(gè)進(jìn)程提供了自己的Python解釋器和GIL。
因此,與線(xiàn)程相關(guān)的常見(jiàn)問(wèn)題(如數(shù)據(jù)損壞和死鎖)不再是問(wèn)題。因?yàn)檫M(jìn)程不共享內(nèi)存,所以它們不能同時(shí)修改同一個(gè)內(nèi)存。
讓 開(kāi)始:如果您有一個(gè)共享數(shù)據(jù)庫(kù),請(qǐng)確保在開(kāi)始一個(gè)新進(jìn)程之前等待相關(guān)進(jìn)程完成。
如果您想向進(jìn)程傳遞參數(shù),可以使用args。
這是一個(gè)簡(jiǎn)明的例子,因?yàn)槟鷷?huì)注意到數(shù)字并沒(méi)有按照您期望的順序排列。
像線(xiàn)程一樣,多重處理也有它的缺點(diǎn)...您必須選擇它:
數(shù)據(jù)在進(jìn)程間的隨機(jī)移動(dòng)會(huì)導(dǎo)致I/O開(kāi)銷(xiāo)。整個(gè)內(nèi)存被復(fù)制到每個(gè)子進(jìn)程,這可能會(huì)給更重要的程序造成大量開(kāi)銷(xiāo)。你應(yīng)該用什么?如果你的代碼有很多I/O或網(wǎng)絡(luò)使用:
多線(xiàn)程是您的最佳選擇,因?yàn)槿绻蠫UI,它的開(kāi)銷(xiāo)非常低。
多線(xiàn)程,所以你的UI線(xiàn)程不會(huì)被鎖定。如果您的代碼受到CPU的限制:
你應(yīng)該使用多重處理(如果你的電腦有多個(gè)核心)。