2017-12-05 1 views
0

Okay, also hier ist mein Problem:Kraft Löschen einer Variable in Python

Ich habe eine Funktion, die ich sehr oft anrufen (mehrmals pro Sekunde) und eine variable old_date, die in der zu berechnenden soll Funktion.
Aber es scheint, dass diese Variable nur einmal berechnet wird, wenn die Funktion zuerst aufgerufen wird, und behält dann den gleichen Wert bei. Hier

ist die Funktion:

def can_push(date): 
    """ 
    Check if the last data was pushed more than TIMEFRAME ago 
    :param date: string, date of the new data 
    TIMEFRAME = datetime.timedelta(seconds=1) 
    DB = MongoClient(HOST, PORT).database 
    DATE_FMT = '%Y-%m-%dT%H:%M:%S.%fZ' 
    """ 

    # If collection doesn't exist, we create it and return True 

    out = False 
    # Get MongoDB collection 
    coll = DB.coll 
    # Date of the new data (got through websocket) 
    new_date = datetime.strptime(date, DATE_FMT) 
    # Date of the last data pushed in DB 
    cursor = coll.find().sort('{date:-1}').limit(1) 
    old_date = cursor[0]['date'] 
    print old_date # Format is okay, but date is too old 

    if (new_date - old_date) > TIMEFRAME: 
     out = True 
    # gc.collect() 
    del old_date 
    return out 

Ich versuchte del old_date aber es scheint nicht zu funktionieren.

Nach dem Lesen this habe ich versucht, gc.collect() zu verwenden, aber ich bin nicht sehr vertraut mit Python, so dass ich nicht sicher bin, was es wirklich tut (und es scheint auch nicht zu funktionieren).

Wenn ich mit der MongoDB-Shell verbinden, kann ich tatsächlich überprüfen, dass die letzten Daten in der Datenbank viel jünger ist als old_date zeigt mir.

Hat jemand eine Idee von einer anderen Möglichkeit, old_date am Ende der Funktion zwangsweise zu löschen?

Python-Version: 2.7.12
Kernel: Ubuntu 16.04

+0

Das old_date kommt aus der Datenbank, wer schreibt es in den Mongo? – geckos

+0

Ich bin in einer anderen Funktion. Wenn 'can_push' True zurückgibt, schiebe ich meine Daten in die Datenbank – Malou

+0

Multithreading? Wenn ja, überprüfe die Synchronisation – geckos

Antwort

0

Ok so dass der Fehler ein Tippfehler war, mein schlecht.

es sein sollte:

cursor = coll.find().sort("date", -1).limit(1) 

Ich war conviced, dass meine Anfrage korrekt war, da es in MongoDB Shell gearbeitet.

Entschuldigung, dass Sie sich die Zeit genommen haben und danke für die Hilfe!

+0

Ich bin froh, dass es funktioniert hat. Grüße! – geckos