免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2644 | 回复: 7
打印 上一主题 下一主题

pygtk 的消息队列问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-23 03:24 |只看该作者 |倒序浏览
问一个pygtk的消息队列问题。

有2个函数,依次调用,

do_some_python_GUI ()
do_some_heavy_work ()

前一个函数包含一些pygtk的调用,
而后一个函数是一组科学计算,

现在的问题是,在单线程的环境里,

前一个函数的调用,比如控件的添加,删除,显示,
不能及时的完成。

只有在后一个函数完成后,这些控件的操作才能完成。

-------------------------------------------------------


现在的问题是,有没有可能,不采用多线程,

也就是不把GUI和科学计算分开线程的情况下,

有没有什么pygtk的函数可以让GUI的那些消息事件的处理
在科学计算前就完成,而不是等到科学计算后??

感谢!

论坛徽章:
0
2 [报告]
发表于 2008-09-23 11:44 |只看该作者

回复 #1 heavenstar_x 的帖子

对这两个函数的理解:
第一个函数用来显示GUI界面;
第一个函数中某些widget要根据第二个函数的计算结果发生变化。
这么理解不知正确否?
感觉用pyprocessing有可能解决你的问题。主进程运行PyGtk,其他进程运行科学计算函数,通过Queue传递数据

论坛徽章:
0
3 [报告]
发表于 2008-09-23 15:01 |只看该作者
好像不行耶

论坛徽章:
0
4 [报告]
发表于 2008-09-23 20:01 |只看该作者
谢谢楼上2位,
我的要求就是保证对GUI事件的处理,是排在后面大量科学计算之前的。

现在问题已经解决,用了个取巧方法。把原来的代码改成了这个样子。

do_some_python_GUI ()
timer = gobject.time_out( 200, do_some_heavy_work )

就是用了一个定时器,200毫秒以后再运行do_some_heavy_work,

这200毫秒应该足够GUI处理完所有事件消息了。

论坛徽章:
0
5 [报告]
发表于 2008-09-24 10:32 |只看该作者
那do_some_heavy_work每次跑多长时间呢
我觉得
GUI处理消息不是看那个200毫秒
而是看你的do_some_heavy_work每次跑的时间
跑时间长了GUI就会卡
其实用gobject.idle_add()就可以了吧
只是猜测

论坛徽章:
0
6 [报告]
发表于 2008-09-24 20:50 |只看该作者
do_some_python_GUI的最后几行,

就是添加一个label,然后显示“正在科学计算...”的话。

do_some_heavy_work大概要工作十几秒。

原先的情况就是,这个label总是在do_some_heavy_work之后才会被显示。

gobject.idle_add()刚才用了一下,完全可以,多谢ls

论坛徽章:
0
7 [报告]
发表于 2008-09-25 09:41 |只看该作者
>> do_some_heavy_work大概要工作十几秒
我猜在这十几秒内GUI完全失去相应
呵呵

论坛徽章:
0
8 [报告]
发表于 2008-09-25 18:16 |只看该作者
原帖由 bleem1998 于 2008-9-25 09:41 发表
>> do_some_heavy_work大概要工作十几秒
我猜在这十几秒内GUI完全失去相应
呵呵


yes, no response at all.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP