Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > threading.Thread vs. signal.signal

Reply
Thread Tools

threading.Thread vs. signal.signal

 
 
Jack Orenstein
Guest
Posts: n/a
 
      09-17-2005
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()
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off




Advertisments