By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
444,199 Members | 1,125 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 444,199 IT Pros & Developers. It's quick & easy.

threading.Thread vs. signal.signal

P: n/a
I'd like to create a program that invokes a function once a second,
and terminates when the user types ctrl-c. So I created a signal
handler, created a threading.Thread which does the invocation every
second, and started the thread. The signal handler seems to be
ineffective. Any idea what I'm doing wrong? This is on Fedora FC4 and
Python 2.4.1. The code appears below.

If I do the while ... sleep in the main thread, then the signal
handler works as expected. (This isn't really a satisfactory
implementation because the function called every second might
take a significant fraction of a second to execute.)

Jack Orenstein
import sys
import signal
import threading
import datetime
import time

class metronome(threading.Thread):
def __init__(self, interval, function):
threading.Thread.__init__(self)
self.interval = interval
self.function = function
self.done = False

def cancel(self):
print '>>> cancel'
self.done = True

def run(self):
while not self.done:
time.sleep(self.interval)
if self.done:
print '>>> break!'
break
else:
self.function()

def ctrl_c_handler(signal, frame):
print '>>> ctrl c'
global t
t.cancel()
sys.stdout.close()
sys.stderr.close()
sys.exit(0)

signal.signal(signal.SIGINT, ctrl_c_handler)

def hello():
print datetime.datetime.now()

t = metronome(1, hello)
t.start()
Sep 17 '05 #1
Share this question for a faster answer!
Share on Google+

This discussion thread is closed

Replies have been disabled for this discussion.