導航:首頁 > 編程語言 > python強制終止線程

python強制終止線程

發布時間:2024-07-07 12:33:01

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語句執行時就會生效。 不過可以料想,第一種實現方式,整體的執行效率會慢一點。

② 如何終止一個bottle 線程 python

  1. 問題描述的不太准確,你指的是python里bottle那個web框架么?通常運行的時候,程序一開始就會提示「Hit CTRL-C to quite」,按照字面上意思,Contrl+C退出就行了。

  2. 如果你用了Gunicorn之類的WSGI HTTP伺服器來並發Bottle的話,那麼把Gunicorn進程結束掉就好了。

  3. 如果是用python的multiprocessing弄出來的bottle服務進程,那麼在需要結束的地方先.join()。

③ 弱問python的問題.怎麼終止一個子線程

等待串口數據導致線程自己sleep而沒有機會執行,主線程的join沒法繼續,方法就是這樣的,換成這個能執行

fromthreadingimport*
importtime

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

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

tr=MyThread()
tr.setDaemon(True)
tr.start()
time.sleep(1)
tr.stop()
tr.join()

這樣就更直觀了

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()

④ python濡備綍鍦ㄥ瓙綰跨▼涓鍏抽棴涓昏繘紼嬶紵錛

鍔炴硶寰堝氥傞氬父鐨勫姙娉曟槸錛屽瓙綰跨▼鍑哄紓甯稿悗錛屼富榪涚▼媯鏌ュ埌瀹冪殑鐘舵佷笉姝e父錛岀劧鍚庤嚜宸變富鍔ㄥ皢鍏朵綑綰跨▼閫鍑猴紝鏈鍚庤嚜宸卞啀閫鍑恆傝繖鏄紼沖Ε鐨勫姙娉曘

鍙﹀栫殑鍔炴硶鏄錛屾煇涓涓瀛愮嚎紼嬩笓鐢ㄤ簬鐩戞帶鐘舵併傚畠鍙戠幇鐘舵佷笉瀵規椂錛岀洿鎺ュ己鍒惰繘紼嬮鍑恆傚姙娉1錛屽彂娑堟伅緇欎富榪涚▼錛岃╀富榪涚▼閫鍑恆傚姙娉2錛氱敤kill, pskill絳夋柟娉曪紝鐩存帴鎸夎繘紼婸ID鏉榪涚▼銆

⑤ 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()

⑥ 求助python多線程,執行到100多個停止了

python 線程 暫停, 恢復, 退出
我們都知道python中可以是threading模塊實現多線程, 但是模塊並沒有提供暫停, 恢復和停止線程的方法, 一旦線程對象調用start方法後, 只能等到對應的方法函數運行完畢. 也就是說一旦start後, 線程就屬於失控狀態. 不過, 我們可以自己實現這些. 一般的方法就是循環地判斷一個標志位, 一旦標志位到達到預定的值, 就退出循環. 這樣就能做到退出線程了. 但暫停和恢復線程就有點難了, 我一直也不清除有什麼好的方法, 直到我看到threading中Event對象的wait方法的描述時.
wait([timeout])
Block until the internal flag is true. If the internal flag is true on entry, return immediately. Otherwise, block until another thread calls set() to set the flag to true, or until the optional timeout occurs.
阻塞, 直到內部的標志位為True時. 如果在內部的標志位在進入時為True時, 立即返回. 否則, 阻塞直到其他線程調用set()方法將標准位設為True, 或者到達了可選的timeout時間.
When the timeout argument is present and not None, it should be a floating point number specifying a timeout for the operation in seconds (or fractions thereof).
This method returns the internal flag on exit, so it will always return True except if a timeout is given and the operation times out.
當給定了timeout參數且不為None, 它應該是一個浮點數,以秒為單位指定操作的超時(或是分數)。
此方法在退出時返回內部標志,因此除非給定了超時且操作超時,否則它將始終返回True。
Changed in version 2.7: Previously, the method always returned None.
2.7版本以前, 這個方法總會返回None.
<br>
利用wait的阻塞機制, 就能夠實現暫停和恢復了, 再配合循環判斷標識位, 就能實現退出了, 下面是代碼示例:
#!/usr/bin/env python
# coding: utf-8
import threading
import time
class Job(threading.Thread):
def __init__(self, *args, **kwargs):
super(Job, self).__init__(*args, **kwargs)
self.__flag = threading.Event() # 用於暫停線程的標識
self.__flag.set() # 設置為True
self.__running = threading.Event() # 用於停止線程的標識
self.__running.set() # 將running設置為True
def run(self):
while self.__running.isSet():
self.__flag.wait() # 為True時立即返回, 為False時阻塞直到內部的標識位為True後返回
print time.time()
time.sleep(1)
def pause(self):
self.__flag.clear() # 設置為False, 讓線程阻塞
def resume(self):
self.__flag.set() # 設置為True, 讓線程停止阻塞
def stop(self):
self.__flag.set() # 將線程從暫停狀態恢復, 如何已經暫停的話
self.__running.clear() # 設置為False
下面是測試代碼:
a = Job()
a.start()
time.sleep(3)
a.pause()
time.sleep(3)
a.resume()
time.sleep(3)
a.pause()
time.sleep(2)
a.stop()
<br>
測試的結果:
這完成了暫停, 恢復和停止的功能. 但是這里有一個缺點: 無論是暫停還是停止, 都不是瞬時的, 必須等待run函數內部的運行到達標志位判斷時才有效. 也就是說操作會滯後一次.
但是這有時也不一定是壞事. 如果run函數中涉及了文件操作或資料庫操作等, 完整地運行一次後再退出, 反而能夠執行剩餘的資源釋放操作的代碼(例如各種close). 不會出現程序的文件操作符超出上限, 資料庫連接未釋放等尷尬的情況.

