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

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

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

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

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

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

并行:下載多個(gè)文件,開(kāi)啟多條線程,多個(gè)文件同時(shí)進(jìn)行下載,這里是嚴(yán)格意義上的,在同一時(shí)刻發(fā)生的,并行在時(shí)間上是重疊的。

問(wèn)題描述:

前幾天寫(xiě)一個(gè)項(xiàng)目,然后項(xiàng)目中有一個(gè)死循環(huán)的線程,我需要讓他在我需要的時(shí)候直接停止該線程,但是使用基本方法join(),效果是無(wú)效的,因此我又去了百度方法,外加國(guó)外官方文檔,大概的結(jié)果就是為了保護(hù)進(jìn)程,這種死循環(huán)使用原來(lái)方法是很難實(shí)現(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("開(kāi)啟線程: " + self.name)
    # 獲取鎖,用于線程同步
    threadLock.acquire()
    # 執(zhí)行要開(kāi)啟的線程

    # 釋放鎖,開(kāi)啟下一個(gè)線程
    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("開(kāi)啟線程: " + self.name)
    # 獲取鎖,用于線程同步
    threadLock.acquire()
    # 執(zhí)行要開(kāi)啟的線程
    if not run_go():
      self.counter = False
    # 釋放鎖,開(kāi)啟下一個(gè)線程
    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("開(kāi)啟線程: " + self.name)
    # 獲取鎖,用于線程同步
    threadLock.acquire()
    # 執(zhí)行要開(kāi)啟的線程
    if not run_go():
      self.counter = False
    # 釋放鎖,開(kāi)啟下一個(gè)線程
    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()

整體思路

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

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

相關(guān)文章

  • Python3 批量掃描端口的例子

    Python3 批量掃描端口的例子

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

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

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

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

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

    12步教你理解Python裝飾器

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

    Python中的joblib模塊詳解

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

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

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

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

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

    聊聊boost?python3依賴安裝問(wèn)題

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

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

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

    Python批量安裝卸載1000個(gè)apk的方法

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

最新評(píng)論