terminate a program gracefully from a thread

J

Jabba Laci

Hi,

I have a script (see below) that I want to terminate after X seconds.
The main loop of the program is waiting for user input.
The program enters the main loop and I try to shut down the program
after X seconds from a thread but I can't figure out how to do it. The
program should also do some cleanup before termination, so the shut
down must be graceful.

The code below is a simplified version. The whole idea is the
following: I have a script that has grown quite big over time. It
needs to read several data files, so when I start it for the first
time, it takes about 3-4 seconds to launch. The next start is much
faster since, I guess, the OS has done some caching. I use this script
a lot and the first slow launch bothers me. My idea: after booting, I
want to start the script in the background in suicide mode. OS does
the caching, so when I need it, it starts quickly.

See the code below with comments.

Thanks,

Laszlo

===============

import atexit
import sys
import time
from threading import Thread
import os

def suicide(wait):
time.sleep(wait)
print("should exit now...")
sys.exit() # exits this thread but not the main thread
# os._exit(0) # no cleanup with this :(

def cleanup():
# I want it to run before termination.
print("cleaning up...")

def main():
Thread(target=suicide, kwargs={'wait': 3}).start()
#
while True:
try:
inp = raw_input("in> ")
print(inp)
except (KeyboardInterrupt, EOFError):
print()
sys.exit()

#####

if __name__ == "__main__":
atexit.register(cleanup)
main()
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Staff online

Members online

Forum statistics

Threads
473,764
Messages
2,569,564
Members
45,040
Latest member
papereejit

Latest Threads

Top