Exit an imported module without exiting the main program - Python

3.5k views Asked by At

I have a module called randomstuff which I import into my main program. The problem is that at times, the code being run in randomstuff needs to be stopped, without affecting the main program.

I have tried exit(), quit() and a few os functions, but all of them want to close my main program as well. Inside of the module, I have a thread that checks if the module should be stopped - so what function should I put in the thread when it realizes that the program must be stopped.

Any ideas on how to go about this? Thanks

2

There are 2 answers

7
Malik Brahimi On BEST ANSWER

I have a new answer as I now know what you mean. You'll have to extend the thread class with a Boolean to store the current state of the thread like so:

mythread.py

from threading import *
import time

class MyThread(Thread):
    def __init__(self):
        self.running = True
        Thread.__init__(self)

    def stop(self):
        self.running = False

    def run(self):
        while self.running:
            print 'Doing something'
            time.sleep(1.0/60)


thread = MyThread()
thread.start()

mainscript.py

from mythread import *
thread.stop() # omit this line to continue the thread
0
mhega On

Basically I imported the module within a try except, but since I wanted to do the same thing on multiple modules, I found out a way to programmatically for loop through the modules within a single try-except and continue.

From the main program:

import importlib
importList = ['module1','module2']
for lib in importList:
    try:
        print('Importing %s' % lib)
        globals()[lib] = importlib.import_module(lib)
    except SystemExit:
        continue

From the module thread:

sys.exit()