Python中線程的使用(停止操作)

2021-10-21 17:36:30 字數 1894 閱讀 2454

對通過threading模組建立新python的thread模組是比較底層的模組,python的threading模組是對thread做了一些封裝,可以更加方便的被使用。

模組並沒有提供暫停, 恢復和停止執行緒的方法, 一旦執行緒物件呼叫start方法後, 只能等到對應的方法函式執行完畢. 也就是說一旦start後, 執行緒就屬於失控狀態. 對於函式中沒有迴圈,可以使用join()來結束迴圈。

方法一:一般的方法就是迴圈地判斷乙個標誌位, 一旦標誌位到達到預定的值, 就退出迴圈. 這樣就能做到退出執行緒了.  直到我看到threading中event物件。對於event.isset()可以檢視event的狀態,set()函式返回為true,clear()函式返回為false。

self.__flag.wait()  中self.__flag為true時立即返回, 為false時阻塞直到self.__flag為true後返回

#!/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時阻塞直到self.__flag為true後返回

print (time.strftime("%y-%m-%d %h:%m:%s", time.localtime()))

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

# a.stop()

方法二:1.訊號量

也提供acquire方法和release方法,每當呼叫acquire方法的時候,如果內部計數器大於0,則將其減1,如果內部計數器等於0,則會阻塞該執行緒,知道有執行緒呼叫了release方法將內部計數器更新到大於1位置。class threading.sempaphore(value = 1) --限制資源的併發訪問。semaphore 是乙個內部的計數器,它會隨著acquire()的請求減小,也會隨著release()的

釋放增加。這個計數器的值不會小於零,當acquier() 發現計數器的值為0時,那麼當前

物件會等待直到其他物件release()為止。acquier(blocking = true ,timeout = none)

release()

Python中線程的使用(停止操作)

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...

Python中線程的使用

併發 多個任務同一時間段進行 並行 多個任務同一時刻進行 執行緒的實現 執行緒模組 python通過兩個標準庫 thread 和threading,提供對執行緒的支援 threading對 thread進行了封裝 因此在實際的使用中我們一般都是使用threading threading模組中提供了t...

Java 中線程的停止方法

首先不要使用 thread.stop 方法,該方法會強制執行緒立即停止執行,不安全,造成不可預知的錯誤。如下面 所示 thread thread new thread 在執行耗時操作之前,thread.interrupted 並且會清除當前執行緒的中斷狀態 置為false if interrupte...