Q
PyGTK非阻塞
2
A
回答
3
在PyGTK中建立一个后台线程是not all that difficult。
1
线程在pygtk中并不是一个好的选择。如果这样做的检查在您昂贵的循环活动主循环,并让它做它的事:
while my_operation_running:
<my code>
while gtk.events_pending():
gtk.main_iteration()
或调整你的昂贵的操作,因此可以使用运行一步一步
glib.idle_add(function)
每次主循环都没有事情做,它会调用“函数”,只是确保函数跟踪它的进度,并且每次调用只进行一次迭代。
0
避免线程,它们在PyGTK中不能很好地工作。一些备选方案:
- 对于您从一个文件描述符读取IO /网络操作,使用 glib.io_add_watch()
- 移动操作过程,并且 使用glib.spawn_async与它通信()
Twisted是一个很好的网络库,它完全无阻塞,并且与PyGTK主循环集成得很好,可以考虑使用它。
相关问题
- 1. mpi:阻塞与非阻塞
- 2. 非阻塞stdio
- 3. 非阻塞pthread_join
- 4. 非阻塞spmd
- 5. 带延迟的阻塞/非阻塞
- 6. 嵌套Socket阻塞非阻塞SocketHi
- 7. 非阻塞PASV袜子和阻塞
- 8. 是renderer.render()阻塞还是非阻塞?
- 9. 非阻塞写入和阻塞recv
- 10. PyGTK阻止非GUI线程
- 11. PyGTK主循环的阻塞行为
- 12. 非阻塞PostgreSQL ORM
- 13. 非阻塞等待
- 14. jQuery each()非阻塞?
- 15. 非阻塞的PipedStreams?
- 16. 非阻塞的getch()
- 17. java.io.BufferedReader.readLine()是非阻塞
- 18. 非阻塞getch(),ncurses
- 19. 非阻塞选择()?
- 20. 非阻塞队列
- 21. C#非阻塞Socket.Connect()
- 22. WPF:非阻塞UI
- 23. Java中的非阻塞CAS是否真的非阻塞?
- 24. 非阻塞TCP服务器
- 25. 使WebSocket发送非阻塞
- 26. C#:非阻塞睡眠
- 27. PHP非阻塞排他锁
- 28. BlackBerry非阻塞UDP API
- 29. 非阻塞变量更新
- 30. 非阻塞文件openat()
在昂贵的操作中手动调用事件循环?不幸的是,我不记得确切的函数名称,你不得不修改代码以用于昂贵的操作,并且我读了某处不推荐它。 –
我认为这可能取决于昂贵的操作是什么(你可以重新编码它?)。我使用'while gtk.events_pending()'方法,任何时候我有一个昂贵的操作,除了文件操作,在这种情况下我使用Gio的'* _async()'方法。 –