欢迎访问宙启技术站
智能推送

PyQt5.QtCore.QTimer实现多任务并发处理示例

发布时间:2024-01-06 04:07:41

PyQt5是基于Qt库的Python绑定库,可以用于创建GUI应用程序。其中QtCore模块中的QTimer类可以用于实现多任务并发处理。

QTimer是一个定时器类,可以用于定时地触发某个函数或槽。

下面是一个使用QTimer实现多任务并发处理的示例:

import sys
from PyQt5.QtCore import QObject, QTimer, QThread


class Worker(QObject):
    def __init__(self):
        super().__init__()

    def do_work(self):
        # 模拟耗时任务
        for i in range(100000000):
            pass


class TaskManager(QObject):
    def __init__(self):
        super().__init__()

        self.worker = Worker()
        self.timer = QTimer()
        self.timer.timeout.connect(self.process_tasks)
        self.tasks = []

    def add_task(self):
        self.tasks.append("Task")

    def start(self):
        # 设置定时器间隔,单位为毫秒
        self.timer.start(100)

    def process_tasks(self):
        if len(self.tasks) > 0:
            # 使用线程来处理任务
            thread = QThread()
            self.worker.moveToThread(thread)
            thread.started.connect(self.worker.do_work)
            thread.finished.connect(thread.deleteLater)
            thread.start()
            # 移除已处理的任务
            self.tasks.pop(0)


if __name__ == "__main__":
    app = QApplication(sys.argv)

    task_manager = TaskManager()
    task_manager.add_task()
    task_manager.add_task()
    task_manager.add_task()
    task_manager.start()

    sys.exit(app.exec_())

在上述代码中,我们定义了一个Worker类来模拟耗时任务的执行。Worker类继承自QObject类,可以用于信号和槽的连接。在do_work方法中,我们模拟了一个耗时的循环操作。

然后我们定义了一个TaskManager类来管理任务的处理。在TaskManager类中,我们创建了一个QTimer对象,并连接了它的timeout信号到process_tasks方法。在process_tasks方法中,我们检查任务列表中是否有任务,如果有任务则创建一个新的QThread对象,并将Worker对象移到该线程中执行。然后启动线程,并在任务执行完成后清理线程。

在程序的主函数中,我们实例化了TaskManager类,并添加了一些任务。然后调用start方法来启动任务处理。最后调用app.exec_()进入Qt的事件循环。

运行上述代码,可以看到任务会并发地依次执行。

通过使用QTimer类和QThread类,我们可以实现多任务的并发处理。这样可以提高程序的响应速度,减少界面的卡顿现象。