>>> Viktor Massalogin wrote:
>>>> Is it possible to interrupt the server (paste.httpserver.serve) from
>>>> WSGI
>>>> application? I tried to raise ServerExit, but
>>>> ThreadPoolMixIn.handle_error()
>>>> does not stop the server.
>>> There's nothing very specific, I'm afraid, but probably
>>> KeyboardInterrupt
>>> would work.
>>>
>>> --
>>> Ian Bicking : [EMAIL PROTECTED] : http://blog.ianbicking.org
>>>
>>
>> I have tried:
>> <pre>
>> def application( environ, start_response ):
>> start_response('200 OK', [('Content-type', 'text/plain')])
>> yield "Hello, world"
>> #raise ServerExit
>> raise KeyboardInterrupt
>> </pre>
>> but it seems that
>> ThreadPoolMixIn.process_request_in_thread() in httpserver.py
>> handles the exception:
>> <pre>
>> def handle_error(self, request, client_address):
>> exc_class, exc, tb = sys.exc_info()
>> if exc_class is ServerExit:
>> # This is actually a request to stop the server
>> raise
>> return super(ThreadPoolMixIn, self).handle_error(request,
>> client_address)
>>
>> def process_request_in_thread(self, request, client_address):
>> """
>> The worker thread should call back here to do the rest of the
>> request processing. Error handling normaller done in 'handle_request'
>> must be done here.
>> """
>> try:
>> self.finish_request(request, client_address)
>> self.close_request(request)
>> except:
>> self.handle_error(request, client_address)
>> self.close_request(request)
>
> In trunk I've added code to re-raise KeyboardInterrupt specifically. Maybe
> it'll work now?
>
It doesn't work,
because we need also re-raise KeyboardInterrupt in
ThreadPool::worker_thread_callback()
...
try:
runnable()
except:
...
but all these exceptions are handled in
C:\Python25\Lib\threading.py
Thread::__bootstrap()
...
try:
self.run()
except:
...
and do not come to serve()
Maybe we can stop server manually,
without exceptions,
adding
self.running = False
to this handler:
ThreadPoolMixIn.handle_error():
exc_class, exc, tb = sys.exc_info()
if exc_class is ServerExit:
# This is actually a request to stop the server
raise
return super(ThreadPoolMixIn, self).handle_error(request,
client_address)
?
_______________________________________________
Paste-users mailing list
[email protected]
http://webwareforpython.org/cgi-bin/mailman/listinfo/paste-users