簡體   English   中英

運行同時嵌入C ++的python腳本

[英]Run python scripts concurrently embedded in C++

是否有可能運行腳本即。 在單獨的C ++線程中使用PyRun_SimpleFile()使它們同時運行?

我懷疑不是因為GIL。 但是,如果有任何技巧可以實現,請告訴。

最好的問候雅各布

您可以同時運行它們,但是GIL阻止它們並行運行並充分利用多個CPU內核。 如果您主要調度到其他長時間運行的C ++ / CUDA代碼,而這些代碼又會釋放GIL,並且您只有幾個CPU,那么這可能就足夠了。

這將是Sub-Interpreters所采用的方法, Sub-Interpreters是僅共享某些部分的多個主要獨立的python解釋器,但可悲的是,其中包括GIL,因此它對並行處理沒有好處,而在並發運行的腳本之間的隔離也沒有什么好處。 這種方法的一個示例是mod_wsgi

子解釋器是一個很少使用的功能,因此請期待C擴展中不期望它們的怪異錯誤/競爭條件。

如果您說的是C#或Java而不是C ++,則可以使用IronPython或Jython來實現您的目標,因為那些沒有GIL。

使用CPython,您只能安全地執行多處理功能。 多重處理模塊回避了GIL的設計問題,並開始了一個額外的過程,但是,如果您擁有昂貴的共享內存結構並且沒有fork()syscall,則此操作無法實現。

當然,如果您開始研究python實現本身,則可以將所有全局狀態隔離到較小的上下文中。 但是,如果這樣做,您也可能只使用為這種多線程嵌入用例設計的語言,例如Tcl (請看NaviServer或F5s irules )或Lua

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM