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

PyQt 異步任務(wù)多線程的幾種方案示例詳解

 更新時(shí)間:2025年01月22日 09:40:05   作者:戀戀西風(fēng)  
文章總結(jié)了多線程異步編程的不同方式,包括QThread、QThreadPool和concurrent.futures,分別適用于不同場景,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧

多線程異步線程是我們常用的,如我們?cè)趫?zhí)行耗時(shí)操作,又不想卡用主程序 ;

1. QThread 

from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtWidgets import QApplication, QLabel, QVBoxLayout, QWidget, QPushButton
import time
class WorkerThread(QThread):
    progress = pyqtSignal(int)  # 定義信號(hào)
    def __init__(self,main_instance):
        QThread.__init__(self)
        self.main_instance = main_instance
    def run(self):
        for i in range(1, 101):
            self.main_instance.excuteSomeThing()
            self.progress.emit(i)  # 發(fā)送信號(hào)
class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(800, 600)
        self.initUI()
    def initUI(self):
        self.label = QLabel("進(jìn)度: 0")
        self.button = QPushButton("開始任務(wù)")
        self.button.clicked.connect(self.start_task)
        layout = QVBoxLayout()
        layout.addWidget(self.label)
        layout.addWidget(self.button)
        self.setLayout(layout)
    def excuteSomeThing(self):
        time.sleep(0.1)  # 模擬耗時(shí)操作
    def start_task(self):
        self.worker = WorkerThread(self)
        self.worker.progress.connect(self.update_label)  # 連接信號(hào)到槽函數(shù)
        self.worker.start()  # 啟動(dòng)線程
    def update_label(self, value):
        self.label.setText(f"進(jìn)度: {value}")
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()

子線程中回調(diào)主線程函數(shù)執(zhí)行,在子線程;

2. QThreadPool

from PyQt5.QtCore import QRunnable, QThreadPool, pyqtSignal, QObject
from PyQt5.QtWidgets import QApplication, QLabel, QVBoxLayout, QWidget, QPushButton
import time
class WorkerSignals(QObject):
    progress = pyqtSignal(int)
class Worker(QRunnable):
    def __init__(self):
        super().__init__()
        self.signals = WorkerSignals()
    def run(self):
        for i in range(1, 101):
            time.sleep(0.01)  # 模擬耗時(shí)操作
            self.signals.progress.emit(i)  # 發(fā)送信號(hào)
class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(800, 600)
        self.initUI()
        self.thread_pool = QThreadPool()
    def initUI(self):
        self.label = QLabel("進(jìn)度: 0")
        self.button = QPushButton("開始任務(wù)")
        self.button.clicked.connect(self.start_task)
        layout = QVBoxLayout()
        layout.addWidget(self.label)
        layout.addWidget(self.button)
        self.setLayout(layout)
    def start_task(self):
        worker = Worker()
        worker.signals.progress.connect(self.update_label)
        self.thread_pool.start(worker)
    def update_label(self, value):
        self.label.setText(f"進(jìn)度: {value}")
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()

3.concurrent

from PyQt5.QtCore import pyqtSignal, QObject
from PyQt5.QtWidgets import QApplication, QLabel, QVBoxLayout, QWidget, QPushButton
from concurrent.futures import ThreadPoolExecutor
import time
class Worker(QObject):
    progress = pyqtSignal(int)
    def do_work(self):
        for i in range(1, 101):
            time.sleep(0.021)  # 模擬耗時(shí)操作
            self.progress.emit(i)
class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(800, 600)
        self.initUI()
        self.executor = ThreadPoolExecutor(max_workers=10)
    def initUI(self):
        self.label = QLabel("進(jìn)度: 0")
        self.button = QPushButton("開始任務(wù)")
        self.button.clicked.connect(self.start_task)
        layout = QVBoxLayout()
        layout.addWidget(self.label)
        layout.addWidget(self.button)
        self.setLayout(layout)
    def start_task(self):
        self.worker = Worker()
        self.worker.progress.connect(self.update_label)
        self.executor.submit(self.worker.do_work)
    def update_label(self, value):
        self.label.setText(f"進(jìn)度: {value}")
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()

總結(jié)

  • QThread:適合需要自定義線程邏輯的場景。
  • QRunnable + QThreadPool:適合輕量級(jí)、高并發(fā)任務(wù)。
  • concurrent.futures:簡單結(jié)合信號(hào)與槽機(jī)制使用線程池。

