pygtk 的消息队列问题

pygtk 的消息队列问题

问一个pygtk的消息队列问题。

有2个函数,依次调用,

do_some_python_GUI ()
do_some_heavy_work ()

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

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

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

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

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


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

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

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

感谢!
对这两个函数的理解:
第一个函数用来显示GUI界面;
第一个函数中某些widget要根据第二个函数的计算结果发生变化。
这么理解不知正确否?
感觉用pyprocessing有可能解决你的问题。主进程运行PyGtk,其他进程运行科学计算函数,通过Queue传递数据
好像不行耶
谢谢楼上2位,
我的要求就是保证对GUI事件的处理,是排在后面大量科学计算之前的。

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

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

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

这200毫秒应该足够GUI处理完所有事件消息了。
那do_some_heavy_work每次跑多长时间呢
我觉得
GUI处理消息不是看那个200毫秒
而是看你的do_some_heavy_work每次跑的时间
跑时间长了GUI就会卡
其实用gobject.idle_add()就可以了吧
只是猜测
do_some_python_GUI的最后几行,

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

do_some_heavy_work大概要工作十几秒。

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

gobject.idle_add()刚才用了一下,完全可以,多谢ls
>> do_some_heavy_work大概要工作十几秒
我猜在这十几秒内GUI完全失去相应
呵呵


QUOTE:
原帖由 bleem1998 于 2008-9-25 09:41 发表
>> do_some_heavy_work大概要工作十几秒
我猜在这十几秒内GUI完全失去相应
呵呵

yes, no response at all.