Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > cgi "print statement" in multithreaded enviroment?

Reply
Thread Tools

cgi "print statement" in multithreaded enviroment?

 
 
vegetax
Guest
Posts: n/a
 
      05-03-2005

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 =)

 
Reply With Quote
 
 
 
 
Irmen de Jong
Guest
Posts: n/a
 
      05-03-2005
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
 
Reply With Quote
 
 
 
 
vegetax
Guest
Posts: n/a
 
      05-03-2005
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


 
Reply With Quote
 
Paul Rubin
Guest
Posts: n/a
 
      05-03-2005
vegetax <(E-Mail Removed)> writes:
> But i want to use "print" as a commodity feature, print >>
> self.response,'html..' is longer to type than
> self.response.write('html..')


w = self.response.write

w('html...')
w('more html...')
w('still more html')
 
Reply With Quote
 
Bengt Richter
Guest
Posts: n/a
 
      05-03-2005
On Mon, 02 May 2005 20:24:02 -0400, vegetax <(E-Mail Removed)> 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
 
Reply With Quote
 
vegetax
Guest
Posts: n/a
 
      05-03-2005
Bengt Richter wrote:

> On Mon, 02 May 2005 20:24:02 -0400, vegetax <(E-Mail Removed)> 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


Something like this:

class ThreadSpecificFile:
*********def*__init__(s):
*************self.files*=*[]
*********def*set_stdout(f,thread_id):
*************self.files[thread_id]*=*f
*********def*clean_up(thread_id):
*************del*self.files[thread_id]
*********def*write(data):
*************self.files[thread.get_ident()].write(data)

sys.stdout = ThreadSpecificFile()

Should be a lock for self.files and i am not sure how to make
thread.get_ident() atomic


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: cgi "print statement" in multithreaded enviroment? vegetax Python 1 05-03-2005 02:35 PM
Child Thread Can't Write To Session In Multithreaded ASP.NET =?Utf-8?B?Q2hyaXM=?= ASP .Net 2 06-04-2004 09:14 PM
Every ASP.NET application - a multithreaded windows app? Pavils Jurjans ASP .Net 7 06-02-2004 05:07 PM
Re: Sessions variable access in multithreaded asp.net Natty Gur ASP .Net 3 08-05-2003 12:55 PM
Re: Sessions variable access in multithreaded asp.net David Browne ASP .Net 1 07-29-2003 03:59 AM



Advertisments