当前位置:
首页 > Python基础教程 >
-
wxPython使用delayedresult进行耗时计算(2)
先看看如在GUI画面主线程进行doSomeThing()处理的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
class DoSomeThingInGUI(TestWindow): def __init__( self ): TestWindow.__init__( self , 'Do Something In GUI Thread' ) self .app.MainLoop() #执行doSomeThing(),并在执行完成后,主动调用consumer()更新画面显示 def workFunction( self , * args, * * kwargs): TestWindow.workFunction( self , args, kwargs) var = self .doSomeThing() self .consumer(var) def consumer( self , delayedResult, * args, * * kwargs): TestWindow.consumer( self , delayedResult, args, kwargs) self .txtCtrl.SetValue( str (delayedResult)) if __name__ = = '__main__' : win = DoSomeThingInGUI() |
执行后,点Begin开始后,直到处理完成画面窗口无法移动。
由以下log输出可以知道,处理都是在GUI画面主线程中完成的。
In workFunction(), Thread= MainThread
*args: ((), {})
**kwargs: {}
In doSomeThing(), Thread= MainThread
*args: ()
**kwargs: {}
In consumer(), Thread= MainThread
delayedResult: 100000000
*args: ((), {})
**kwargs: {}
使用wx.lib.delayedresult后的处理情况:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
class DoSomeThingInSeperateThread(TestWindow): def __init__( self ): TestWindow.__init__( self , 'Do Something In Seperate Thread' ) self .jobId = 100 self .app.MainLoop() #调用wx.lib.delayedresult.startWorker,把函数处理放到单独的线程中去完成。 #完成后会自动调用consumer进行画面更新处理 #startWorker函数的各参数接下来分析 def workFunction( self , * args, * * kwargs): TestWindow.workFunction( self , args, kwargs) startWorker( self .consumer, self .doSomeThing, jobID = self .jobId) #第一参数要为DelayedResult类型,即包含处理结果或异常信息,调用get接口取得。 def consumer( self , delayedResult, * args, * * kwargs): TestWindow.consumer( self , delayedResult, args, kwargs) assert ( self .jobId = = delayedResult.getJobID()) try : var = delayedResult.get() except Exception, e: print 'Result for job %s raised exception:%s' % (delayedResult.getJobID, e) self .txtCtrl.SetValue( str (var)) if __name__ = = '__main__' : win = DoSomeThingInSeperateThread() |
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式