I have a simple socketServer
that works perfectly on the main thread.
#Server PORT
PORT = 8020
#reassign variables
Handler = Server #this is a SimpleHTTPHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)
httpd.serve_forever()
I need to have this run in the background and have the ability to stop the process at will. What is the proper way to do this?
EDIT
Sorry I was unclear. I need to have the server running non stop and I can only access the system from SSH so I can't just start it and walk away.
Assuming you are running your script on a POSIX operating system and your script is named socket_server.py
, you can use nohup
like this:
$ nohup python socket_server.py >> /dev/null 2>&1 &
That will put your script in the background, make it immune to hangups, and you can exit your SSH session. The shell will print out the job number and PID:
$ [1] 1234
You can stop it later by getting sending a SIGTERM using kill
:
$ kill -SIGTERM 1234
You might need threading/_thread
def server():
....
import _thread
_thread.start_new_thread(server, ())
This basically starts the server function on a different thread.
EDIT:
In this case in your def server():
you a global variable threadIsRunning
, if this is valued to True
it should continue, but if it is valued to False
run thread.exit()
this should all be in some sort of loop.