為什麼有人說Python的多執行緒是雞肋

2021-03-04 06:16:06 字數 2987 閱讀 1913

1樓:育知同創教育

差不多是這樣子。多執行緒目前僅用於網路多執行緒採集, 以及效能測試。

其它的語言也有類似的情況,執行緒本身的特點導致執行緒的適用範圍是受限的。只有cpu過剩,而其它的任務很慢,此時用執行緒才是有益的,可以很好平衡等待時間,提高併發效能。

執行緒的問題主要是執行緒的安全穩定性。執行緒無法強制中止,同時執行緒與主程序共享記憶體,可能會影響主程序的記憶體管理。

在python裡執行緒出問題,可能會導致主程序崩潰。 雖然python裡的執行緒是作業系統的真實執行緒。

那麼怎麼解決呢?通過我們用程序方式。子程序崩潰後,會完全的釋放所有的記憶體和錯誤狀態。所以程序更安全。 另外通過程序,python可以很好的繞過gil,這個全域性鎖問題。

但是程序也是有侷限的。不要建立超過cpu總核數的程序,否則效率也不高。

簡單的總結一下。

當我們想實現多工處理時,首先要想到使用multiprocessing, 但是如果覺著程序太笨重,那麼就要考慮使用執行緒。 如果多工處理中需要處理的太多了,可以考慮多程序,每個程序再採用多執行緒。如果還處理不要,就要使用輪詢模式,比如使用poll event, twisted等方式。

如果是gui方式,則要通過事件機制,或者是訊息機制處理,gui使用單執行緒。

所以在python裡執行緒不要盲目用, 也不要濫用。 但是執行緒不安全是事實。如果僅僅是做幾個後台任務,則可以考慮使用守護執行緒做。

如果需要做一些危險操作,可能會崩潰的,就用子程序去做。 如果需要高度穩定性,同時併發數又不高的服務。則強烈建議用多程序的multiprocessing模組實現。

在linux或者是unix裡,程序的使用代價沒有windows高。還是可以接受的。

python 為什麼多執行緒會造成資料不准

2樓:深圳中宇視通科技****

如果你的**是cpu密集型,多個執行緒的**很有可能是線性執行的。所以

這種情況下多執行緒是雞肋,效率可能還不如單執行緒因為有context switch 但是:如果你的**是io密集型,多執行緒可以明顯提高效率。例如製作爬蟲

python 多執行緒效率不高嗎

3樓:育知同創教育

python由於有全鎖局的存在(同一時間只能有乙個執行緒執行),並不能利用多核優勢。所以,如果你的多執行緒程序是cpu密集型的,那多執行緒並不能帶來效率上的提公升,相反還可能會因為執行緒的頻繁切換,導致效率下降;如果是io密集型,多執行緒程序可以利用io阻塞等待時的空閒時間執行其他執行緒,提公升效率。

python 這樣寫多執行緒對嗎

4樓:育知同創教育

多執行緒供你參考

import threading

import time

exitflag = 0

class mythread (threading.thread):

def __init__(self, threadid, name, counter):

threading.thread.__init__(self)

self.threadid = threadid

self.name = name

self.counter = counter

def run(self):

print "starting " + self.name

print_time(self.name, 5, self.counter)

print "exiting " + self.name

def print_time(threadname, counter, delay):

while counter:

if exitflag:

threadname.exit()

time.sleep(delay)

print "%s: %s" % (threadname, time.ctime(time.time()))

counter -= 1

# create new threads

thread1 = mythread(1, "thread-1", 1)

thread2 = mythread(2, "thread-2", 2)

# start new threads

thread1.start()

thread2.start()

print "exiting main thread"

5樓:匿名使用者

拋開gil的問題 你這個是單執行緒的 當然和沒有用執行緒寫法一樣

但是如果你想要的是併發的話 不僅需要多程序 而且你也不能把open函式寫在執行體裡 各個併發部分會重複建立覆蓋這個檔案的..

python 是多執行緒還是多程序

6樓:育知同創教育

多執行緒的,程序是乙個任務,執行緒才是執行任務的最小單位。

python的多執行緒使用setdaemon有什麼意義

7樓:深圳中宇視通科技****

因為python的全域性直譯器鎖的機制, 導致python的多執行緒並不是真正的多執行緒, 效率上不僅不會比單執行緒快,反而可能更慢, 所以說是雞肋,要求速度好話,可以用多程序來實現

python的多執行緒使用setdaemon有什麼意義

8樓:育知同創教育

使用setdaemon()和守護執行緒這方面知識有關, 比如在啟動執行緒前設定thread.setdaemon(true),就是設定該執行緒為守護執行緒,

表示該執行緒是不重要的,程序退出時不需要等待這個執行緒執行完成。

這樣做的意義在於:避免子執行緒無限死迴圈,導致退不出程式,也就是避免樓上說的孤兒程序。

thread.setdaemon()設定為true, 則設為true的話 則主線程執行完畢後會將子執行緒**掉,

設定為false,主程序執行結束時不會**子執行緒

為什麼CAD使用多段線很卡,用CAD多段線畫線時 線寬變成很粗的 請問怎麼設定為預設的細線

機子的顯示卡復 太低了。2010以後的制版本,加進去很多bai 對工程制du圖來說基本沒用的新zhi功能,犧牲的dao是執行速度。在檔案裡圖元非常多的情況下,反映速度很慢,尤其是選中幾千個圖元時。建議安裝2006或2008,現有的2013可以用來降低圖紙版本,比如接到高階別版本建立的圖紙,先用201...

為什麼有人說我帥,有人說我醜,為什麼班上有人說我長的帥,有人說我長的一般,有人說我醜

現在什麼人都有 喜歡你的人就說你帥 不喜歡你的人 你長的在帥在他的眼裡也是醜的 沒辦法人就是這樣 她們處在不同的立場看你,結果不同 because 別人妒忌你唄 情況一 你本來抄長得帥,bai可是不會打扮。情況二 你本來du長得不怎樣,可是很zhi會打扮。情況三dao 你長相不美不醜,說你帥的覺得你...

為什麼說60日線是多空交鋒的重要指針線

分短期5日線,中期30日 長期60日線,為什麼都可以稱為多空角逐線呢?原因就是當以上任何乙個 走平,如30日線,證明多空在30個交易日內雙方成本一樣,每次起飛都是 走平然後帶量突破,突破的方向決定了哪一方力量更大,為什麼帶量呢?是因為不管空頭多頭要獲利都得需要錢,這樣成交才能活躍。所以對長線來講就是...