From 1712e964cf5405eeff0e3899dc2a6a0f572edf1e Mon Sep 17 00:00:00 2001 From: zj3D Date: Thu, 6 Mar 2025 16:56:53 +0800 Subject: [PATCH] 02 --- B 高性能模式/1.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/B 高性能模式/1.md b/B 高性能模式/1.md index 10f04d7..63f5462 100644 --- a/B 高性能模式/1.md +++ b/B 高性能模式/1.md @@ -9,13 +9,13 @@ 在 GUI(图形用户界面)应用程序中,主线程负责处理用户交互,而其他任务(如文件读写、网络请求)需要在后台运行,以避免阻塞主线程导致界面卡顿。多线程可以与 GUI 主线程共享内存,方便更新界面状态。线程间通信简单,适合处理后台任务。GUI 框架(如 PyQt、Tkinter)通常有自己的事件循环,与异步编程的事件循环冲突。 - + import sys import requests from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QLabel from PyQt5.QtCore import QThread, pyqtSignal -# 工作线程:负责下载文件 + # 工作线程:负责下载文件 class DownloadThread(QThread): # 自定义信号,用于通知主线程下载进度 progress_signal = pyqtSignal(str) @@ -40,7 +40,7 @@ class DownloadThread(QThread): except Exception as e: self.progress_signal.emit(f"下载失败: {str(e)}") -# 主窗口 + #### 主窗口 class MainWindow(QWidget): def __init__(self): super().__init__() @@ -83,7 +83,6 @@ class MainWindow(QWidget): # 下载完成后启用按钮 self.download_button.setEnabled(True) -# 运行应用程序 if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() @@ -95,8 +94,9 @@ if __name__ == "__main__": 以下场景更适合使用 **多线程**: - -1. **与阻塞式 API 交互**。 某些库或 API 是阻塞式的(如某些数据库驱动、硬件接口库),无法直接使用异步编程。在这种情况下,多线程可以避免阻塞主线程。 - +**与阻塞式 API 交互**。 +某些库或 API 是阻塞式的(如某些数据库驱动、硬件接口库),无法直接使用异步编程。在这种情况下,多线程可以避免阻塞主线程。 + import threading import time import sqlite3 @@ -123,12 +123,12 @@ def main(): print("主线程结束") main() - -1. **实时数据处理**。 在实时数据处理场景中(如音频处理、视频流处理),需要快速响应并处理数据,同时保持主线程的响应性。 -2. **任务队列与线程池**。在需要处理大量短期任务的场景中(如 Web 服务器的请求处理),使用线程池可以高效地管理任务。 +**实时数据处理**。 在实时数据处理场景中(如音频处理、视频流处理),需要快速响应并处理数据,同时保持主线程的响应性。 + +**任务队列与线程池**。在需要处理大量短期任务的场景中(如 Web 服务器的请求处理),使用线程池可以高效地管理任务。 -3. **与 C/C++ 扩展交互**。 某些 Python 库是基于 C/C++ 扩展实现的(如 `numpy`、`pandas`),这些扩展可能释放了 GIL,允许在多线程中并行运行。 +**与 C/C++ 扩展交互**。 某些 Python 库是基于 C/C++ 扩展实现的(如 `numpy`、`pandas`),这些扩展可能释放了 GIL,允许在多线程中并行运行。 -4. **需要共享状态的场景**。 在某些场景中,多个任务需要频繁共享和修改状态(如缓存、计数器),使用多线程可以方便地共享内存。 +**需要共享状态的场景**。 在某些场景中,多个任务需要频繁共享和修改状态(如缓存、计数器),使用多线程可以方便地共享内存。