python编程(GUI线程和工作线程的同步)

综合编程 2017-12-31

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

一般来说,编写gui客户端之外,都要编写几个work thread。因为如果只有一个gui thread,在某些socket或者低速io操作的时候,速度是非常慢的,所以这个时候建议多开几个thread,增加用户体验。

增加几个work thread本身没有问题,但是gui和工作线程沟通是一个问题。一般来说,常用的方法就是在gui线程起一个timer,定时通过queue数据看一下work thread进展如何。这样虽然麻烦一点,至少逻辑上比较保险。今天看了一下wxpython下的处理办法,它使用CallAfter和CallLater、PostEvent这三个方法实现的,还是很受启发的。

1、CallAfter调用

CallAfter调用很简单,就是work thread调用CallAfter之后,GUI thread来看这个注册的函数和变量,整个流程都是GUI自己完成的,数据也是异步交互的。

#!/usr/bin/python

import os
import sys
import wx

app=wx.App()
f=wx.Frame(None)
f.Show()

def process(data):
    f.Close()

wx.CallAfter(process, '123')
app.MainLoop()

2、CallLater调用

CallLater比CallAfter多一个时间参数,参数的基本单位是ms。所以,这里适用于进展比较缓慢的io操作,一般代码是这样的,

#!/usr/bin/python

import os
import sys
import wx

app=wx.App()
f=wx.Frame(None)
f.Show()

def process(data):
    f.Close()

wx.CallLater(3000, process, '123')
app.MainLoop()

3、PostEvent方法

还有一种方法,就是PostEvent方法。用这种方法有两个地方要注意一下。第一个地方,就是在frame里面需要用 Connect
函数将event_id和event_handler绑定在一起。第二个地方,就是work thread中先 SetEventType
,然后在线程run的时候通过 PostEvent
发送出去就可以了。这样event_handler函数收到信息后,就可以在GUI线程里面继续处理了。具体的使用法法,可以查看这两个 链接1
连接2

4、总结

这三种方法都适合gui线程和work thread交互,难易程度依次递增,大家可以根据自己的需求灵活加以运用。

责编内容by:平凡的程序员 (源链)。感谢您的支持!

您可能感兴趣的

NLTK学习笔记(一):语言处理和Python 目录 nltk资料下载 import nltk nltk.download() 其中, download() 参数默认是all,可以在脚本里面加上 nltk.download(需要的资料库) 来进行下载 文本和词汇 首先,通过 from nl...
Obtain items from the list using the index of a li... Question: I have a list of arrays such as: a = ), array()] From another variable X, I want to take two subsets which are chosen by the index in ...
爬数据,能让你少写1000行代码的捷径! | Python 正则表达式... ▌春暖花开,又到了出门游玩拍拍拍吃吃吃的好季节了! 说到拍照摄影,你会构图吗?就是在照片有限的空间内处理人、景、物的关系,并将三者安排在画面中最佳的位置,以形成画面特定结构的方法。 学院君就是一个「拍啥啥变形」的摄影黑洞……心塞到无法呼吸.jpg 为了能够框出特定的凸出的...
阅读|《Python编程从入门到实践》第9天 User:你好我是森林 Date:2018-03-22 Mark:书籍《Python编程从入门到实践》 Python编程从入门到实践 第八章 函数(二) 传递列表 向函数传递列表很有用,这种列表包含的可能是名字、数字或更复杂的对象(如字...
A Gentle Introduction to Data Visualization Method... Sometimes data does not make sense until you can look at in a visual form, such as with charts and plots. Being able to quickly visualize your da...