2016-05-03 12 views
1

unten ist der Steuerungsablauf meines Python-Code:Python Steuerfluss Ausgabe: Funktion ruft

from BB import B 
def A(param): 
    ... 
    ... 
    //This takes a while to complete execution 
    ... 
    B() 
print something 
A(param) //Function call 

Das Problem hierbei ist, dass die Funktion B aufgerufen wird, bevor A seine Ausführung abgeschlossen werden kann. A erstellt und schreibt in eine Datei, während B davon liest und einige Operationen ausführt. B ist nach der Fertigstellung von A ziemlich wichtig.

Ich habe das versucht, aber es löst das Problem nicht.

from BB import B 
def A(param): 
    ... 
    ... 
    //This takes a while to complete execution 
    ... 
print something 
A(param) //Function call 
B() 
+0

Sind Sie mit dem Callback-Konzept vertraut? http://stackoverflow.com/questions/4689984/implementing-a-callback-in-python-passing-a-callable-reference-to-the-current – Joze

+0

Haben Sie möglicherweise vergessen, die Datei zu schließen, nachdem A() geschrieben hat dazu? –

Antwort

0

Es klingt wie Sie A ein blockierenden Anruf vornehmen müssen - das heißt vermeiden Rückkehr, bis der Vorgang abgeschlossen ist. Wenn es in eine Datei zu schreiben, könnten Sie Folgendes:

import os 

from time import sleep 

def A(param): 

    filepath = "/path/to/output/file" 
    ... do stuff ... 
    while not os.path.exists(filepath): 
     sleep(5) 
    B() 

jedoch als @Joze Kommentare, könnten Sie eine Rückrufstrategie nur für die allgemeine Zusammensetzung Gründen verwenden möchten.

+0

Blockieren Anruf hilft nicht, und damit bekomme ich einen Wert Fehler aufgrund einiger Datei öffnen/schließen Problem. Ich bin nicht in der Lage herauszufinden, wie und wo die Callback-Strategie enthalten sein soll. – RowenaRavenclaw

+0

@RowenaRavenclaw, es klingt, als hätten Sie ein Problem mit dem Teil Ihres Codes, der die Datei schreibt. Ich würde empfehlen, dieses Snippet zu teilen. – Thtu

+0

Danke! Die Datei wird tatsächlich geschrieben, indem die Ausgabe von der Konsole umgeleitet wird. Ich ssh dann zu einem anderen Server, wo ich etwas mache, während die 'print' Anweisungen auf der Konsole zu dieser Datei umgeleitet werden. Auf dem anderen Server, auf dem ich ssh bin, lese und schreibe ich von und zu ein paar anderen Dateien. – RowenaRavenclaw

0

Brute forciert es, Sie könnten einen Timer einlegen, bevor B() etwas liest. Importzeit time.sleep (5) # Verzögerungen für 5 Sekunden

Oder die 5 Sekunden zwicken die kürzeste Zeit, die Sie erwarten, dass funktionieren noch