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. 非阻塞django?
- 3. 非阻塞setTimeout
- 4. 非阻塞spmd
- 5. 非阻塞pthread_join
- 6. Javascript非阻塞
- 7. 非阻塞stdio
- 8. 帶延遲的阻塞/非阻塞
- 9. 嵌套Socket阻塞非阻塞SocketHi
- 10. 非阻塞PASV襪子和阻塞
- 11. 是renderer.render()阻塞還是非阻塞?
- 12. 非阻塞寫入和阻塞recv
- 13. PyGTK阻止非GUI線程
- 14. PyGTK主循環的阻塞行爲
- 15. 非阻塞連接
- 16. 非阻塞的PipedStreams?
- 17. WPF:非阻塞UI
- 18. C#非阻塞Socket.Connect()
- 19. 非阻塞隊列
- 20. jQuery each()非阻塞?
- 21. 非阻塞的getch()
- 22. 非阻塞等待
- 23. 非阻塞MongoDB + NodeJS
- 24. java.io.BufferedReader.readLine()是非阻塞
- 25. 非阻塞getch(),ncurses
- 26. 非阻塞選擇()?
- 27. 非阻塞PostgreSQL ORM
- 28. 非阻塞方式
- 29. 使Javascript非阻塞
- 30. 非阻塞線程
在昂貴的操作中手動調用事件循環?不幸的是,我不記得確切的函數名稱,你不得不修改代碼以用於昂貴的操作,並且我讀了某處不推薦它。 –
我認爲這可能取決於昂貴的操作是什麼(你可以重新編碼它?)。我使用'while gtk.events_pending()'方法,任何時候我有一個昂貴的操作,除了文件操作,在這種情況下我使用Gio的'* _async()'方法。 –