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

2021-03-22 06:13:34 字數 3139 閱讀 8663

1樓:育知同創教育

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

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

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

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

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

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

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

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

python 是多執行緒還是多程序

3樓:育知同創教育

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

python 多執行緒效率不高嗎

4樓:育知同創教育

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

python 這樣寫多執行緒對嗎

5樓:育知同創教育

多執行緒供你參考

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"

6樓:匿名使用者

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

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

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

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

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

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

python怎樣使用多執行緒

8樓:雲南新華電腦學校

連線物件可以是同一個,指標不能是同一個。

假設conn是你的連線物件

每個執行緒使用cur=conn.cursor()來獲得指標。

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

9樓:育知同創教育

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

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

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

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

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

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

簡單的總結一下。

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

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

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

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

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

的多執行緒中,如何去判斷給定的類是否是執行緒安全

程式次序規則 一個執行緒內,的執行會按照程式書寫的順序管程鎖定原則 對同一變數的unlock操作先行發生於後來的lock操作 volatile變數規則 對一個volatile的寫操作先行發生於後來的讀操作 執行緒啟動原則 thread的start 先行發生於執行緒內的所有動作執行緒終止原則 執行緒內...

c語言開發中,linux下的多執行緒和網路程式設計基礎,這些都有什麼用處?做什麼工作會用這多執行緒和socket呢

socket,主要是在網路開發應用中運用的到,多執行緒,在linux開發中單程序中可以建立多執行緒去處理不同的任務。這個很常用的。主要做網路方面的。網路產品一般都會有用到 比如 路由器 ap ac等等吧。多執行緒程式設計和socket是開發網路產品的基本功,把 unix網路程式設計 看會就可以做一般...

ios怎麼設定多執行緒的優先順序,怎樣設定spring bean裝配的優先順序

ios 設定多執行緒的優先順序的方法 thread nsthread alloc initwithtarget self selector selector runthread object nil void runthread 怎樣設定spring bean裝配的優先順序 在spring中,那些組...