You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@thrift.apache.org by Francisco Byun <co...@gmail.com> on 2011/09/02 21:46:26 UTC

Re: Python Server Stop

Well, thanks Dvir for letting me try to look into the thrift python TServer
implementation code (server/TServer.py).

*class TSimpleServer(TServer):*
*  def serve(self):*
*    self.serverTransport.listen()*
*    while True:*
*      client = self.serverTransport.accept()*
*      itrans = self.inputTransportFactory.getTransport(client)*
*      otrans = self.outputTransportFactory.getTransport(client)*
*      iprot = self.inputProtocolFactory.getProtocol(itrans)*
*      oprot = self.outputProtocolFactory.getProtocol(otrans)*
*      try:*
*        while True:*
*          self.processor.process(iprot, oprot)*
*      except TTransport.TTransportException, tx:*
*        pass*
*      except Exception, x:*
*        logging.exception(x)*
*
*
*      itrans.close()*
*      otrans.close()*

So using TSimpleServer, it's not possible to raise any exception that could
fight against that "except Exception, x" line. Actually it's nearly same
situation on other TServer implementations.

I think maybe one can define TThriftShutdownRequest exception and let
TServer implementations would return when it is raised. Would this be
possible? If it make sense, could I open a JIRA issue about this, providing
a patch with it?

