|
Bryan
belred at gmail.com
Sat Aug 19 23:21:35 EDT 2006
Graham Dumpleton wrote:
>
>> For a start, which version of mod_python are you using? There were some
>> important changes in mod_python 3.2.8 to allow third party modules for
>> Python to work properly where those third party modules used the simple
>> GIL API for thread management.
>
> Whoops, that should be mod_python 3.2.10. Not 3.2.8.
>
> Graham
hi graham,
we are using mod_python 3.2.10. you are right that we are doing something
similar to mod_python in that we fully embed python to process requests using
our protocol. the difference is that our main protocol and message dispatcher
has nothing to do with apache and can plug into our own proprietary server as
well as 3rd party servers. our mod_xxx module is really just an adapter to let
our dispatcher plug into apache. and our python adapter is a plug into our
dispatcher along with other language adapters. this is a snippet of our code
and shows you where the failure is. the failure occurs in the start function
and g_py_main_interpreter returned by PyThreadState_Swap(NULL) is NULL. i
wouldn't mind grabbing your latest code from svn and looking at your new API,
except that i'm not sure using experimental code at this phase of development
process would be wise. also, if i read what you wrote correctly, i would need
to tie our code to use the mod_python framework and i'm not willing to do that
since our python adapter has no knowledge of apache. unless i'm wrong, i
believe the only real solution at this point is to use two apache processes.
one that includes mod_python which we use for cgi gui apps, and the other with
our dispatcher so there would be no conflicts. this wouldn't be an optimal
solution, but it's doable.
this is an example of our python adapter code and http.conf
--- mod_xxx ---
// this is an example of start
if (!Py_IsInitialized()) {
Py_Initialize();
}
PyEval_InitThreads();
g_py_main_interpreter = PyThreadState_Swap(NULL);
PyThreadState_Swap(g_py_main_interpreter);
PyEval_ReleaseLock();
if (g_py_main_interpreter) {
log("PyThreadState_Swap(NULL) succeeded");
}
else {
log("PyThreadState_Swap(NULL) failed");
}
// this is an example of the main processing
PyEval_AquireLock();
py_interp = Py_NewInterpreter();
PyThreadState_Swap(py_interp);
... do normal python stuff here including executing python scripts
PyThreadState_Swap(NULL);
PyEval_ReleaseLock();
// this is an example of stop
PyThreadState_Swap(g_py_main_interpreter);
Py_Finalize();
g_py_main_interpreter = NULL
---- apache's http.conf ----
LoadFile "c:/Program Files/Common Files/Company/python/python24/python24.dll
LoadModule python_module "../apache/bin/mod_python.so"
LoadModule mod_xxx "bin/mod_xxx.dll
Listen 4119
<VirtualHost _default_:4119>
<Directory "C:/Program Files/company/htdocs/xxx">
SetHandler mod_python
PythonHandler mod_python.publisher
PythonDebug Off
</Directory>
</VirtualHost>
bryan
|