我正在创建一个使用Python Twisted的快速应用程序。当用户启动窗口时,我希望启动我编写的Twisted服务器。但是,当我这样做时,它会冻结GUI,因为reactor.run方法在启动后一直在运行。我需要一种方法来启动Twisted反应堆在它自己的线程,这样GUI将继续运行时,反应堆运行。我读过在Twisted文档中使用Twisted with pyGTK的文章,但我不知道如何用一个快速的应用程序来完成这个任务。当窗口打开而不冻结GUI时,启动Twisted服务器的最佳方法是什么?
我在对话框文件末尾的if __name__ == '__main__'语句是:
print 'Preparing GLib'
GLib.idle_add(before_running)
print 'Staring Reactor'
from twisted.internet import reactor
reactor.run()`我在前面的文件中导入并安装了twisted.gtk3reactor。before_running方法包含dialog = ClientDialog()和dialog.show,以及我想在对话框打开时运行的其余代码。
发布于 2012-06-25 13:56:24
如果在12.04或更高版本上使用python-gi绑定,则需要在执行reactor.run()之前导入和安装twisted.internet.gireactor或twisted.internet.gtk3reactor。您还需要使用它作为主循环,而不是自己运行Gtk.main()或GLib.MainLoop().run()。如果您使用的是旧版本并使用旧的PyGTK+绑定,则需要使用glib2reactor或gtk2reactor。
就像这样:
from twisted.internet import gtk3reactor
from gi.repository import GLib
gtk3reactor.install()
GLib.idle_add(create_windows_and_do_stuff_method)
from twisted.internet import reactor
reactor.run()顺序是重要的,因为导入默认的反应堆将导致安装,而不是适当的反应堆,如果反应堆尚未安装。因此,您需要先安装合适的一个,然后执行reactor.run()。而不是Gtk.main_quit(),您应该使用from twisted.internet import reactor并使用reactor.stop()。
https://askubuntu.com/questions/155801
复制相似问题