日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

python?QT界面關(guān)閉線程池的線程跟隨退出完美解決方案_python

作者:柳道 ? 更新時(shí)間: 2022-12-26 編程語言

方法一、線程池執(zhí)行的循環(huán)代碼為自己寫的情況

定義一個(gè)全局變量,默認(rèn)為T,當(dāng)QT界面關(guān)閉后,將該變量值改為F。

線程執(zhí)行的循環(huán)代碼內(nèi)增加一個(gè)判斷方法,每次循環(huán)之前對全局變量進(jìn)行判斷,如果結(jié)果為T則進(jìn)行循環(huán)、如果為F,則break退出循環(huán),結(jié)束線程

from concurrent.futures import ThreadPoolExecutor 
import time
a = True  # 設(shè)置全局變量
def fun():  # 線程池執(zhí)行的函數(shù)
    while a:  #  線程池中的循環(huán)代碼,每次循環(huán)都檢查一遍變量a的值
        time.sleep(0.1)  # 線程需要執(zhí)行的具體代碼
        print('1')

tp = ThreadPoolExecutor(5)  # 創(chuàng)建線程池
for i in range(10):
    tp.submit(fun)  # 向線程池提交任務(wù)

time.sleep(1)  
a = False  # 需要結(jié)束線程池任務(wù)時(shí),執(zhí)行該代碼
tp.shutdown()  # 關(guān)閉線程池

方法二、線程池中執(zhí)行的循環(huán)為調(diào)用的模塊內(nèi)的方法

比如?paramiko 庫中,sftp下載文件的方法。

這種情況可以利用回調(diào)函數(shù)進(jìn)行判斷。

回調(diào)函數(shù)檢查控制變量,如果檢測到需要停止執(zhí)行時(shí),執(zhí)行sys.exit()結(jié)束退出線程

from concurrent.futures import ThreadPoolExecutor
import sys
import time

a = True
def call(): # 定義退出的函數(shù)
    if not a:
        print('線程結(jié)束退出')
        sys.exit()  # 退出

def fun(callback=None):  # 模擬sftp.get方法,循環(huán)執(zhí)行,并且有回調(diào)函數(shù)
    while True:
        time.sleep(0.1)
        print('1')
        if callback != None:
            callback()  # 每次循環(huán)調(diào)用回調(diào)函數(shù),進(jìn)行判斷是否需要結(jié)束線程

tp = ThreadPoolExecutor(5)
for i in range(10):
    tp.submit(fun, call)

time.sleep(1)
a = False
tp.shutdown()

原文鏈接:https://www.cnblogs.com/mmld/p/15812996.html

欄目分類
最近更新