Raise a StopException when Control+C is pressed.

This commit is contained in:
Selwin Ong 2012-07-26 09:36:50 +07:00
parent 7e1f837174
commit a4f1de358f
2 changed files with 19 additions and 3 deletions

View File

@ -28,6 +28,10 @@ red = make_colorizer('darkred')
blue = make_colorizer('darkblue')
class StopRequested(Exception):
pass
def iterable(x):
return hasattr(x, '__iter__')
@ -246,10 +250,16 @@ class Worker(object):
self.log.debug('Ignoring signal %s.' % signal_name(signum))
return
msg = 'Warm shut down. Press Ctrl+C again for a cold shutdown.'
msg = 'Warm shut down requested.'
self.log.warning(msg)
# If shutdown is requested in the middle of a job, wait until finish
# before shutting down
if self.state == 'busy':
self._stopped = True
self.log.debug('Stopping after current horse is finished.')
self.log.debug('Stopping after current horse is finished.'
'Press Ctrl+C again for a cold shutdown.')
else:
raise StopRequested
signal.signal(signal.SIGINT, request_stop)
signal.signal(signal.SIGTERM, request_stop)
@ -286,6 +296,8 @@ class Worker(object):
connection=self.connection)
if result is None:
break
except StopRequested:
break
except UnpickleError as e:
msg = '*** Ignoring unpickleable data on %s.' % \
green(e.queue.name)

View File

@ -56,3 +56,7 @@ with Connection():
@job(queue='default')
def decorated_job(x, y):
return x + y
def long_running_job():
time.sleep(10)