我想在同一个应用程序中使用 Twisted 和 GTK+。我正在使用 gtk2reactor,使我的所有代码都正确地非阻塞,并且通常它工作得很好。
但是,当我运行 (HTTP) 下载时,GUI 变得无响应且滞后。就好像某些东西在扭曲的块中(在很短的时间内)并且反应器没有足够频繁地处理 GTK 事件。基本上,我正在使用:
factory = twc.HTTPDownloader(url, filename)
reactor.connectTCP(host, port, factory)
这是一个小 PyGtk 程序来演示这个问题。我那里只有一个虚拟进度条来显示一些动画,但在成熟的程序中问题也很明显。只要下载正在运行,滚动或在 GtkNotebook 选项卡之间切换时就会出现明显的延迟。
这是预期的,还是我做错了什么?我以前做过 GTK + Twisted 应用程序,但从未注意到这一点,但我也从未在 twisted 中传输过较大的文件(~300 MB)。也许在将控制权交还给主循环之前,twisted 选择了太大的块大小并保持忙碌太久(〜 100 毫秒?)?我应该为 GTK 和扭曲循环使用单独的线程吗?