⑦ Python ThreadPoolExecutor 寮傚父涓姝㈣В鍐蟲柟妗

閫氬父鎯呭喌錛屾垜浠鍒╃敤 Ctrl+C 璁╃▼搴忚Е鍙 KeyboardInterrupt 寮傚父錛屼腑姝㈢▼搴忚繍琛屻綰跨▼奼鏂規堜笅錛 Ctrl-C 澶辨晥錛屽綋綰跨▼奼犻噷鐨勭嚎紼嬩換鍔¤窇瀹屽悗錛屾墠浼氳Е鍙 KeyboardInterrupt

涓婁笅鏂囩$悊鍗忚鐩稿綋浜庨殣鎬у湴鐪佺暐浜 threadPool.shutdown(wait=True) 錛屽悓鏃訛紝紼嬪簭姝e父鎵ц屽畬鎴愭垨鍑虹幇寮傚父涓鏂鐨勬椂鍊欙紝灝變細璋冪敤 __exit__() 鏂規硶錛屾帴涓嬫潵榪涜屽紓甯鎬腑姝㈢殑鍩虹銆

閫傜敤浜 Django 絳 WEB 搴旂敤妗嗘灦錛屾湰韜鑷甯澶氱嚎紼錛屼慨鏀鍏ㄥ矓鍙橀噺綆鍗曪紝浣嗚佹敞鎰綰跨▼瀹夊叏銆

紼嬪簭榪愯屼腑錛屽彧闇 sign = 1 鎴栬 exiting.set() 錛寃orker 鍑芥暟鍒欒煩榪囦富瑕佽繍綆楅儴鍒嗭紝鍓╀綑綰跨▼浠誨姟灝嗚繀閫熷畬鎴愶紝鍙樼浉杈懼埌涓姝㈠氱嚎紼嬩換鍔$殑鐩鐨勩

鎻愪氦緇欑嚎紼嬫睜鐨勬瘡涓綰跨▼浠誨姟 task 鍔犲叆 threadPool 涓錛屾柟渚垮悗緇瀵 task 榪涜屾搷浣溿傚綋 for 寰鐜鍐呯殑 task 鍏ㄩ儴鎻愪氦鍚庯紝綰跨▼浼氬啀鍚庡彴榪愯岋紝鑰岃繘紼嬭繍琛岃嚦 while 涓鍫靛烇紝鐩磋嚦 threadPool 涓鏈鍚庝竴涓綰跨▼鏄鍚 .done() 銆傝嫢榪涚▼鍫靛炲湪 while 涓鎺ユ敹鍒 Ctrl+C KeyboardInterrupt 寮傚父錛屽垯浠庡悗寰鍓嶅彇娑 threadPool 涓鎵鏈変換鍔★紝杈懼埌涓姝㈢洰鐨勩

閱讀全文

與python強制終止線程相關的資料

熱點內容
蘇州程序員接私活有風險嗎 瀏覽:259
android相機亮度 瀏覽:93
使用美團app如何騎小黃車 瀏覽:511
榮耀如何調節App字體 瀏覽:669
布卡pdf 瀏覽:487
火神山球場伺服器怎麼玩 瀏覽:512
手遊方舟伺服器關了怎麼辦 瀏覽:649
鈔票美國人改加密了 瀏覽:770
mount命令nfs 瀏覽:664
單片機tl 瀏覽:853
it公司筆試題java 瀏覽:46
編譯和解釋執行區別 瀏覽:304
壓縮面膜配什麼水 瀏覽:266
linux顯示配置 瀏覽:505
什麼是在編譯預處理時進行的 瀏覽:815
圖片發送成文件夾 瀏覽:22
圖書演算法 瀏覽:308
程序員被邊緣化了 瀏覽:77
android模擬登錄 瀏覽:822
程序員電腦卡頓反應慢怎麼處理 瀏覽:274