擅长:python、mysql、java
<p>如果您想使用写时拷贝特性,并且您的数据是静态的(在子进程中保持不变),那么您应该让python不处理数据所在的内存块。您可以很容易地通过使用C或C++结构(例如STL)作为容器,并提供自己的Python包装器,当Python级对象将被创建时,它将使用指针指向数据存储器(或者可能复制数据MEM)。
所有这些都可以通过python的简单性和使用<a href="http://cython.org/" rel="noreferrer">cython</a>的语法轻松完成。</p>
<pre>
# pseudo cython
cdef class FooContainer:
cdef char * data
def __cinit__(self, char * foo_value):
self.data = malloc(1024, sizeof(char))
memcpy(self.data, foo_value, min(1024, len(foo_value)))
def get(self):
return self.data
</pre>
<pre>
# python part
from foo import FooContainer
f = FooContainer("hello world")
pid = fork()
if not pid:
f.get() # this call will read same memory page to where
# parent process wrote 1024 chars of self.data
# and cython will automatically create a new python string
# object from it and return to caller
</pre>
<p>上面的伪代码写得不好。别用它。代替Self。在你的情况下数据应该是C或C++容器。</p>