我正在开发一个程序,它使用外部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对象放入共享内存中,但这在我的情况下是不够的,因为我需要共享我几乎不知道的C对象(以及其他指向的对象) Python进程之间的顶级CObject。
如果重要的话,那就是我可以通过只读访问来生存......
有没有人有这方面的经验?
我的另一个想法是找到一种方法来编写我需要传递给文件的对象的二进制表示,并从另一个进程读取它...