簡體   English   中英

如何使用C ++程序在Python中共享數組?

[英]How to share an array in Python with a C++ Program?

我運行了兩個程序,一個用Python編寫,另一個用C ++編寫,我需要在它們之間共享一個二維數組(只是十進制數)。 我目前正在研究序列化,但不幸的是, pickle是特定於python的。 做這個的最好方式是什么?

謝謝

編輯:陣列很可能只有50個元素左右,但數據傳輸需要非常頻繁地發生:每秒60次或更多。

我建議谷歌的protobuf

您可以嘗試使用boost::python使您的應用程序可以互操作。

有關pickle支持和普通boost::python 文檔的一些信息

您可以嘗試在內存映射文件中托管數組,但您需要同步對文件的訪問以避免競爭條件。

或者,您可以在兩個進程之間建立套接字(或管道)連接,並通過交換消息來傳遞值。

你的案例由PyUblas處理得很好, PyUblas是Numpy和Boost.Ublas之間的橋梁,使用Boost.Python。 該橋支持向量和矩陣的無副本傳輸,非常易於使用。

這個陣列有多大? 如果它不是很大,那么JSON序列化是一個很好的選擇。 容易 可用的為C ++和Python有JSON序列在其標准庫作為版本2.6。 有關更多信息,請訪問http://www.json.org/

我建議只使用c數組(通過python端的ctypes)並簡單地通過套接字拉/推原始數據

序列化是一個問題,而IPC是另一個問題。 你有IPC部分嗎? (管道,插座,mmap等?)

關於序列化 - 如果您關注的是性能而不是健壯性(能夠將更多模塊插入到這個架構中)和安全性,那么您應該看一下struct模塊。 這將允許您使用格式字符串將數據打包到C結構中以定義結構(為您處理填充,對齊和字節排序!)在C ++程序中,將指向緩沖區的指針強制轉換為相應的結構類型。

這適用於緊密耦合的Python腳本和僅在內部運行的C ++程序。

暫無
暫無

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

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