[Python-Dev] Re: [PyWX] RE: PyWX (Python AOLserver plugin)

Titus Brown titus@caltech.edu
Wed, 13 Sep 2000 10:09:42 -0700


-> > There's no easy way to fix the current directory problem.  Just tell
-> > your CGI programmers that os.chdir() is off-limits; you may remove it
-> > from the os module (and from the posix module) during initialization
-> > of your interpreter to enforce this.
-> >
-> 
-> This is probably a good idea.

Finally, he says it ;).

-> > Are you *sure* you are using PyInterpreterState_New() and not just
-> > creating new threads?
-> >
-> Yes.

We're using Py_NewInterpreter().  I don't know how much Brent has said
(I'm not on the python-dev mailing list, something I intend to remedy)
but we have two basic types of environment: new interpreter and reused
interpreter.

Everything starts off as a new interpreter, created using Py_NewInterpreter().
At the end of a Web request, a decision is made about "cleaning up" the
interpreter for re-use, vs. destroying it.

Interpreters are cleaned for reuse roughly as follows (using really ugly
C pseudo-code with error checking removed):

---

PyThreadState_Clear(thread_state);
PyDict_Clear(main_module_dict);

// Add builtin module

bimod = PyImport_ImportModule("__builtin__");
PyDict_SetItemString(maindict, "__builtins__", bimod);

---

Some time ago, I decided not to use PyInterpreterState_New() because it
seemed unnecessary; Py_NewInterpreter() did everything we wanted and nothing
more.  Looking at the code for 1.5.2, Py_NewInterpreter():

1) creates a new interpreter state;
2) creates the first thread state for that interpreter;
3) imports builtin and sys, and sys.modules modules;
4) sets the path;
5) initializes main, as we do above in the reuse part;
6) (optionally) does site initialization.

Since I think we want to do all of that, I don't see any problems.  It seems
like the sys.argv stuff is a problem with PyWX, not with Python inherently.

cheers,
--titus