FreeBSD KeyboardInterrupt not captured
Rhamphoryncus
rhamph at gmail.com
Wed May 7 12:04:33 EDT 2008
On May 7, 5:00 am, radim.ma... at gmail.com wrote:
> Hi Guys,
>
> during testing of my project on FreeBSD I've discovered stange
> 'feature' of time.sleep(). It works if single thread is running, but
> when multi-threaded, the SIGINT signal seems not to be handled in same
> way.
>
> I've found three discussion about similar behavior with os.system()
> but so far none of the suggested patches worked.
>
> I've limited test to following code:
>
> import time
> import sys
> import threading
>
> class MyThread(threading.Thread):
> def __init__(self):
> super(MyThread, self).__init__()
> self.start()
>
> def run(self):
> while True:
> try:
> time.sleep(10)
> except KeyboardInterrupt:
> print 'thread keyboard interrupt'
>
> def main():
> my = MyThread()
>
> while True:
> try:
> time.sleep(5)
> except KeyboardInterrupt:
> print 'got it'
>
> if __name__ == '__main__':
> main()
>
> Any suggestions?
Python doesn't support interrupting non-main threads with a signal.
You have to use something else you can manually end, like a Condition
with a timeout or a poll of a fd with a timeout.
More information about the Python-list
mailing list