zj3D 2 months ago
parent 1712e964cf
commit b77d297f3e

@ -1,5 +1,4 @@
### 多线程与异步编程
对于 **I/O 密集型任务****异步编程** 通常比 **多线程** 是更好的选择。异步编程特别适合高并发的 I/O 密集型任务(如 Web 服务器、爬虫、实时通信), 特别是大量并发连接的任务。 对于 **I/O 密集型任务****异步编程** 通常比 **多线程** 是更好的选择。异步编程特别适合高并发的 I/O 密集型任务(如 Web 服务器、爬虫、实时通信), 特别是大量并发连接的任务。
@ -9,13 +8,14 @@
在 GUI图形用户界面应用程序中主线程负责处理用户交互而其他任务如文件读写、网络请求需要在后台运行以避免阻塞主线程导致界面卡顿。多线程可以与 GUI 主线程共享内存方便更新界面状态。线程间通信简单适合处理后台任务。GUI 框架(如 PyQt、Tkinter通常有自己的事件循环与异步编程的事件循环冲突。 在 GUI图形用户界面应用程序中主线程负责处理用户交互而其他任务如文件读写、网络请求需要在后台运行以避免阻塞主线程导致界面卡顿。多线程可以与 GUI 主线程共享内存方便更新界面状态。线程间通信简单适合处理后台任务。GUI 框架(如 PyQt、Tkinter通常有自己的事件循环与异步编程的事件循环冲突。
```python
import sys import sys
import requests import requests
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QLabel from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QLabel
from PyQt5.QtCore import QThread, pyqtSignal from PyQt5.QtCore import QThread, pyqtSignal
# 工作线程:负责下载文件 # 工作线程:负责下载文件
class DownloadThread(QThread): class DownloadThread(QThread):
# 自定义信号,用于通知主线程下载进度 # 自定义信号,用于通知主线程下载进度
progress_signal = pyqtSignal(str) progress_signal = pyqtSignal(str)
@ -40,7 +40,7 @@ class DownloadThread(QThread):
except Exception as e: except Exception as e:
self.progress_signal.emit(f"下载失败: {str(e)}") self.progress_signal.emit(f"下载失败: {str(e)}")
#### 主窗口 #### 主窗口
class MainWindow(QWidget): class MainWindow(QWidget):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
@ -89,7 +89,7 @@ if __name__ == "__main__":
window.show() window.show()
sys.exit(app.exec_()) sys.exit(app.exec_())
</python code> ```
以下场景更适合使用 **多线程** 以下场景更适合使用 **多线程**
Loading…
Cancel
Save