我正在考慮將一些C代碼集成到一個Python系統(Django)中,我正在考慮使用Python/C API。另一種方法是與IPC進行兩個獨立的流程,但我首先關注直接交互。我對Python很陌生,所以我試圖感受一下正確的方向。Python C API和數據持久化在內存中?
是否有可能調用一個C初始化函數到一個內存塊(並放入一些內容),並返回一個句柄返回到Python腳本(指向內存塊的開始的指針)。在init函數返回後,分配的內存應該保留在堆上。然後Python腳本可以調用後續的C函數(作爲參數傳遞指向內存開始的指針),函數可以做一些思考並向Python腳本返回一個值。最後,還有另一個C函數來釋放內存。
假設應用程序是單線程的,並且在init函數之後,內存只讀,所以併發不是問題。內存量將是幾百兆字節。
- 這甚至有可能嗎? Python會讓我從堆中取出
malloc
並允許它留在那裏嗎?它會來自Python進程的內存嗎? Python會嘗試並清除它(即它是否執行其自己的內存分配,並且不希望任何其他進程干擾其地址空間)? - 我可以只是將字節數組作爲Python管理的字符串(或類似的數據類型)返回,並將引用作爲參數傳遞迴C調用? Python可以用這麼大的字符串嗎?
- 對於單獨的流程和IPC來說,我會做得更好嗎?
我不打算在Windows上工作,不知道這是否有所作爲。 – Joe 2010-01-13 20:10:57
(看起來像是跨平臺) – Joe 2010-01-13 20:15:37