當前位置:首頁 » 編程語言 » 中斷python線程

中斷python線程

發布時間: 2022-05-13 01:34:36

1. python中怎麼停止線程

停止線程之前需要考慮一些問題:
1. 這個線程是不是佔用了重要的計算資源,這些資源是不是已經被關閉或者釋放了
2. 這個線程是不是還起了更多的子線程

關於這個問題如果你的英語還不錯的話,建議到stackoverlfow這個網站去搜索,裡面有一個提問Is there any way to kill a Thread in Python?對於這個問題講的很透徹,我就不方便把人家的代碼拷過來了。或者你可以在谷歌里搜索這個問題「Is there any way to kill a Thread in Python?」 最上面就是。

2. python 在線程函數中如何實現線程的暫停、恢復和終止

我們都知道python中可以是threading模塊實現多線程, 但是模塊並沒有提供暫停, 恢復和停止線程的方法, 一旦線程對象調用start方法後, 只能等到對應的方法函數運行完畢. 也就是說一旦start後, 線程就屬於失控狀態. 不過, 我們可以自己實現這些. 一般的方法就是循環地判斷一個標志位, 一旦標志位到達到預定的值, 就退出循環. 這樣就能做到退出線程了. 但暫停和恢復線程就有點難了, 我一直也不清除有什麼好的方法

3. Python里如何終止一個線程

Python用sleep停止一個線程的運行,而不影響主線程的運行,案例代碼如下:

fromthreadingimport*
importtime

classMyThread(Thread):
defrun(self):
self.ifdo=True;
whileself.ifdo:
print'Iamrunning...'
time.sleep(2)

defstop(self):
print'Iamstoppingit...'
self.ifdo=False;

tr=MyThread()
tr.setDaemon(True)
tr.start()
print'Iwillstopit...'
time.sleep(5)
tr.stop()
tr.join()

4. 一文帶你讀懂Python線程

Python線程

進程有很多優點,它提供了多道編程,可以提高計算機CPU的利用率。既然進程這么優秀,為什麼還要線程呢?其實,仔細觀察就會發現進程還是有很多缺陷的。

主要體現在一下幾個方面:

進程只能在一個時間做一個任務,如果想同時做兩個任務或多個任務,就必須開啟多個進程去完成多個任務。

進程在執行的過程中如果阻塞,例如等待輸入,整個進程就會掛起,即使進程中有些工作不依賴於輸入的數據,也將無法執行。

每個進程都有自己的獨立空間,所以多進程的創建,銷毀相比於多線程更加耗時,也更加佔用系統資源。

進程是資源分配的最小單位,線程是CPU調度的最小單位,每一個進程中至少有一個線程。

線程與進程的區別

可以歸納為以下4點:

1)地址空間:進程間相互獨立的每個進程都有自己獨立的內存空間,也就是說一個進程內的數據在另一個進程是不可見的。但同一進程中的各線程間數據是共享的。

2)通信:由於每個進程有自己獨立的內存空間,所以進程間通信需要IPC,而進程內的數據對於多個線程來說是共享的,每個線程都可以訪問,所以為了保證數據的一致性,需要使用鎖。

3)調度和切換:線程上下文切換比進程上下文切換要快得多。

4)在多線程操作系統中,進程不是一個可執行的實體,它主要的功能是向操作系統申請一塊內存空間,然後在內存空間中開線程來執行任務,相當於一個容器,容器中的線程才是真正的執行體。一個進程可以包含多個線程,而一個線程是不能包含進程的。因為進程是系統分配資源的最小單位,所以線程不能向操作系統申請自己的空間,但一個線程內可以包含多個線程。

相關推薦:《Python視頻教程》

線程的特點:

在多線程的操作系統中,通常是在一個進程中包括多個線程,每個線程都是作為利用CPU的基本單位,是花費最小開銷的實體。線程具有以下屬性。

1)輕型實體

