簡體   English   中英

如何使用 c++ boost::interprocess 庫通過命名共享 memory 與 Python 通信?

[英]How to use c++ boost::interprocess library to communicate with Python through named shared memory?

目的:讓c++進程與本機上的python進程進行通信,打算使用共享的memory進行通信。 C++使用boost::interprocess庫通過shared_memory_object創建一個命名共享memory,並向其中寫入數據,而python則讀取相應的數據。

問題:python如何根據c++中對應的共享memory的名稱訪問數據?

這是我寫的剪輯:

          struct test_datas {
            char name[128];
            char sender[128];
            union u_data {
                char s1_[1024];
                long l1_;
                double d_;
            } u_member;
        };
        
        void write_shared_memory() {
            using namespace boost::interprocess;
            shared_memory_object shdmem(open_or_create , "monika", read_write);
            shdmem.truncate(sizeof(test_datas));
            mapped_region region(shdmem , read_write);
        
            auto *data_ptr = static_cast<test_datas *>(region.get_address());
            sprintf(data_ptr->name , "%s" , "named");
            sprintf(data_ptr->sender , "%s" , "myself");
            data_ptr->u_member.d_ = 66.890;
    }

這是對應的 Python 代碼:

    from multiprocessing import shared_memory
    
    if __name__ == "__main__":
        shm_a = shared_memory.SharedMemory(name="monika", create=False)
        buffer = shm_a.buf
        print(buffer[0])

    error: FileNotFoundError: [WinError 2] The system cannot find the file specified: 'monika'

假設這里是 POSIX(例如 Linux),兩者都創建 SHM“文件”,所以說 Ubuntu /dev/shm/monika。

但是,默認情況下 Python 似乎會嘗試清理它。 請參閱文檔

當一個進程不再需要訪問其他進程可能仍需要的共享 memory 塊時,應調用 close() 方法。

但是,這表明 Python 共享 memory 設施的通用性遠低於通常情況,例如,共享 memory 在退出時刪除

暫無
暫無

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

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