[mod_python] COM errors on Win2K3

douglas savitsky dsavitsk at gmail.com
Thu Jun 29 18:09:36 EDT 2006


I have an application that runs on mod_python/apache using the publisher
handler.  It uses an Access db as the backend (yes, I know, but the
amount of data is small so it should be fine) and connects via ADO.
In a
test environment on XP it runs fine, but when on a win2k3 server it will
load one page, but all subsequent page loads throw a
pythoncom.CoInitialize error until I restart the apache.

The structure is that the python script imports a module that contains
the ADO code.

Presumably, this is a threading issue, but I am not sure what the best
approach to fixing it is.  I tried putting
pythoncom.CoInitialize/pythoncom.CoUninitialize calls in the __init__
and __del__ methods of the modules, but this did not work.  Is this
something that needs to be done at a lower level? Should I wrap every
COM call or can I turn off threading somewhere?

This is mod_python 3.2, Python 2.3.5, apache2.0.*, win2k3, ado 2.8, and the
server has 2 processors in case that matters.


The error I get is:

Mod_python error: "PythonHandler mod_python.publisher"

Traceback (most recent call last):

  File "C:\Python23\Lib\site-packages\mod_python\apache.py", line 299, in
HandlerDispatch
    result = object(req)

  File "C:\Python23\Lib\site-packages\mod_python\publisher.py", line 213, in
handler
    published = publish_object(req, object)

  File "C:\Python23\Lib\site-packages\mod_python\publisher.py", line 410, in
publish_object
    return publish_object(req,util.apply_fs_data(object, req.form, req=req))

  File "C:\Python23\Lib\site-packages\mod_python\util.py", line 439, in
apply_fs_data
    return object(**args)

  File "E:\http_server\timeslips\index.py", line 84, in index
    rtn.append(ts_widget.make_employee_picker())

  File "C:\Python23\lib\site-packages\ecptimeslips\ts_widget.py", line 128,
in make_employee_picker
    rs = win32com.client.Dispatch("ADODB.Recordset")

  File "C:\Python23\Lib\site-packages\win32com\client\__init__.py", line 95,
in Dispatch
    dispatch, userName =
dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)

  File "C:\Python23\Lib\site-packages\win32com\client\dynamic.py", line 91,
in _GetGoodDispatchAndUserName
    return (_GetGoodDispatch(IDispatch, clsctx), userName)

  File "C:\Python23\Lib\site-packages\win32com\client\dynamic.py", line 79,
in _GetGoodDispatch
    IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx,
pythoncom.IID_IDispatch)

com_error: (-2147221008, 'CoInitialize has not been called.', None, None)


Even more strangely, with IE it will work for a bit and then die (but
only for one user), with Firefox it never works, and with Mozilla it
is in the middle -- maybe one page and then an error.

?

Thanks,

-d


More information about the Mod_python mailing list