線程中的實體基本上不擁有系統資源,只是有一點必不可少的、能保證獨立運行的資源。

線程的實體包括程序、數據和TCB。線程是動態概念,它的動態特性由線程式控制制塊TCB(Thread Control Block)描述。

2)獨立調度和分派的基本單位。

在多線程OS中,線程是能獨立運行的基本單位,因而也是獨立調度和分派的基本單位。由於線程很「輕」,故線程的切換非常迅速且開銷小(在同一進程中的)。

3)共享進程資源。

在同一進程中的各個線程,都可以共享該進程所擁有的資源,這首先表現在:所有線程都具有相同的進程id,這意味著,線程可以訪問該進程的每一個內存資源;此外,還可以訪問進程所擁有的已打開文件、定時器、信號量機構等。由於同一個進程內的線程共享內存和文件,所以線程之間互相通信不必調用內核。

4)可並發執行

在一個進程中的多個線程之間,可以並發執行,甚至允許在一個進程中所有線程都能並發執行;同樣,不同進程中的線程也能並發執行,充分利用和發揮了處理機與外圍設備並行工作的能力。

線程的實現可以分為兩類:

用戶級線程(User-Level Thread)和內核級線程(Kernel-Level Thread),後者又稱為內核支持的線程或輕量級進程。在多線程操作系統中,各個系統的實現方式並不相同,在有的系統中實現了用戶級線程,有的系統中實現了內核級線程。

用戶線程和內核線程的區別:

1、內核支持線程是OS內核可感知的,而用戶級線程是OS內核不可感知的。

2、用戶級線程的創建、撤消和調度不需要OS內核的支持,是在語言(如Java)這一級處理的;而內核支持線程的創建、撤消和調度都需OS內核提供支持,而且與進程的創建、撤消和調度大體是相同的。

3、用戶級線程執行系統調用指令時將導致其所屬進程被中斷,而內核支持線程執行系統調用指令時,只導致該線程被中斷。

4、在只有用戶級線程的系統內,CPU調度還是以進程為單位,處於運行狀態的進程中的多個線程,由用戶程序控制線程的輪換運行;在有內核支持線程的系統內,CPU調度則以線程為單位,由OS的線程調度程序負責線程的調度。

5、用戶級線程的程序實體是運行在用戶態下的程序,而內核支持線程的程序實體則是可以運行在任何狀態下的程序。

內核線程的優缺點:

優點:當有多個處理機時,一個進程的多個線程可以同時執行。

缺點:由內核進行調度。

用戶線程的優缺點:

優點:

線程的調度不需要內核直接參與,控制簡單。

可以在不支持線程的操作系統中實現。

創建和銷毀線程、線程切換代價等線程管理的代價比內核線程少得多。

允許每個進程定製自己的調度演算法,線程管理比較靈活。

線程能夠利用的表空間和堆棧空間比內核級線程多。

同一進程中只能同時有一個線程在運行,如果有一個線程使用了系統調用而阻塞,那麼整個進程都會被掛起。另外,頁面失效也會產生同樣的問題。

缺點:

資源調度按照進程進行,多個處理機下,同一個進程中的線程只能在同一個處理機下分時復用。

5. Python中怎麼在終止一個線程的同時終止另外一個線程

設置一個全局變數,初值為False
設置鍵盤監聽事件,當監測到特定按鍵時,將全局變數的值修改為True
在每個子線程中,循環檢測全局變數的值,當檢測到值為True時退出線程函數。

6. python線程停止壞處

可以通過以下方式來終止線程:

_ü壯鮃斐@粗罩菇?

_ü桓鮒罩貢曛糾粗罩菇?

_褂_races來終止進程

_褂枚嘞叱棠P屠粗罩菇?

_ü躺柚夢_eamon來終止進程

_褂靡厥糶_stop()

?

7. Python 如何強制中止線程

Python用sleep停止一個線程的運行,而不影響主線程的運行,案例代碼如下:

