2016-08-26 11 views
0

Ich schreibe ein Python-Skript, das dem Benutzer zwei Optionen bietet. In einer Option wird die Benutzereingabe zum Ausführen einer Funktion im Hintergrund verwendet. In anderen Fällen wird die Benutzereingabe zum Ausführen einer Funktion im Vordergrund verwendet. Wie kann ich beides erreichen? Ich möchte den Befehl "nohup" nicht verwenden, um das vollständige Skript im Hintergrund auszuführen. Ich möchte nur eine bestimmte Funktion im Hintergrund ausführen.Ausführen eines Teils von Python-Code im Hintergrund

Ich möchte auch den Hintergrundprozess auf Willen des Benutzers zu stoppen.

Hier ist eine kleine Auswahl dessen, was ich tun möchte:

def display(): 
    cnt = 1 
    a = [] 
    if len(live_matches) == 0: 
     print "sorry, no live matches currently" 
    else: 
     for match in live_matches: 
      print str(cnt) + "." + match['mchdesc'] + "," + match['mnum'] 
      a[cnt] = match 
      cnt = cnt + 1 
     choice = raw_input("Enter the match numbers for live updates separated by spaces") 
     for c in choice.split(' '): 
      update_matches.append(a[int(c)]) 
     if len(update_matches) > 0: 
      #call some function and run in background 
    cnt = 1 
    for match in completed_matches: 
     print str(cnt) + "." + match['mchdesc'] + "," + match['mnum'] 
     cnt = cnt + 1 
    choice = raw_input("enter the match number for scorecard") 
    #call some function again but run it in foreground 
+0

[Sellerie] (http://www.celeryproject.org/) – Harrison

+0

Verwenden Sie die [Multiprocessing] (https://docs.python.org/2/library/multiprocessing.html?highlight=multiprocessing#module-multiprocessing) Standard-Python-Modul, um Ihre Funktion im Hintergrund auszuführen. – mguijarr

+0

Sie meinen, diese Funktionen async/sync auszuführen? – danielfranca

Antwort

1

1. threading.Thread vielleicht haben Sie helfen, und threading.Lock() werden Ihre Daten sperren.

Ich habe nur eine Vorstellung davon, können Sie global input data verwenden, um Benutzereingaben zu überprüfen, und zwei Threads überprüfen es und bestimmen, wer Ihre Ausgangsdaten sperrt und der Haupt-Thread wird es drucken, und auch die Eingabe kann die beiden beenden Fäden. (Vielleicht brechen die while Schleife)

2.await/Asynchron eine gute Möglichkeit für asynchrone IO ist, Sie send Methode können nativen Co-Routine Funktionen bis yield auszuführen. Vielleicht kann es das tun.

Hoffe das hilft dir.

Verwandte Themen