基于multiprocessing和threading实现非阻塞的GUI界面显示
环境:python2.7、pyqt4、eric16.11
# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'F:\workspace\pyqt5\gui_thread_pipe_subprocess\qt_main.ui'## Created by: PyQt4 UI code generator 4.11.4## WARNING! All changes made in this file will be lost!from PyQt4 import QtCore, QtGuitry:_fromUtf8 = QtCore.QString.fromUtf8except AttributeError:def _fromUtf8(s):return stry:_encoding = QtGui.QApplication.UnicodeUTF8def _translate(context, text, disambig):return QtGui.QApplication.translate(context, text, disambig, _encoding)except AttributeError:def _translate(context, text, disambig):return QtGui.QApplication.translate(context, text, disambig)class Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName(_fromUtf8("MainWindow"))MainWindow.resize(800, 600)self.centralwidget = QtGui.QWidget(MainWindow)self.centralwidget.setObjectName(_fromUtf8("centralwidget"))self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget)self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))self.textEdit = QtGui.QTextEdit(self.centralwidget)self.textEdit.setObjectName(_fromUtf8("textEdit"))self.verticalLayout.addWidget(self.textEdit)self.horizontalLayout = QtGui.QHBoxLayout()self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)self.horizontalLayout.addItem(spacerItem)self.pushButton = QtGui.QPushButton(self.centralwidget)self.pushButton.setObjectName(_fromUtf8("pushButton"))self.horizontalLayout.addWidget(self.pushButton)spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)self.horizontalLayout.addItem(spacerItem1)self.verticalLayout.addLayout(self.horizontalLayout)MainWindow.setCentralWidget(self.centralwidget)self.menubar = QtGui.QMenuBar(MainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))self.menubar.setObjectName(_fromUtf8("menubar"))MainWindow.setMenuBar(self.menubar)self.statusbar = QtGui.QStatusBar(MainWindow)self.statusbar.setObjectName(_fromUtf8("statusbar"))MainWindow.setStatusBar(self.statusbar)self.retranslateUi(MainWindow)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))self.pushButton.setText(_translate("MainWindow", "star", None))if __name__ == "__main__":import sysapp = QtGui.QApplication(sys.argv)MainWindow = QtGui.QMainWindow()ui = Ui_MainWindow()ui.setupUi(MainWindow)MainWindow.show()sys.exit(app.exec_())
#-*- coding: utf-8 -*-#mainWindow.pyfrom PyQt4 import QtCore, QtGuifrom Ui_qt_main import Ui_MainWindowfrom handleSubprocess import HandleSubProcessimport multiprocessing, threadingclass MainWindow(QtGui.QMainWindow, Ui_MainWindow):def __init__(self):super(MainWindow, self).__init__()self.setupUi(self)#联动按键self.btnStar = "star"self.btnStop = "stop"self.connect(self.pushButton, QtCore.SIGNAL("clicked()"), self.buttonOn)passdef buttonOn(self):if self.btnStar == self.pushButton.text():self.pushButton.setText(self.btnStop)self.starRun()passelif self.btnStop == self.pushButton.text():self.stopRun()self.pushButton.setText(self.btnStar)passpassdef stopRun(self):print "stopRun"if self.p.is_alive():self.p.terminate()self.t1.join(1)passpassdef starRun(self):#print "starRun"parent_conn, child_conn = multiprocessing.Pipe()#子进程self.p = HandleSubProcess(child_conn)self.t1 = threading.Thread(target=self.run_thread, args=(parent_conn,self.p))self.p.start()self.t1.start()passdef run_thread(self, parent_conn, pp):while pp.is_alive:self.textEdit.append(parent_conn.recv())self.delay()passprint "==== run_thread end ==================\n"passdef delay(self, timeout=9999999):cnt = timeoutwhile cnt>0:cnt -= 1passpasspass
#-*- coding: utf-8 -*-#handleSubprocess.pyimport multiprocessingclass HandleSubProcess(multiprocessing.Process):def __init__(self, child_conn):super(HandleSubProcess, self).__init__()self.child_conn = child_connpassdef run(self):cnt = 0while True:self.child_conn.send("handleSubprocess\t"+str(cnt))cnt += 1self.delay()passpassdef delay(self, timeout=9999999):cnt = timeoutwhile cnt>0:cnt -= 1passpasspass
#-*- coding: utf-8 -*-#enterPoint.pyimport sysfrom PyQt4 import QtCore, QtGuifrom mainWindow import MainWindowif __name__ == "__main__":app = QtGui.QApplication(sys.argv)ui = MainWindow()ui.show()sys.exit(app.exec_())
基于multiprocessing和threading实现非阻塞的GUI界面显示的更多相关文章
- Swing做的非阻塞式仿飞秋聊天程序
采用Swing 布局 NIO非阻塞式仿飞秋聊天程序, 切换皮肤颜色什么的小功能以后慢慢做 启动主程序. 当用户打开主程序后自动获取局域网段IP可以在 设置 --> IP网段过滤, 拥有 JMF ...
- Java锁与非阻塞算法的性能比较与分析+原子变量类的应用
15.原子变量与非阻塞同步机制 在java.util.concurrent包中的许多类,比如Semaphore和ConcurrentLinkedQueue,都提供了比使用Synchronized更好的 ...
- 把酒言欢话聊天,基于Vue3.0+Tornado6.1+Redis发布订阅(pubsub)模式打造异步非阻塞(aioredis)实时(websocket)通信聊天系统
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_202 "表达欲"是人类成长史上的强大"源动力",恩格斯早就直截了当地指出,处在蒙昧时代即低 ...
- JAVA基础知识之网络编程——-基于NIO的非阻塞Socket通信
阻塞IO与非阻塞IO 通常情况下的Socket都是阻塞式的, 程序的输入输出都会让当前线程进入阻塞状态, 因此服务器需要为每一个客户端都创建一个线程. 从JAVA1.4开始引入了NIO API, NI ...
- 基于MFC的socket编程(异步非阻塞通信)
对于许多初学者来说,网络通信程序的开发,普遍的一个现象就是觉得难以入手.许多概念,诸如:同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)等,初学者往往迷惑不清, ...
- Spring WebFlux, 它是一种异步的, 非阻塞的, 支持背压(Back pressure)机制的Web 开发WebFlux 支持两种编程风(姿)格(势) 使用@Controller这种基于注解
概述 什么是 Spring WebFlux, 它是一种异步的, 非阻塞的, 支持背压(Back pressure)机制的Web 开发框架. 要深入了解 Spring WebFlux, 首先要了知道 R ...
- Socket-IO 系列(三)基于 NIO 的同步非阻塞式编程
Socket-IO 系列(三)基于 NIO 的同步非阻塞式编程 缓冲区(Buffer) 用于存储数据 通道(Channel) 用于传输数据 多路复用器(Selector) 用于轮询 Channel 状 ...
- 基于CAS操作的非阻塞算法
非阻塞算法(non-blocking algorithms)定义 所谓非阻塞算法是相对于锁机制而言的,是指:一个线程的失败或挂起不应该引起另一个线程的失败或挂起的一种算法.一般是利用硬件 ...
- Java并发包源码学习系列:基于CAS非阻塞并发队列ConcurrentLinkedQueue源码解析
目录 非阻塞并发队列ConcurrentLinkedQueue概述 结构组成 基本不变式 head的不变式与可变式 tail的不变式与可变式 offer操作 源码解析 图解offer操作 JDK1.6 ...
随机推荐
- iOS学习笔记24-不断进化的屏幕适配
一.屏幕适配 iOS的屏幕适配可以分为3大块,代表着不同时期的屏幕适配主流: AutoResizing:在iOS6之前,完全能够胜任,因为当时苹果只有3.5寸屏,加上比较少的支持横屏,它有非常大的局限 ...
- HDU1877 又一版 A+B
Problem Description 输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数. Input 输入格式:测 ...
- HDU——1982Kaitou Kid - The Phantom Thief (1)(坑爹string题)
Kaitou Kid - The Phantom Thief (1) Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/327 ...
- [POI2005]SKA-Piggy Banks (Tarjan缩点)
题目链接 Solution \(Tarjan\) 缩点乱搞. 考虑到环内如果有一个被打开,那么也就全部打开了. 然后很显然入度为 \(0\) 的点需要被砸破. 所以缩点之后找到入度为 \(0\) 的即 ...
- 严格次小生成树[BJWC2010] (树链剖分,倍增,最小生成树)
题目链接 Solution 有几点关键,首先,可以证明次小生成树一定是由最小生成树改变一条边而转化来. 所以需要枚举所有非最小生成树的边\((u,v)\).并且找到 \(u\) 到 \(v\) 的边中 ...
- python语言基础问题汇总
问题汇总 问题分类 怎么在一个python脚本里调用另一个python脚本 把两个脚本filea.py 和 fileb.py 放在同一个目录下,然后在filea.py的开头写: import file ...
- vim的复制粘贴(包括系统剪贴板)
1.vim常用复制粘贴命令 Vim的复制粘贴命令无疑是y (yank),p(paster),加上yy,P PS: vim有个很有意思的约定(我觉得是一种约定),就是某个命令的大小写都是实现某种功能,只 ...
- Solr5.2.1+Zookeeper3.4.9分布式集群搭建
1.选取三台服务器 由于机器比较少,现将zookeeper和solr都部署在以下三台机器上.(以下操作都是在172.16.20.101主节点上进行的哦) 172.16.20.101 主节点 172.1 ...
- 标准C程序设计七---106
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- hdu 3189(网络流+二分枚举)
Steady Cow Assignment Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6422 Accepted: ...