Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tos-kamiya/68552cf2e1be22051789363d3ca964d8 to your computer and use it in GitHub Desktop.
Save tos-kamiya/68552cf2e1be22051789363d3ca964d8 to your computer and use it in GitHub Desktop.
Cleanly shutdown mprpc server by remote access

This example server is able to shutdown by requesting from remote, by calling 'shutdown' method.

$ python3 ./mprpc_server_able_to_shutdown_from_remote.py &
> Hello server is waiting on localhost:7000 ...

$ python3 ./sample_clinet.py
hello
hello
hello
> Hello server now stopped.
Job 1, 'python3 ./mprpc_server_able_to_…' has ended
import sys
import gevent
from gevent.server import StreamServer
from mprpc import RPCServer, RPCClient
ADDR = 'localhost'
PORT = 7000
class HelloServer(RPCServer):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.thread = None
def set_thread(self, thread):
self.thread = thread
def shutdown(self):
if self.thread is not None:
gevent.kill(self.thread)
def hello(self):
return 'hello'
def main():
hw_server = HelloServer()
server = StreamServer((ADDR, PORT), hw_server)
print("> Hello server is waiting on %s:%d ..." % (ADDR, PORT), file=sys.stderr)
thread = gevent.spawn(server.serve_forever)
hw_server.set_thread(thread)
thread.join()
print("> Hello server now stopped.")
if __name__ == "__main__":
main()
from mprpc import RPCClient
from mprpc_server_able_to_shutdown_from_remote import ADDR, PORT
client = RPCClient(ADDR, PORT)
print(client.call('hello'))
print(client.call('hello'))
print(client.call('hello'))
client.call('shutdown')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment