Philippe C. Martin
pmartin at snakecard.com
Tue Oct 18 20:00:20 EDT 2005
Hi, It took me a while to understand that although I had apache configured to run as me "philippe", doing an os.getenv still returned the root environment variables. Maybe forcing a source of ~/.bashrc ? Regards, Philippe On Tuesday 18 October 2005 11:40 pm, Philippe C. Martin wrote: > On Tuesday 18 October 2005 11:33 pm, Graham Dumpleton wrote: > > Thanks, > > The one good thing is that I cannot afford all of these threads to attack > the only hardware resource (the smart card) at the same time: ISO7816 > simply is not ready for it. > > So I will have to find a way to keep the people waiting and avoid concurent > access. > > Regards, > > Philippe > > > A few additional comments on top of what Jorey has already said. > > > > Philippe C. Martin wrote .. > > > > > Please note that, although I must have bugs, the code I'm calling > > > _seems_ to > > > work flawlessly under Linux and Windows. > > > > Besides issues with multiple interpreters, if using a multithread Apache > > MPM, such as is the case for Win32 systems and "worker" MPM on UNIX, you > > have to contend with multithreading. Your system may work quite happily > > if you trickle requests in serially, but get requests come in at the > > same time and they can trample all over each other if your module isn't > > multithread safe. > > > > There are also various issues because of mod_python's module reloading > > system. Problems can also arise if you use a module which has a C code > > component and it uses the simplified threading C APIs in Python. > > > > There are a lot of gotchas. > > > > > from mod_python import apache > > > import os > > > import sys > > > if os.name == 'nt': > > > sys.path.append("Z:\\dev") > > > else: > > > sys.path.append('/home/philippe/dev') > > > > You shouldn't extend sys.path in Python code when mod_python is used. > > The main reason is that if mod_python reloads the module, everytime that > > occurs then sys.path will be extended even if the directory is already in > > there. Thus, sys.path could grow and grow. This is made worse by bugs > > in mod_python.publisher in versions of mod_python < 3.2. > > > > > from SC.pilot.SC_Script_Processor import * > > > > > > > > > def world(req): > > > ls = SC_Script_Processor() #INSTANTIATE A _BIG_ OBJECT ==> *** > > > THIS IS > > > THE KILLER THAT CRASHES APACHE *** > > > ll = ls.Reader_List() # get the reader list > > > > > > #Grab ATR from card - assume first reader > > > l_appli_conn = ls.Get_Connection(r1) > > > > > > > > > > > > req.send_http_header() > > > > You don't set req.content_type. How is the browser mean't to know what > > to do with the response. You perhaps want: > > > > req.content_type = 'text/plain' > > req.send_http_header() > > > > Although, in 3.X the call to 'req.send_http_header()' is actually > > redundant. It was only required in 2.7.X. > > > > > req.write("RETURN CARD ATR= " + l_appli_conn.Get_Connection_ATR() > > > ) > > > > > > return apache.OK > > > > I have presumed that mod_python.publisher was being used because > > you weren't using "handler()" for the function, but "world()". If this is > > the case, you shouldn't be returning "apache.OK" as it will result in the > > string "0" being appended to the response sent back to the browser. > > > > Overall, better off perhaps saying: > > > > req.content_type = 'text/plain' > > return "RETURN CARD ATR= " + l_appli_conn.Get_Connection_ATR() > > > > Graham -- ************************************* Philippe C. Martin SnakeCard, LLC www.snakecard.com +1 405 694 8098 *************************************
|