Can code objects outlive the interpreter that created them?
Thomas Jollans
thomas at jollans.com
Tue Jun 15 17:19:02 EDT 2010
On 06/15/2010 10:51 PM, Andy Jost wrote:
> Hi,
>
>
>
> I’m working on an application program that embeds Python using the
> C-API. Sometimes, I need to call functions written in pure Python from
> the C code, so I use Py_CompileString and PyEval_EvalCode.
I'd recommend putting your Python code in a module that your C code can
import. You can let the interpreter itself take care of compiling the
code, and call out from C to Python with PyImport_ImportModule,
PyObject_GetAttrString, PyObject_Call, and functions like that.
>
>
> I would like to avoid compiling the same code over and over by storing
> the result of Py_CompileString in a static variable, however, the
> application does sometimes restart the Python interpreter.
>
> My question: is the PyCodeObject * returned from Py_CompileString still
> valid after Python is restarted?
The short answer is: no.
You usually handle just a pointer. I'd expect that the interpreter frees
all objects on shutting down, so your pointer would no longer be valid.
(then again, this is pure guesswork). You could probably deep-copy the
code struct itself, but it's probably not worth the hassle.
If using a module as I suggested above isn't an option for some obscure
reason, you can always marshal (or pickle) the code -- then it can
certainly outlive the interpreter.
Thomas
More information about the Python-list
mailing list