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 <[email protected]> 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" <[email protected]> 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 <[email protected]>
>>
>>> 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 <[email protected]>
>>> 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 <[email protected]>
>>> >
>>> >> 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