到此這篇關(guān)于PyQt 異步任務(wù)多線程的幾種方案示例詳解的文章就介紹到這了,更多相關(guān)PyQt 多線程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • OpenCV學(xué)習(xí)方框?yàn)V波實(shí)現(xiàn)圖像處理代碼示例

    OpenCV學(xué)習(xí)方框?yàn)V波實(shí)現(xiàn)圖像處理代碼示例

    這篇文章主要為大家介紹了OpenCV學(xué)習(xí)如何使用方框?yàn)V波實(shí)現(xiàn)對(duì)圖像處理代碼示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • Python編譯結(jié)果之code對(duì)象與pyc文件詳解

    Python編譯結(jié)果之code對(duì)象與pyc文件詳解

    今天小編就為大家分享一篇對(duì)Python編譯結(jié)果之code對(duì)象與pyc文件的詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-10-10
  • Matplotlib繪圖基礎(chǔ)之坐標(biāo)軸詳解

    Matplotlib繪圖基礎(chǔ)之坐標(biāo)軸詳解

    Matplotlib的坐標(biāo)軸是用于在繪圖中表示數(shù)據(jù)的位置的工具,也是為了幫助觀察者了解圖像中數(shù)據(jù)的位置和大小,下面小編就來和大家詳細(xì)聊聊Matplotlib繪圖時(shí)坐標(biāo)軸的具體使用吧
    2023-07-07
  • 詳解pandas映射與數(shù)據(jù)轉(zhuǎn)換

    詳解pandas映射與數(shù)據(jù)轉(zhuǎn)換

    這篇文章主要介紹了pandas映射與數(shù)據(jù)轉(zhuǎn)換的相關(guān)資料,幫助大家更好的利用python進(jìn)行數(shù)據(jù)分析,感興趣的朋友可以了解下
    2021-01-01
  • Numpy數(shù)組的轉(zhuǎn)置和軸交換的實(shí)現(xiàn)

    Numpy數(shù)組的轉(zhuǎn)置和軸交換的實(shí)現(xiàn)

    本文主要介紹了Numpy數(shù)組的轉(zhuǎn)置和軸交換的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Python 最強(qiáng)編輯器詳細(xì)使用指南(PyCharm )

    Python 最強(qiáng)編輯器詳細(xì)使用指南(PyCharm )

    這篇文章主要介紹了Python 最強(qiáng)編輯器詳細(xì)使用指南(PyCharm),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Python中實(shí)現(xiàn) xls 文件轉(zhuǎn) xlsx的4種方法(示例詳解)

    Python中實(shí)現(xiàn) xls 文件轉(zhuǎn) xlsx的4種方法(示例詳解)

    在 Python 中,可以采用 pandas、pyexcel、win32com 和 xls2xlsx 這四個(gè)模塊,實(shí)現(xiàn) xls 轉(zhuǎn) xlsx 格式,本文以 Excel 示例文件test_Excel.xls 為例結(jié)合示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • Python使用爬蟲猜密碼

    Python使用爬蟲猜密碼

    我們可以通過python 來實(shí)現(xiàn)這樣一個(gè)簡單的爬蟲猜密碼功能。下面就看看如何使用python來實(shí)現(xiàn)這樣一個(gè)功能,對(duì)python爬蟲猜密碼相關(guān)知識(shí)感興趣的朋友參考下吧
    2016-02-02
  • 基于PyQT5制作一個(gè)桌面摸魚工具

    基于PyQT5制作一個(gè)桌面摸魚工具

    這篇文章主要介紹了如何利用PyQT5制作一個(gè)桌面摸魚工具,利用摸魚,打開小說,可實(shí)行完美摸魚,實(shí)時(shí)保存進(jìn)度,快來跟隨小編一起動(dòng)手試一試吧
    2022-02-02
  • 利用python實(shí)現(xiàn).dcm格式圖像轉(zhuǎn)為.jpg格式

    利用python實(shí)現(xiàn).dcm格式圖像轉(zhuǎn)為.jpg格式

    今天小編就為大家分享一篇利用python實(shí)現(xiàn).dcm格式圖像轉(zhuǎn)為.jpg格式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01

最新評(píng)論

扎囊县| 东海县| 重庆市| 应用必备| 平舆县| 个旧市| 太康县| 阿巴嘎旗| 平山县| 吕梁市| 宁城县| 九台市| 娱乐| 遂溪县| 灵宝市| 大洼县| 仁寿县| 平顶山市| 连南| 团风县| 石台县| 沙洋县| 老河口市| 铁岭县| 通山县| 修文县| 嘉峪关市| 扶绥县| 宽城| 虎林市| 高安市| 开封市| 奇台县| 辽源市| 太谷县| 博客| 隆子县| 邛崃市| 湄潭县| 云浮市| 平远县|