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
|