On Mon, 02 May 2005 20:24:02 -0400, vegetax <[EMAIL PROTECTED]> wrote:
>Irmen de Jong wrote: > >> vegetax wrote: >>> How can i use cgi'like print statement in a multitreaded web framework? >>> each thread has its own Servlet instance with request/response objects, >>> sys.stdout = self.response(which is a file like object) wont work because >>> all threads will set the same file object and it will be a concurrence >>> mess. >>> >>> I am out of ideas here,so any hacks welcome =) >>> >> >> instead of: >> >> print "<html>.....</html> >> >> do: >> >> print >>self.response, "<html>....</html>" >> >> >> --Irmen > >But i want to use "print" as a commodity feature, print >> >self.response,'html..' is longer to type than >self.response.write('html..') > >The only clear way i am thinking right now is to write a preprocessor ,like >quixote ptl,but thats sloww > Maybe assign an object to sys.stdout that has write etc methods that check what thread is calling and use self.response things that you assign to a property of that sys.stdout object instead of directly to sys.stdout. I.e., something like sys.stdout = my_stdout_dispatcher ... # property out_channels stores self.response with thread id: sys.stdout.out_channels = self.response(which is a file like object) ... # print => sys.stdout.write => my_stdout_dispatcher.write('from some thread') # which atomically looks up right self.response print 'from some thread' You may need some lock stuff to do this properly (to make self.response lookup info access effectively atomic), but that's a general idea. I don't know what other thread interaction issues you may have with the state of possibly mutable data being printed. This is just an idea for an approach. I may not be understanding your problem at all ;-) Regards, Bengt Richter -- http://mail.python.org/mailman/listinfo/python-list