(I'm very new to open-source group)


2011/8/31 Dvir Volk <dv...@doat.com>

> well, you could always do (assuming you have 2 threads)
>
> on the serving thread, you start with this function:
> def startServer()
>  try:
>    #init code yada yada
>
>    #start it up!
>    server.serve()
>  except (SystemExit, KeyboardInterrupt):
>    #any shutdown code, closing sockets goes here
>    return
>
>
> and on the other thread:
> raise SystemExit
>
> or even serverthread.terminate()
>
>
>
>
>
>
> On Tue, Aug 30, 2011 at 9:51 PM, Francisco Byun <co...@gmail.com>
> wrote:
> > Same question here.
> >
> > I'm trying to write a test code for our project, which temporarily
> creates a
> > TServer object and serve() it on a thread, and perform test codes, and
> then
> > terminate it. But I just can't figure out howto. I think if TServer
> > implementation had stop() method, I can try: (psuedo code)
> >
> > *import thread*
> > *server_instance, handler_instance = get_thrift_server()*
> > *
> > *
> > *thread.start_new_thread(server_instance.serve, tuple())*
> > *
> > *
> > *run_tests()*
> > *
> > *
> > *server_instance.stop()*
> >
> > I tried "sys.exit(0)" and many other ways, but all failed to terminate
> the
> > thread which runs TServer.serve() ... Any suggestions?
> >
> > --
> > Francisco Byun
> >
> > 2011/8/11 Kyle <ke...@gmail.com>
> >
> >> There doesn't seem to be a 'stop' method in any of the python TServer
> >> implementations. I know the method exists in the Java API.
> >> I'd like to have a second thread watching activity, and when the
> >> server seems inactive, hit the stop button and shutdown the program.
> >> But all of the server loops are 'while True' and waiting for an
> >> exception.
> >>
> >> Any ideas?
> >>
> >> Kyle
> >>
> >
>
>
>
> --
> Dvir Volk
> System Architect, DoAT, http://doat.com
>

Re: Python Server Stop

Posted by Dvir Volk <dv...@doat.com>.
I can tell you that this code on TSimpleServer stops it when you press
ctrl+c.

    try:
       server.serve()

   except (KeyboardInterrupt, SystemExit):
       print "Quitting from keyboard interrupt"
       transport.close()

   except Exception, e:
       logging.exception(e)


BTW, on my own contributed TProcessPoolServer, I've implemented a server
stop() call.


On Sun, Sep 4, 2011 at 10:57 PM, Kyle <ke...@gmail.com> wrote:
> I think this worth setting up a Jira issue for. Its a deal breaker for how
I
> need to set up worker nodes.
>
> Kyle
> On Sep 2, 2011 12:46 PM, "Francisco Byun" <co...@gmail.com> wrote:
>> Well, thanks Dvir for letting me try to look into the thrift python
> TServer
>> implementation code (server/TServer.py).
>>
>> *class TSimpleServer(TServer):*
>> * def serve(self):*
>> * self.serverTransport.listen()*
>> * while True:*
>> * client = self.serverTransport.accept()*
>> * itrans = self.inputTransportFactory.getTransport(client)*
>> * otrans = self.outputTransportFactory.getTransport(client)*
>> * iprot = self.inputProtocolFactory.getProtocol(itrans)*
>> * oprot = self.outputProtocolFactory.getProtocol(otrans)*
>> * try:*
>> * while True:*
>> * self.processor.process(iprot, oprot)*
>> * except TTransport.TTransportException, tx:*
>> * pass*
>> * except Exception, x:*
>> * logging.exception(x)*
>> *
>> *
>> * itrans.close()*
>> * otrans.close()*
>>
>> So using TSimpleServer, it's not possible to raise any exception that
> could
>> fight against that "except Exception, x" line. Actually it's nearly same
>> situation on other TServer implementations.
>>
>> I think maybe one can define TThriftShutdownRequest exception and let
>> TServer implementations would return when it is raised. Would this be
>> possible? If it make sense, could I open a JIRA issue about this,
> providing
>> a patch with it?
>>
>> (I'm very new to open-source group)
>>
>>
>> 2011/8/31 Dvir Volk <dv...@doat.com>
>>
>>> well, you could always do (assuming you have 2 threads)
>>>
>>> on the serving thread, you start with this function:
>>> def startServer()
>>> try:
>>> #init code yada yada
>>>
>>> #start it up!
>>> server.serve()
>>> except (SystemExit, KeyboardInterrupt):
>>> #any shutdown code, closing sockets goes here
>>> return
>>>
>>>
>>> and on the other thread:
>>> raise SystemExit
>>>
>>> or even serverthread.terminate()
>>>
>>>
>>>
>>>
>>>
>>>
>>> On Tue, Aug 30, 2011 at 9:51 PM, Francisco Byun <co...@gmail.com>
>>> wrote:
>>> > Same question here.
>>> >
>>> > I'm trying to write a test code for our project, which temporarily
>>> creates a
>>> > TServer object and serve() it on a thread, and perform test codes, and
>>> then
>>> > terminate it. But I just can't figure out howto. I think if TServer
>>> > implementation had stop() method, I can try: (psuedo code)
>>> >
>>> > *import thread*
>>> > *server_instance, handler_instance = get_thrift_server()*
>>> > *
>>> > *
>>> > *thread.start_new_thread(server_instance.serve, tuple())*
>>> > *
>>> > *
>>> > *run_tests()*
>>> > *
>>> > *
>>> > *server_instance.stop()*
>>> >
>>> > I tried "sys.exit(0)" and many other ways, but all failed to terminate
>>> the
>>> > thread which runs TServer.serve() ... Any suggestions?
>>> >
>>> > --
>>> > Francisco Byun
>>> >
>>> > 2011/8/11 Kyle <ke...@gmail.com>
>>> >
>>> >> There doesn't seem to be a 'stop' method in any of the python TServer
>>> >> implementations. I know the method exists in the Java API.
>>> >> I'd like to have a second thread watching activity, and when the
>>> >> server seems inactive, hit the stop button and shutdown the program.
>>> >> But all of the server loops are 'while True' and waiting for an
>>> >> exception.
>>> >>
>>> >> Any ideas?
>>> >>
>>> >> Kyle
>>> >>
>>> >
>>>
>>>
>>>
>>> --
>>> Dvir Volk
>>> System Architect, DoAT, http://doat.com
>>>
>



-- 
Dvir Volk
System Architect, DoAT, http://doat.com

Re: Python Server Stop

Posted by Kyle <ke...@gmail.com>.
I think this worth setting up a Jira issue for. Its a deal breaker for how I
need to set up worker nodes.

Kyle
On Sep 2, 2011 12:46 PM, "Francisco Byun" <co...@gmail.com> wrote:
> Well, thanks Dvir for letting me try to look into the thrift python
TServer
> implementation code (server/TServer.py).
>
> *class TSimpleServer(TServer):*
> * def serve(self):*
> * self.serverTransport.listen()*
> * while True:*
> * client = self.serverTransport.accept()*
> * itrans = self.inputTransportFactory.getTransport(client)*
> * otrans = self.outputTransportFactory.getTransport(client)*
> * iprot = self.inputProtocolFactory.getProtocol(itrans)*
> * oprot = self.outputProtocolFactory.getProtocol(otrans)*
> * try:*
> * while True:*
> * self.processor.process(iprot, oprot)*
> * except TTransport.TTransportException, tx:*
> * pass*
> * except Exception, x:*
> * logging.exception(x)*
> *
> *
> * itrans.close()*
> * otrans.close()*
>
> So using TSimpleServer, it's not possible to raise any exception that
could
> fight against that "except Exception, x" line. Actually it's nearly same
> situation on other TServer implementations.
>
> I think maybe one can define TThriftShutdownRequest exception and let
> TServer implementations would return when it is raised. Would this be
> possible? If it make sense, could I open a JIRA issue about this,
providing
> a patch with it?
>
> (I'm very new to open-source group)
>
>
> 2011/8/31 Dvir Volk <dv...@doat.com>
>
>> well, you could always do (assuming you have 2 threads)
>>
>> on the serving thread, you start with this function:
>> def startServer()
>> try:
>> #init code yada yada
>>
>> #start it up!
>> server.serve()
>> except (SystemExit, KeyboardInterrupt):
>> #any shutdown code, closing sockets goes here
>> return
>>
>>
>> and on the other thread:
>> raise SystemExit
>>
>> or even serverthread.terminate()
>>
>>
>>
>>
>>
>>
>> On Tue, Aug 30, 2011 at 9:51 PM, Francisco Byun <co...@gmail.com>
>> wrote:
>> > Same question here.
>> >
>> > I'm trying to write a test code for our project, which temporarily
>> creates a
>> > TServer object and serve() it on a thread, and perform test codes, and
>> then
>> > terminate it. But I just can't figure out howto. I think if TServer
>> > implementation had stop() method, I can try: (psuedo code)
>> >
>> > *import thread*
>> > *server_instance, handler_instance = get_thrift_server()*
>> > *
>> > *
>> > *thread.start_new_thread(server_instance.serve, tuple())*
>> > *
>> > *
>> > *run_tests()*
>> > *
>> > *
>> > *server_instance.stop()*
>> >
>> > I tried "sys.exit(0)" and many other ways, but all failed to terminate
>> the
>> > thread which runs TServer.serve() ... Any suggestions?
>> >
>> > --
>> > Francisco Byun
>> >
>> > 2011/8/11 Kyle <ke...@gmail.com>
>> >
>> >> There doesn't seem to be a 'stop' method in any of the python TServer
>> >> implementations. I know the method exists in the Java API.
>> >> I'd like to have a second thread watching activity, and when the
>> >> server seems inactive, hit the stop button and shutdown the program.
>> >> But all of the server loops are 'while True' and waiting for an
>> >> exception.
>> >>
>> >> Any ideas?
>> >>
>> >> Kyle
>> >>
>> >
>>
>>
>>
>> --
>> Dvir Volk
>> System Architect, DoAT, http://doat.com
>>