我正在开发一个程序,使用外部C库来解析外部数据,并使用Python库对其进行优化。优化非常耗时,因此使用多个CPU将是一个重要的优势。
基本上,我使用Cython将C(++)结构进行了包装,具体如下:
cdef class CObject(object):
cdef long p_sthg
cdef OBJECT* sthg
def __cinit__(self, sthg):
self.p_sthg = sthg
self.sthg = <OBJECT*> self.p_sthg
def __reduce__(self):
return (rebuildObject, (self.p_sthg, ))
def getManyThings(self):
...
return blahblahblah
然后我创建了我的资源密集型进程:
p = mp.Process(target=make_process, args=((cobject,)))
你可以立即想到(当然我没有),即使我成功解封CObject,指针被传递到新进程,但它所指向的C结构体并没有被传递。
我可以找到一些资源,说明如何将Python对象放入共享内存,但这在我的情况下是不够的,因为我需要在Python进程之间共享我几乎不了解的C对象(以及由顶部CObject指向的其他对象)。
如果有关系的话,好消息是我可以通过只读访问来生存...
有人在这方面有任何经验吗?
我的另一个想法是找到一种方法将我需要传递的对象的二进制表示写入文件,并从另一个进程中读取它...
boost
找到了一些东西,但没有更基本的?)并手动调整剩余指针...我可能有一个特定于我的需求的解决方法(通过从进程中调用数据获取并修剪我需要的内容,更安全!),但仍然希望看到一个在Cython中通过共享内存传递隐藏的std::list<simple>的测试用例... - xoolive