End python code after 60 seconds

后端 未结 5 1214
甜味超标
甜味超标 2021-01-15 04:14

Below there is some fully functioning code.

I am planning to execute this code through command line, however I would like it to end after 60 seconds.

Does an

相关标签:
5条回答
  • 2021-01-15 04:25

    This is my favorite way of doing timeout.

    def timeout(func, args=None, kwargs=None, TIMEOUT=10, default=None, err=.05):
        if args is None:
            args = []
        elif hasattr(args, "__iter__") and not isinstance(args, basestring):
            args = args
        else:
            args = [args]
    
        kwargs = {} if kwargs is None else kwargs
    
        import threading
        class InterruptableThread(threading.Thread):
            def __init__(self):
                threading.Thread.__init__(self)
                self.result = None
    
            def run(self):
                try:
                    self.result = func(*args, **kwargs)
                except:
                    self.result = default
    
        it = InterruptableThread()
        it.start()
        it.join(TIMEOUT* (1 + err))
        if it.isAlive():
            return default
        else:
            return it.result
    
    0 讨论(0)
  • 2021-01-15 04:29

    Use signal.ALARM to get notified after a specified time.

    import signal, os
    
    def handler(signum, frame):
        print '60 seconds passed, exiting'
        cleanup_and_exit_your_code()
    
    # Set the signal handler and a 60-second alarm
    signal.signal(signal.SIGALRM, handler)
    signal.alarm(60)
    
    run_your_code()
    

    From your example it is not obvious what the code will exactly do, how it will run and what kind of loop it will iterate. But you can easily implement the ALARM signal to get notified after the timeout has expired.

    0 讨论(0)
  • 2021-01-15 04:36

    You could move your code into a daemon thread and exit the main thread after 60 seconds:

    #!/usr/bin/env python
    import time
    import threading
    
    def listen():
        print("put your code here")
    
    t = threading.Thread(target=listen)
    t.daemon = True
    t.start()
    
    time.sleep(60)
    # main thread exits here. Daemon threads do not survive.
    
    0 讨论(0)
  • 2021-01-15 04:41

    I hope this is an easy way to execute a function periodically and end after 60 seconds:

    import time
    import os
    i = 0
    def executeSomething():
     global i
     print(i)
     i += 1
     time.sleep(1)
     if i == 10:
        print('End')
        os._exit(0)
    
    
    while True:
     executeSomething()
    
    0 讨论(0)
  • 2021-01-15 04:44

    Try this out:

    import os
    import time
    from datetime import datetime
    from threading import Timer
    
    def exitfunc():
        print "Exit Time", datetime.now()
        os._exit(0)
    
    Timer(5, exitfunc).start() # exit in 5 seconds
    
    while True: # infinite loop, replace it with your code that you want to interrupt
        print "Current Time", datetime.now()
        time.sleep(1)
    

    There are some more examples in this StackOverflow question: Executing periodic actions in Python

    I think the use of os._exit(0) is discouraged, but I'm not sure. Something about this doesn't feel kosher. It works, though.

    0 讨论(0)
提交回复
热议问题