我將Python嵌入到多線程C++應用程序中,在多線程中調用 Py_Initialize()
是否安全?或者我應該在主線程中調用它?在多線程中調用Py_Initialize()
回答
的Py_Initialize()
代碼包含:
if (initialized)
return;
initialized = 1;
該函數的文檔也說:
這是一個無操作時,要求第二時間(不先調用Py_Finalize())。
我的建議雖然只是從主線程來做,儘管取決於你在做什麼,它可能會變得複雜。
問題是信號處理程序只在主Python線程的上下文中觸發。也就是說,無論什麼線程都可以稱爲Py_Initialize()
。所以如果這是一個暫時的線程,並且只使用一次然後丟棄,那麼就沒有機會調用信號處理程序。所以你必須考慮一下你如何處理信號。
還要小心使用本地線程API在C代碼中創建大量瞬態線程,並調用Python解釋器,因爲每個線程都將在Python解釋器中創建數據。如果繼續創建並丟棄這些外部線程,這將會累積。你應該努力使用線程池,而不是從外部線程調用,並保持重用之前的線程。
如果在多個線程中調用了'Py_Initialize()',如果一個線程正在讀取此變量'initialized'而另一個線程將其寫入'1',如何保證線程安全? – Allanqunzi
是的,那可能是另一個問題。在這種情況下,你需要在調用''Py_Initialize()''時使用一個互斥鎖。 –
- 1. 在多線程程序中調用fftw
- 2. 多線程,可調用,FutureObject
- 3. WCF多線程調用
- 4. 多線程函數調用
- 5. 多線程調用委託
- 6. OpenCV的多線程調用
- 7. 在PowerShell中使用多線程一次調用多個URL
- 8. 使用JNI從多線程調用Java,多線程
- 9. Unity3d中的多線程腳本調用
- 10. Ruby中的多線程系統調用
- 11. 在.net中調試多線程環境
- 12. 在多線程中調度任務
- 13. 在eclipse中調試多線程
- 14. 在Android中調用線程
- 15. 多線程調用函數定義在C從TCL線程
- 16. 調試多線程程序
- 17. 調試多線程程序
- 18. 調試多線程程序
- 19. 多線程(在python中)與多次調用腳本相同嗎?
- 20. 爲什麼調用線程數比在C程序中執行線程數多?
- 21. 調試多線程應用程序
- 22. 從多線程程序調用系統()
- 23. 麻煩在ActiveX多線程調用javascript回調例程
- 24. 在多線程信號處理程序中調用fflush?
- 25. 在多線程Swing程序中頻繁調用setText()
- 26. 在STA線程中使用多線程COM對象線程
- 27. 多線程WebRequest調用和爭用
- 28. 使用線程多次調用方法
- 29. 使用多線程調用URL
- 30. 如何在同一類中使用多線程Java多線程?
可能重複[是否線程安全地修改靜態變量?](http://stackoverflow.com/questions/43837721/is-it-thread-safe-to-modify-a-static-variable) –
你已經問過這個問題;儘管重點不同。請參考我的答案重複。 –