from threading import *import time class MyThread(Thread): def run (self): self.ifdo = True; while self.ifdo: print 'I am running...' time.sleep(2) def stop (self): print 'I am stopping it...' self.ifdo = False; tr = MyThread()tr.setDaemon(True)tr.start()print 'I will stop it...'time.sleep(5)tr.stop()tr.join()

8. python中如何中止一個線程

簡單來說,它kill的原理是設置一個flag位,然後線程在執行下一句python語句檢測到這個位被設置了之後,就會自行退出,以達到kill的目的。 另外還有一種更容易理解的flag置位的實現方式:classKillableThread(threading.Thread):def__init__(self):threading.Thread. __init__(self)self.stop = Falsedefrun(self):whilenotself.stop:somefunction() 這種方式相比第一種而言,又有一點不足:kill生效的時限,最大等於somefunction執行一遍所花的時間。 而第一種方式,在下一句python語句執行時就會生效。 不過可以料想,第一種實現方式,整體的執行效率會慢一點。

9. Python中如何在一段時間後停止程序

用到threading的Timer,也類似單片機那樣子,在中斷程序中再重置定時器,設置中斷,python實例代碼如下:

import threading

import time

def change_user():

print('這是中斷,切換賬號')

t = threading.Timer(3, change_user)

t.start()

#每過3秒切換一次賬號

t = threading.Timer(3, change_user)

t.start()

while True:

print('我在爬數據')

time.sleep(1)

(9)中斷python線程擴展閱讀

有時當一個條件成立的情況下,需要終止程序,可以使用sys.exit()退出程序。sys.exit()會引發一個異常:

1、如果這個異常沒有被捕獲,那麼python編譯器將會退出,後面的程序將不會執行。

2、如果這個異常被捕獲(try...except...finally),捕獲這個異常可以做一些額外的清理工作,後面的程序還會繼續執行。

註:0為正常退出,其他數值(1-127)為不正常,可拋異常事件供捕獲。另一種終止程序的方法os._exit()

一般情況下使用sys.exit()即可,一般在fork出來的子進程中使用os._exit()

採用sys.exit(0)正常終止程序,程序終止後shell運行不受影響。

採用os._exit(0)關閉整個shell,調用sys._exit(0)後整個shell都重啟了(RESTART Shell)。

10. 線程停止 python

簡單來說,它kill的原理是設置一個flag位,然後線程在執行下一句python語句檢測到這個位被設置了之後,就會自行退出,以達到kill的目的。 另外還有一種更容易理解的flag置位的實現方式:classKillableThread(threading.Thread):def__init__(self):threading.Thread. __init__(self)self.stop = Falsedefrun(self):whilenotself.stop:somefunction() 這種方式相比第一種而言,又有一點不足:kill生效的時限,最大等於somefunction執行一遍所花的時間。 而第一種方式,在下一句python語句執行時就會生效。 不過可以料想,第一種實現方式,整體的執行效率會慢一點。

熱點內容
sim卡的密碼怎麼設置密碼 發布:2025-05-10 23:41:09 瀏覽:715
自定義緩存註解 發布:2025-05-10 23:40:06 瀏覽:117
sqltext類型長度 發布:2025-05-10 23:30:21 瀏覽:979
圖形AI演算法 發布:2025-05-10 23:30:19 瀏覽:182
java上傳的文件在哪裡 發布:2025-05-10 23:30:06 瀏覽:159
議長訪問台灣 發布:2025-05-10 23:22:46 瀏覽:433
啟動電機如何配置開關 發布:2025-05-10 23:21:21 瀏覽:959
三維數組存儲 發布:2025-05-10 23:14:35 瀏覽:980
普通電腦架設成雲伺服器 發布:2025-05-10 23:13:56 瀏覽:808
為什麼找回密碼總是說驗證碼 發布:2025-05-10 23:04:07 瀏覽:183