M
mumebuhi
I am having problem to kill the following script completely. The script
basically does the following. The main thread creates a new thread,
which does a completely useless thing, and then starts excepting for a
connection via socket.
# start
import pickle
import signal
import simplejson
import socket
import sys
import threading
import time
counter = 0
class WorkerThread(threading.Thread):
def run(self):
global counter
while True:
counter += 1
time.sleep(10)
worker_thread = WorkerThread()
worker_thread.start()
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('', 2727))
server.listen(2)
def cleanup(signal, frame):
print "die now"
worker_thread.join(1)
server.shutdown(socket.SHUT_RDWR)
sys.exit(0)
signal.signal(signal.SIGINT, cleanup)
while True:
channel, details = server.accept()
stats = { 'key': "value" }
s = simplejson.dumps(stats)
channel.send(s)
channel.close()
# end
The way I can think of right now is to kill the script using Ctrl+C.
Hence, the signal handler in the code. However, the interpreter
complains:
---start---
Traceback (most recent call last):
File "ex_server.py", line 35, in ?
channel, details = server.accept()
File "/usr/lib/python2.4/socket.py", line 169, in accept
sock, addr = self._sock.accept()
File "ex_server.py", line 30, in cleanup
server.shutdown(SHUT_RDWR)
NameError: global name 'SHUT_RDWR' is not defined
---end---
Can anybody suggest a better way to do this?
Thank you.
Buhi
basically does the following. The main thread creates a new thread,
which does a completely useless thing, and then starts excepting for a
connection via socket.
# start
import pickle
import signal
import simplejson
import socket
import sys
import threading
import time
counter = 0
class WorkerThread(threading.Thread):
def run(self):
global counter
while True:
counter += 1
time.sleep(10)
worker_thread = WorkerThread()
worker_thread.start()
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('', 2727))
server.listen(2)
def cleanup(signal, frame):
print "die now"
worker_thread.join(1)
server.shutdown(socket.SHUT_RDWR)
sys.exit(0)
signal.signal(signal.SIGINT, cleanup)
while True:
channel, details = server.accept()
stats = { 'key': "value" }
s = simplejson.dumps(stats)
channel.send(s)
channel.close()
# end
The way I can think of right now is to kill the script using Ctrl+C.
Hence, the signal handler in the code. However, the interpreter
complains:
---start---
Traceback (most recent call last):
File "ex_server.py", line 35, in ?
channel, details = server.accept()
File "/usr/lib/python2.4/socket.py", line 169, in accept
sock, addr = self._sock.accept()
File "ex_server.py", line 30, in cleanup
server.shutdown(SHUT_RDWR)
NameError: global name 'SHUT_RDWR' is not defined
---end---
Can anybody suggest a better way to do this?
Thank you.
Buhi