当有人建议我使用Twisted时,我一直在努力让一些异步活动在PyGTK下工作.
我知道Twisted最初是一个网络框架,但它可以用于其他事情.但是,我见过的每个例子都涉及很多基于网络的代码.我想看一个使用Twisted作为一个简单的PyGTK桌面应用程序的例子,而不需要花费额外的精力来理解网络方面的事情.
那么:是否有一个干净,简单的教程或使用Twisted创建GTK(PyGTK)应用程序并执行异步任务的示例?
(是的,我见过pbgtk2.py.它没有注释,以网络为中心,对新手来说完全不知所措.)
更新:我已经列出了glib.idle_add / gtk.gdk.lock和朋友在Windows下无法正常工作的各种抱怨.这一切都归功于pygtk list – PyGTK需要一些技巧才能在Windows下运行异步行为.
但是,我的观点仍然表明,无论何时我提到在PyGTK中进行异步活动,有人说“不要使用线程,请使用Twisted!”我想知道为什么以及如何.
最佳答案 扭曲执行是pygtk中的异步任务,简单地说是
uses functions,例如gobject.io_add_watch / glib.io_add_watch和gobject.timeout_add / glib.timeout_add(加上其他一些,你在gobject和
glib module中找到它们),所以使用raw没有太大区别如果你不需要网络,pygtk功能或扭曲.
由于添加扭曲与pygtk具有异步任务具有相同的问题,扭曲使用与pygtk相同的循环,因此如果执行某些阻塞任务则会被阻止!
最好的办法是使用glib functions中的一个基本上用于处理这种情况.
我已经在一个应用程序中测试了在扭曲的pygtk的窗口下的正确行为,但我避免做阻塞的东西(从大文件中最大读取,每块大块的块基本上使用glib.idle_add或glib.io_add_watch,在扭曲使用的东西的意义上像那样).
例如,我不确定使用glib.io_add_watch产生进程和处理stdout似乎不起作用.我写了一个article on my blog来处理pygtk中异步进程的执行,虽然它可能取决于版本,但不太确定它在Windows上有效.