Say if I have four functions as below:
def foo():
    subprocess.Popen('start /B someprogramA.exe', shell=True)
def bar():
    subprocess.Popen('start /B someprogramB.exe', shell=True)
def foo_kill():
    subprocess.Popen('taskkill /IM someprogramA.exe')
def bar_kill():
    subprocess.Popen('taskkill /IM someprogramB.exe')
How can I alternate foo and bar functions to run every, say 30 minutes?
Meaning: 1st 30mins - run foo, 2nd 30mins - run bar, 3rd 30mins - run foo, and so on. Each new run should 'kill' the previous thread/func.
I have a countdown timer threads, but not sure how to 'alternate' the functions.
class Timer(threading.Thread):
    def __init__(self, minutes):
        self.runTime = minutes
        threading.Thread.__init__(self)
class CountDownTimer(Timer):
    def run(self):
        counter = self.runTime
        for sec in range(self.runTime):
            #do something           
            time.sleep(60) #editted from 1800 to 60 - sleeps for a minute
            counter -= 1
timeout=30
c=CountDownTimer(timeout)
c.start()
EDIT: My solution with Nicholas Knight's inputs...
import threading
import subprocess
import time
timeout=2 #alternate delay gap in minutes
def foo():
    subprocess.Popen('start /B notepad.exe', shell=True)
def bar():
    subprocess.Popen('start /B calc.exe', shell=True)
def foo_kill():
    subprocess.Popen('taskkill /IM notepad.exe')
def bar_kill():
    subprocess.Popen('taskkill /IM calc.exe')
class Alternator(threading.Thread):
    def __init__(self, timeout):
        self.delay_mins = timeout 
        self.functions = [(foo, foo_kill), (bar, bar_kill)]
        threading.Thread.__init__(self)
    def run(self):
        while True:
            for f, kf in self.functions:
                f()
                time.sleep(self.delay_mins*60)
                kf()
a=Alternator(timeout)
a.start()
Works fine.