我有兩個函數同時在兩個線程上運行。這兩個函數都調用這個方法PyObject_CallObject(pFunc,pArgs)
來執行兩個不同的python函數。但當我嘗試這樣做時,我得到了access violation reading location
異常。在兩個函數中使用的pFunc
和pArgs
都是本地函數,並且沒有共享數據。還是我如何得到異常?如何同時在兩個不同的線程中執行PyObject_CallObject()?
2
A
回答
2
這是不可能的。您需要在調用任何Python CAPI函數之前獲取全局解釋器鎖(GIL)。只有幾個函數可以在沒有GIL的情況下調用。
https://docs.python.org/2/c-api/init.html#thread-state-and-the-global-interpreter-lock
Python解釋器不是完全線程安全的。爲了支持多線程的Python程序,有一個全局鎖,稱爲全局解釋器鎖或GIL,必須在當前線程可以安全地訪問Python對象之前保留它。沒有鎖定,即使是最簡單的操作也可能導致多線程程序出現問題:例如,當兩個線程同時遞增同一對象的引用計數時,引用計數可能最終只會增加一次而不是兩次。
相關問題
- 1. 與不同的睡眠時間同時運行兩個線程
- 2. 如何在不同線程中同時運行多個QDialog?
- 3. 如何讓兩個線程執行兩個不同的循環或方法?
- 4. 如何在python中同時運行兩個線程?
- 5. 如何在java中同時運行兩個線程
- 6. 如何在目標C中同時運行兩個多線程?
- 7. 如何在Event dispatch線程中同時運行兩個組件?
- 8. 在兩個線程中同時中止()
- 9. 如何讓不同的OpenMP線程執行不同的任務
- 10. 執行多個線程同時
- 11. c#同時執行2個線程
- 12. 如何在不同的線程中運行監聽器或在不同的線程中執行計算
- 13. 執行兩個程序同時
- 14. 同時執行兩個同步方法
- 15. 在不同的線程執行回調
- 16. 如何讓不同的線程在CUDA中執行不同的部分?
- 17. Swift - 如何在同一函數中爲兩個不同的SKNode同時運行兩個動作(線性模式)
- 18. 如何從python中同時執行兩個程序?
- 19. 如何在Android中執行兩個線程時運行第三個線程
- 20. 如何在同一時間運行兩個線程? Qt C++
- 21. 在不同的處理器中並行執行兩個程序
- 22. 在Mysql中執行兩個查詢時不同的錶行數
- 23. 如何在不同的線程中執行QTcpSocket?
- 24. 如何同時運行兩個或多個線程
- 25. 如何同時在不同線程的對象中運行一個方法?
- 26. 的Python - 線程 - 同時執行
- 27. 如何在線程中放置兩個不同的任務
- 28. 如何在Postgresql中同時執行兩個事務?
- 29. 如何在python中同時執行兩個循環?
- 30. 如何在頁面中同時執行兩個更新面板?