PyGTK 非阻塞
有没有办法在执行一些昂贵的操作时不阻止 PyGTK?我知道线程可以工作,但它需要大量的代码和设置。
谢谢,
Is there a way to not block PyGTK while performing some expensive operation? I know threading would work but it would take a lot of code and setup.
Thanks,
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在 PyGTK 中设置后台线程并不是那么困难< /a>.
Setting up a background thread in PyGTK is not all that difficult.
在 pygtk 中线程并不是一个好的选择。只需通过执行检查主循环中昂贵的循环中的事件,并让它做它的事情:
逐步运行
或调整您的昂贵的操作,以便它可以使用每次主循环没有事情可做时 ,它将调用“函数”,只需确保函数跟踪其进度并且在每次调用中仅进行一次迭代。
Threading is not really a good choice in pygtk. Just check the main loop for events in your expensive loop by doing, and let it do its thing:
or tweak your expensive operation so it can be run step-by-step using
Every time main loop doesn't have something to do, it will call "function", just make sure function keeps track of its progress and it makes only one iteration in each call.
避免使用线程,它们在 PyGTK 中根本不能很好地工作。一些替代方案:
glib.io_add_watch()
使用 glib.spawn_async() 与其进行通信
Twisted 是一个很棒的网络库,它是完全非阻塞的,并且与 PyGTK 主循环集成得很好,请考虑使用它。
Avoid threads, they don't work well at all with PyGTK. Some alternatives:
glib.io_add_watch()
communicate with it using glib.spawn_async()
Twisted is a great library for doing networking, which is completely non-blocking and integrates well with the PyGTK mainloop, consider using that.