【多线程】python界面阻塞,白屏,not responding解决的简单例子

简介: 1 # -*- coding: utf-8 -*- 2 3 import sys, time 4 from PyQt4.QtCore import * 5 from PyQt4.QtGui import * 6 x = 0 7 class Window(QWidget): 8 def __init__(self, parent = None): 9 QWidget.
 1 # -*- coding: utf-8 -*-
2
3 import sys, time
4 from PyQt4.QtCore import *
5 from PyQt4.QtGui import *
6 x = 0
7 class Window(QWidget):
8 def __init__(self, parent = None):
9 QWidget.__init__(self, parent)
10 self.thread = Worker()
11
12 # 提示信息
13 self.xLable = QLabel("Number of xTimes:")
14 # 下拉框
15 self.spinBox = QSpinBox()
16 self.spinBox.setMaximum(100)
17 self.spinBox.setValue(10)
18 self.startButton = QPushButton(self.tr("&Start"))
19 # 布局
20 layout = QGridLayout()
21 layout.addWidget(self.xLable, 0, 0)
22 layout.addWidget(self.spinBox, 0, 1)
23 layout.addWidget(self.startButton, 0, 2)
24 self.setLayout(layout)
25 # 标题
26 self.setWindowTitle(self.tr("Threading"))
27
28 # 信号
29 self.connect(self.thread, SIGNAL("finished()"), self.finishSend)
30 self.connect(self.thread, SIGNAL("update(int)"), self.updateGUIStatus)
31 self.connect(self.startButton, SIGNAL("clicked()"), self.sendAdvMail)
32
33 def sendAdvMail(self):
34 self.spinBox.setReadOnly(True)
35 self.startButton.setEnabled(False)
36 #传递值到线程中
37 self.thread.render(self.spinBox.value())
38
39 def updateGUIStatus(self, leftTime):
40 self.xLable.setText(str(leftTime))
41
42 def finishSend(self):
43 self.spinBox.setReadOnly(False)
44 self.startButton.setEnabled(True)
45
46 class Worker(QThread):
47 def __init__(self, parent = None):
48 QThread.__init__(self, parent)
49 self.exiting = False
50 self.xTimes = 0
51
52 def __del__(self):
53 self.exiting = True
54 self.wait()
55
56 def render(self, xTimes):
57 self.xTimes = xTimes
58 self.start()
59
60 def run(self):
61 # Note: This is never called directly. It is called by Qt once the
62 # thread environment has been set up.
63 n = self.xTimes
64 while not self.exiting and n > 0:
65 time.sleep(1)
66 #该信号引起界面更新
67 n -= 1
68 self.emit(SIGNAL("update(int)"), n)
69
70
71 if __name__ == "__main__":
72 app = QApplication(sys.argv)
73 window = Window()
74 window.show()
75 sys.exit(app.exec_())


编辑器加载中...

目录
相关文章
|
2月前
|
并行计算 安全 Java
Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
在Python开发中,GIL(全局解释器锁)一直备受关注。本文基于CPython解释器,探讨GIL的技术本质及其对程序性能的影响。GIL确保同一时刻只有一个线程执行代码,以保护内存管理的安全性,但也限制了多线程并行计算的效率。文章分析了GIL的必要性、局限性,并介绍了多进程、异步编程等替代方案。尽管Python 3.13计划移除GIL,但该特性至少要到2028年才会默认禁用,因此理解GIL仍至关重要。
163 16
Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
|
26天前
|
Python
python3多线程中使用线程睡眠
本文详细介绍了Python3多线程编程中使用线程睡眠的基本方法和应用场景。通过 `time.sleep()`函数,可以使线程暂停执行一段指定的时间,从而控制线程的执行节奏。通过实际示例演示了如何在多线程中使用线程睡眠来实现计数器和下载器功能。希望本文能帮助您更好地理解和应用Python多线程编程,提高程序的并发能力和执行效率。
53 20
|
5月前
|
安全 数据处理 开发者
Python中的多线程编程:从入门到精通
本文将深入探讨Python中的多线程编程,包括其基本原理、应用场景、实现方法以及常见问题和解决方案。通过本文的学习,读者将对Python多线程编程有一个全面的认识,能够在实际项目中灵活运用。
|
13天前
|
数据采集 Java 数据处理
Python实用技巧:轻松驾驭多线程与多进程,加速任务执行
在Python编程中,多线程和多进程是提升程序效率的关键工具。多线程适用于I/O密集型任务,如文件读写、网络请求;多进程则适合CPU密集型任务,如科学计算、图像处理。本文详细介绍这两种并发编程方式的基本用法及应用场景,并通过实例代码展示如何使用threading、multiprocessing模块及线程池、进程池来优化程序性能。结合实际案例,帮助读者掌握并发编程技巧,提高程序执行速度和资源利用率。
20 0
|
4月前
|
数据采集 存储 数据处理
Python中的多线程编程及其在数据处理中的应用
本文深入探讨了Python中多线程编程的概念、原理和实现方法,并详细介绍了其在数据处理领域的应用。通过对比单线程与多线程的性能差异,展示了多线程编程在提升程序运行效率方面的显著优势。文章还提供了实际案例,帮助读者更好地理解和掌握多线程编程技术。
|
3月前
|
Java API 调度
【JavaEE】——多线程(join阻塞,计算,引用,状态)
【JavaEE】——多线程,join,sleep引起的线程阻塞,多线程提升计算效率,如何获取线程的引用和状态
|
4月前
|
并行计算 数据处理 调度
Python中的并发编程:探索多线程与多进程的奥秘####
本文深入探讨了Python中并发编程的两种主要方式——多线程与多进程,通过对比分析它们的工作原理、适用场景及性能差异,揭示了在不同应用需求下如何合理选择并发模型。文章首先简述了并发编程的基本概念,随后详细阐述了Python中多线程与多进程的实现机制,包括GIL(全局解释器锁)对多线程的影响以及多进程的独立内存空间特性。最后,通过实例演示了如何在Python项目中有效利用多线程和多进程提升程序性能。 ####
|
4月前
|
Java Unix 调度
python多线程!
本文介绍了线程的基本概念、多线程技术、线程的创建与管理、线程间的通信与同步机制,以及线程池和队列模块的使用。文章详细讲解了如何使用 `_thread` 和 `threading` 模块创建和管理线程,介绍了线程锁 `Lock` 的作用和使用方法,解决了多线程环境下的数据共享问题。此外,还介绍了 `Timer` 定时器和 `ThreadPoolExecutor` 线程池的使用,最后通过一个具体的案例展示了如何使用多线程爬取电影票房数据。文章还对比了进程和线程的优缺点,并讨论了计算密集型和IO密集型任务的适用场景。
163 4
|
5月前
|
Python
Python中的多线程与多进程
本文将探讨Python中多线程和多进程的基本概念、使用场景以及实现方式。通过对比分析,我们将了解何时使用多线程或多进程更为合适,并提供一些实用的代码示例来帮助读者更好地理解这两种并发编程技术。
|
4月前
|
监控 JavaScript 前端开发
python中的线程和进程(一文带你了解)
欢迎来到瑞雨溪的博客,这里是一位热爱JavaScript和Vue的大一学生分享技术心得的地方。如果你从我的文章中有所收获,欢迎关注我,我将持续更新更多优质内容,你的支持是我前进的动力!🎉🎉🎉
55 0

热门文章

最新文章