最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

問題描述:

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

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

整體思路

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

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

相關(guān)文章

最新評論

肃宁县| 柏乡县| 双城市| 章丘市| 休宁县| 涿州市| 德兴市| 萝北县| 榆社县| 莎车县| 杭州市| 泗水县| 紫阳县| 佛冈县| 平果县| 昌吉市| 连平县| 黎川县| 吉木萨尔县| 临洮县| 稻城县| 灵山县| 莲花县| 新巴尔虎右旗| 清新县| 高碑店市| 眉山市| 涡阳县| 邯郸市| 凯里市| 繁昌县| 博白县| 建水县| 枞阳县| 枣庄市| 鄂州市| 综艺| 贞丰县| 苏州市| 甘谷县| 平和县|