By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,870 Members | 1,224 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,870 IT Pros & Developers. It's quick & easy.

cgi "print statement" in multithreaded enviroment?

P: n/a

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

Jul 19 '05 #1
Share this Question
Share on Google+
5 Replies


P: n/a
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
Jul 19 '05 #2

P: n/a
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
Jul 19 '05 #3

P: n/a
vegetax <ve******@gmail.com> 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')
Jul 19 '05 #4

P: n/a
On Mon, 02 May 2005 20:24:02 -0400, vegetax <ve******@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
Jul 19 '05 #5

P: n/a
Bengt Richter wrote:
On Mon, 02 May 2005 20:24:02 -0400, vegetax <ve******@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


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
Jul 19 '05 #6

This discussion thread is closed

Replies have been disabled for this discussion.