python這樣寫多執行緒對嗎Python多執行緒效率不高嗎

2021-03-07 07:13:22 字數 2993 閱讀 6213

1樓:育知同創教育

多執行緒供你參考

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"

2樓:匿名使用者

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

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

python 多執行緒效率不高嗎

3樓:育知同創教育

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

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

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

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

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

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

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

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

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

6樓:育知同創教育

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

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

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

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

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

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

7樓:育知同創教育

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

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

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

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

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

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

簡單的總結一下。

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

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

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

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

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

python 是多執行緒還是多程序

8樓:育知同創教育

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

python如何換行,python 寫程式碼怎麼換行,我用IDLE不會,ENTER就輸出了,用記事本只能儲存txt為什麼

七月的嘟嘟 1 首先執行終端或者cmd命令列 windows下 執行python3.5的命令。2 然後輸入如下圖所示的內容。4 在bash中執行如下命令,同樣可以執行。5 然後執行如下命令給t.py新增可執行許可權。chmod 755 t.py 如果是 內換行 就好了 比如 if item in a...

python執行這樣一條windows系統命令怎麼不行

緣若夢醒 這種情況是使用的方法不正確導致的。python中執行系統命令常見的幾種方法如下 1 os.system 例如 import os os.system ls chk err log.py cmdtool.log install log.txt install zabbix.sh manage...

cad怎麼用多段線畫這樣的圓弧,cad怎麼用多段線畫這樣的圓弧

你畫兩個相交直線,然後用倒角工具不就好了。cad多段線畫圓弧 先畫左邊的弧抄線 命令 pline 指定起點襲 當前線寬為 1.5000 指定下乙個點或 圓弧 a 半寬 h 長度 l 放棄 u 寬度 w w 指定起點寬度 1.5000 指定端點寬度 1.5000 8 指定下乙個點或 圓弧 a 半寬 h...