4
A
回答
5
這一切都取決於您的Cython代碼和Python的GIL之間的交互,詳細記錄here。如果你沒有做任何特別的事情,那麼Cython生成的代碼將會尊重GIL(就像一個不使用GIL釋放宏的C編碼擴展)。它使得這樣的代碼「像Python代碼一樣線程安全」 - 這並不多,但比完全自由線程代碼更容易處理(您仍然需要構建多線程合作和同步,理想情況下使用Queue實例,但可能與鎖定& c)。
已放棄GIL並且尚未獲得它的代碼絕不能以任何方式與Python運行時和Python運行時使用的對象進行交互 - 這適用於Cython以及C代碼擴展。當然,這樣的代碼可以在單獨的核心上運行(當然,它需要同步或以任何方式再次與Python運行時進行通信)。
2
Python的全局解釋器鎖意味着,只有一個線程可以在任何一個時間解釋活動的。但是,一旦控制傳遞給C擴展,另一個線程可以在解釋程序中處於活動狀態,可以創建多個線程,並且不會阻止線程在臨界區中間被中斷。代碼可以在解釋器中實現,所以在解釋器中運行的代碼沒有任何內在線程安全的問題,C或Pyrex模塊中的代碼仍然可以修改數據結構python代碼可見。本機代碼當然也可能具有本機數據結構的線程問題。
除了使用適當的設計和同步之外,不能保證線程的安全性 - python解釋器上的GIL並沒有實質性地改變它。
相關問題
- 1. 線程安全的IQueryable擴展方法
- 2. PHP Intl擴展線程安全嗎?
- 3. Python C擴展不是線程安全的嗎?
- 4. 由Visual Studio自動生成的代碼是否線程安全?
- 5. 由FSYacc線程安全生成解析器嗎?
- 6. 如何使用mod_wsgi/django/python生成線程安全的pdf
- 7. TheadFactoryBuilder線程安全生成的ThreadFactory是否安全?
- 8. 生產用春季安全kerberos擴展?
- 9. 使用由Py ++生成的代碼作爲Python擴展
- 10. System.Collections.Concurrent集合上的擴展方法是線程安全的?
- 11. 由HttpHandler生成的JS的安全性
- 12. EF6的DbContext擴展方法,線程安全
- 13. 線程安全的TBB可擴展分配器
- 14. 將PHP擴展編譯爲非線程安全的
- 15. POSIX重入的擴展定義覆蓋線程安全
- 16. 擴展TextBox的UseSystemPasswordChar安全
- 17. 代碼生成擴展不安裝
- 18. 在Python線程安全嗎?
- 19. python WSME和線程安全
- 20. python logger線程安全嗎?
- 21. 嵌入Python線程安全
- 22. Chrome擴展程序登錄安全
- 23. 安全瀏覽器Chrome擴展程序
- 24. Firefox擴展安全策略
- 25. Web API擴展安全
- 26. 擴展Spring安全UsernamePasswordAuthenticationFilter
- 27. Firefox擴展安全問題
- 28. 鉻擴展是否安全?
- 29. java線程安全:線程安全嗎?
- 30. Segfault在C多線程python擴展中