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