cgi "print statement" in multithreaded enviroment?
Bengt Richter
bokr at oz.net
Mon May 2 22:26:32 EDT 2005
On Mon, 02 May 2005 20:24:02 -0400, vegetax <vegeta.z at gmail.com> 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
More information about the Python-list
mailing list