On Thu, 2010-01-21 at 23:42 +0100, "Martin v. Löwis" wrote:
> > With my "downstream distributor of Python" hat on, I'm wondering if it
> > would be feasible to replace the current precompiled .pyc/.pyo files in
> > marshal format with .so/.dll files in platform-specific shared-library
> > format, so that the pre-compiled versions of the stdlib could be
> > memory-mapped and shared between all Python processes on a system.
> 
> I don't think replacing the byte code will be feasible, at least not
> without breaking compatibility (else f.func_code.co_code would stop
> working).

co_code would remain a PyObject* referencing a PyBytesObject instance.

> I also think you are overestimating the potential for sharing: much
> of what lives in pyc files are actual Python objects, which need to
> be reference-counted; doing this in a shared fashion is not feasible.
> 
The struct PyObject instances themselves wouldn't be shared; my idea
(for 2.*) was to introduce a new ob_sstate value into PyStringObject
indicating a pointer into a shared memory area, so that this large
immutable data can be shared; something like this:

typedef struct {
    PyObject_VAR_HEAD
    long ob_shash;
    int ob_sstate;
    union {
      char ob_sval[1];
      char *ob_sdata;
    };

    ...
} PyStringObject;

In Py3k the ob_sstate has gone away (from PyBytesObject), so another
approach would be needed (e.g. add an indirection to PyBytesObject).



_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to