'Python 3 - Executing functions at same time in a loop

I checked threads and solutions about multiprocessing on pyhton 3, but could not adapt it to my case because its containing a loop:

import time

anotherFunctionRunning = False

def anotherFunction():
    global anotherFunctionRunning
    anotherFunctionRunning = True
    print("Another function started")
    time.sleep(5)
    print("Another function stopped running")
    anotherFunctionRunning = False



def mainLoop():
  global anotherFunctionRunning
  while True:
     print("running")
     time.sleep(1)
     if (anotherFunctionRunning == False):
       anotherFunction()
     else:
         print("loop running, another function running")
     print("loop ended")


mainLoop()

My problem here is when anotherFunction starts running, script waits it to be over (in the example 5 seconds) and continues the loop.

I want it to continue the loop while anotherFunction running.

I saw this common solution but could not adapt it to my case and dont know how to do because its becoming too complex:

from multiprocessing import Process
def func1:
     #does something

def func2:
     #does something

if __name__=='__main__':
     p1 = Process(target = func1)
     p1.start()
     p2 = Process(target = func2)
     p2.start()

Any ideas ?

Thanks for support



Solution 1:[1]

I'm not sure I understand what you want, but I think this should do the job

import time
from threading import Thread

anotherFunctionRunning = False


def anotherFunction():
    global anotherFunctionRunning
    anotherFunctionRunning = True
    print("Another function started")
    time.sleep(5)
    print("Another function stopped running")
    anotherFunctionRunning = False


def mainLoop():
    global anotherFunctionRunning
    thread = None
    counter = 0
    while counter < 5:
        counter += 1
        print("running")
        time.sleep(1)
        if anotherFunctionRunning == False:
            thread = Thread(target= anotherFunction, name="AnotherThread")
            thread.start()
        else:
            print("loop running, another function running")
        print("loop ended")

    thread.join()


mainLoop()

Beware however I have royally ignored the dangers of competitive access

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Brinfer