2017-08-10 2 views
-1

J'ai 2 fonctions que j'ai besoin de s'appeler en fonction des paramètres de l'utilisateur. C'est-à-dire, si un utilisateur a répété allumé il doit juste continuer jusqu'à ce qu'il soit arrêté manuellement, pour lequel j'ai un bouton. Comment puis-je faire cela sans causer une erreur de boucle infinie qui bloque le programme?Comment faire pour boucler 2 fonctions en python?

def T1_Timer(list): 
    msg = list[0] 
    global t1 
    T1_List = list 
    t1 = threading.Timer(MultiTimer2Settings.T1_Time, msg) 
    while t1.is_alive(): 
     if not t1.is_alive(): 
      return 
     else: 
      time.sleep(1) 
    Parent.SendTwitchMessage(msg) 
    T1_List.pop(0) 
    return T1_List 

def DoRun1(): 
    T1_List1 = [] 
    T1_List2 = [] 
    while not StopPressed: 
     T1_List1 = CheckList1(T1_List2) 
     T1_List2 = T1_Timer(T1_List1) 
    return 
StopPressed = False 
def StopButton(): 
    global StopPressed 
    StopPressed = True 
    return 
def CheckList1(T1_List=[]): 
    global t1 
    t1 = threading.Timer(MultiTimer2Settings.T1_Time, "") 
    if not t1.is_alive() and len(T1_List) <= 0: 
     if MultiTimer2Settings.T1M1_Enabled: 
      T1_List.append(MultiTimer2Settings.T1M1) 
     if MultiTimer2Settings.T1M2_Enabled: 
      T1_List.append(MultiTimer2Settings.T1M2) 
     if MultiTimer2Settings.T1M3_Enabled: 
      T1_List.append(MultiTimer2Settings.T1M3) 
     if MultiTimer2Settings.T1M4_Enabled: 
      T1_List.append(MultiTimer2Settings.T1M4) 
     if MultiTimer2Settings.T1M5_Enabled: 
      T1_List.append(MultiTimer2Settings.T1M5) 
    return T1_List 
+0

Les boucles infinies ne provoquent pas de plantage. La récursivité infinie fait. – Barmar

+0

Récursivité réciproque et utiliser une condition de fin. –

Répondre

0

Il suffit d'utiliser une boucle while:

stopButtonPressed = False 
var1 = <initial value> 
while not stopButtonPressed: 
    var2 = function1(var1) 
    var1 = function2(var2) 

Au lieu de chaque fonction appelant l'autre, ils doivent retourner la valeur qu'ils passeraient à l'autre fonction. Vous pouvez ensuite les mettre dans des variables et les passer dans les appels successifs.

+0

de la façon dont vous l'avez ici, vous avez une fonction appelant les 2 autres de suite, mais ils doivent passer des vars d'avant en arrière, donc je ne suis pas sûr de la façon de mettre en œuvre cela. – Elmseeker

+0

Vos fonctions ne retournent rien, alors qu'est-ce que vous devez passer? – Barmar

+0

@Elmseeker avez-vous envisagé d'utiliser une file d'attente pour coordonner vos threads au lieu d'appeler une fonction de l'autre? – lbrindze

0

quelque chose comme ça

Break = 0 

Function1(): 
    test = 12 
    print test 
    return 

Function1(): 
    test1 = 13 
    print test2 
    return 

while Break < 15: 
    Break += 1 
    Function1() 
    Function2() 

une autre fonction à l'aide d'appeler une fonction ne sera pas dans la boucle fait donc c'est l'option

simple essayez de l'exécuter!