【发布时间】:2015-11-18 01:55:58
【问题描述】:
我正在开发一个程序,该程序使用外部 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 对象(以及由顶部 CObject) 之间的 Python 进程。
万一这很重要,好处是我可以通过只读访问来生存......
有人有这方面的经验吗?
我的另一个想法是找到一种方法来编写我需要传递到文件中的对象的二进制表示并从其他进程中读取它......
【问题讨论】:
标签: python cython shared-memory python-multiprocessing