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类,我们可以实现多任务的并发处理。这样可以提高程序的响应速度,减少界面的卡顿现象。
