欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python 如何停止一個死循環(huán)的線程

 更新時間:2020年11月24日 14:08:20   作者:小白打卡  
這篇文章主要介紹了python 如何停止一個死循環(huán)的線程,幫助大家更好的理解和使用python,感興趣的朋友可以了解下

進程想要執(zhí)行任務(wù)就需要依賴線程。換句話說,就是進程中的最小執(zhí)行單位就是線程,并且一個進程中至少有一個線程。

那什么是多線程?提到多線程這里要說兩個概念,就是串行和并行,搞清楚這個,我們才能更好地理解多線程。

所謂串行,其實是相對于單條線程來執(zhí)行多個任務(wù)來說的,我們就拿下載文件來舉個例子:當(dāng)我們下載多個文件時,在串行中它是按照一定的順序去進行下載的,也就是說,必須等下載完A之后才能開始下載B,它們在時間上是不可能發(fā)生重疊的。

并行:下載多個文件,開啟多條線程,多個文件同時進行下載,這里是嚴格意義上的,在同一時刻發(fā)生的,并行在時間上是重疊的。

問題描述:

前幾天寫一個項目,然后項目中有一個死循環(huán)的線程,我需要讓他在我需要的時候直接停止該線程,但是使用基本方法join(),效果是無效的,因此我又去了百度方法,外加國外官方文檔,大概的結(jié)果就是為了保護進程,這種死循環(huán)使用原來方法是很難實現(xiàn)的,

整體解決方案:

創(chuàng)建線程函數(shù)

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("開啟線程: " + self.name)
    # 獲取鎖,用于線程同步
    threadLock.acquire()
    # 執(zhí)行要開啟的線程

    # 釋放鎖,開啟下一個線程
    threadLock.release()

死循環(huán)函數(shù)

def Dead_circle():
  while True:
    print("死循環(huán)")

增加結(jié)束的條件

def run_go():
  num = 0
  while True:
    time.sleep(1)
    num += 1
    if num == 10:
      return False # 假設(shè)我執(zhí)行10s后結(jié)束

增加新方法

def run_go():
  num = 0
  while True:
    time.sleep(1)
    num += 1
    if num == 10:
      return False

修改執(zhí)行方法

def Dead_circle():
  thread1 = myThread(1, "Thread-1", 1)
  thread1.start()
  while thread1.counter:
    time.sleep(1)
    print("死循環(huán)")
  thread1.join()

修改線程類

class myThread(threading.Thread):
  def __init__(self, threadID, name, counter):
    threading.Thread.__init__(self)
    self.threadID = threadID
    self.name = name
    self.counter = counter
    self.State = True

  def run(self):
    print("開啟線程: " + self.name)
    # 獲取鎖,用于線程同步
    threadLock.acquire()
    # 執(zhí)行要開啟的線程
    if not run_go():
      self.counter = False
    # 釋放鎖,開啟下一個線程
    threadLock.release()

整體代碼

import threading
import time
from tkinter import *

threadLock = threading.Lock()


class myThread(threading.Thread):
  def __init__(self, threadID, name, counter):
    threading.Thread.__init__(self)
    self.threadID = threadID
    self.name = name
    self.counter = counter
    self.State = True

  def run(self):
    print("開啟線程: " + self.name)
    # 獲取鎖,用于線程同步
    threadLock.acquire()
    # 執(zhí)行要開啟的線程
    if not run_go():
      self.counter = False
    # 釋放鎖,開啟下一個線程
    threadLock.release()


def run_go():
  num = 0
  while True:
    time.sleep(1)
    num += 1
    if num == 10:
      return False


def Dead_circle():
  thread1 = myThread(1, "Thread-1", 1)
  thread1.start()
  while thread1.counter:
    time.sleep(1)
    print("死循環(huán)")
  thread1.join()


if __name__ == '__main__':
  Dead_circle()

整體思路

原來的思路是執(zhí)行線程,然后規(guī)定條件,當(dāng)條件觸發(fā)時,直接停止該線程,但是由于線程守護的原因,我們沒辦法使得一個死循環(huán)突然停止,因此,我修改了原來的思路,我讓死循環(huán)函數(shù)在定義的時候去創(chuàng)建一個計時線程,這樣我的線程就是可控的,通過查找線程中的變量,獲得是否停止,這樣就可以控制我的線程執(zhí)行時間。

以上就是python 如何停止一個死循環(huán)的線程的詳細內(nèi)容,更多關(guān)于python 停止死循環(huán)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python3 批量掃描端口的例子

    Python3 批量掃描端口的例子

    今天小編就為大家分享一篇Python3 批量掃描端口的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python3兩數(shù)相加的實現(xiàn)示例

    python3兩數(shù)相加的實現(xiàn)示例

    這篇文章主要介紹了python3兩數(shù)相加的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • PyTorch基礎(chǔ)之torch.nn.Conv2d中自定義權(quán)重問題

    PyTorch基礎(chǔ)之torch.nn.Conv2d中自定義權(quán)重問題

    這篇文章主要介紹了PyTorch基礎(chǔ)之torch.nn.Conv2d中自定義權(quán)重問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 12步教你理解Python裝飾器

    12步教你理解Python裝飾器

    或許你已經(jīng)用過裝飾器,它的使用方式非常簡單但理解起來困難(其實真正理解的也很簡單),想要理解裝飾器,你需要懂點函數(shù)式編程的概念,python函數(shù)的定義以及函數(shù)調(diào)用的語法規(guī)則等,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Python中的joblib模塊詳解

    Python中的joblib模塊詳解

    這篇文章主要介紹了Python中的joblib模塊詳解,用已知的數(shù)據(jù)集經(jīng)過反復(fù)調(diào)優(yōu)后,訓(xùn)練出一個較為精準(zhǔn)的模型,想要用來對格式相同的新數(shù)據(jù)進行預(yù)測或分類,常見的做法是將其訓(xùn)練好模型封裝成一個模型文件,直接調(diào)用此模型文件用于后續(xù)的訓(xùn)練,需要的朋友可以參考下
    2023-08-08
  • Python實現(xiàn)批量讀取HDF多波段柵格數(shù)據(jù)并繪制像元直方圖

    Python實現(xiàn)批量讀取HDF多波段柵格數(shù)據(jù)并繪制像元直方圖

    這篇文章主要為大家詳細介紹了如何基于Python語言gdal模塊,實現(xiàn)多波段HDF柵格圖像文件的讀取、處理與像元值可視化(直方圖繪制)等操作,需要的可以參考一下
    2023-03-03
  • PyTorch之關(guān)于hook機制

    PyTorch之關(guān)于hook機制

    這篇文章主要介紹了PyTorch之關(guān)于hook機制的理解,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 聊聊boost?python3依賴安裝問題

    聊聊boost?python3依賴安裝問題

    這篇文章主要介紹了boost?python3依賴安裝,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • python中下標(biāo)和切片的使用方法解析

    python中下標(biāo)和切片的使用方法解析

    這篇文章主要介紹了python中下標(biāo)和切片的使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • Python批量安裝卸載1000個apk的方法

    Python批量安裝卸載1000個apk的方法

    這篇文章主要介紹了Python批量安裝卸載1000個apk的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04

最新評論