Holen Sie sich die Zeit (Verweilzeit) zwischen der Schaffung eines Arbeitsplatzes und der Ausführung von Lambda Als ich Lambda kreierte Ich habe datetime verwendet, um das aktuelle Datum und die aktuelle Uhrzeit abzurufen. Also war ich süchtig nach "AWS Lambda verwendet Funktionsinstanzen wieder" Ich möchte einen Artikel machen.
Ermitteln Sie zuerst das aktuelle Datum und die aktuelle Uhrzeit, zu der Lambda ausgeführt wurde Unten finden Sie eine vereinfachte Version des Codes.
from datetime import datetime
now = datetime.now()
def lambda_handler(event, context):
method_a()
def method_a():
method_b()
def method_b():
method_c()
def method_c():
#x steht für Datum und Uhrzeit der Erstellung des Jobs.
time = now - x
print(data)
Es wird ausgedrückt als.
Deklarieren Sie jetzt als globale Variable, um die Zeit darzustellen Ich habe es möglich gemacht, jede Methode anzuwenden.
Da ich die Aufenthaltszeit vor Ort bekommen konnte, Ich habe es gerade gebaut und bereitgestellt, um Lambda zu erstellen. Der erste Lambda-Test war ebenfalls erfolgreich und es gab keine Probleme.
Die Verweilzeit, die beim ersten Mal erfolgreich erhalten wurde Ich konnte es nach dem zweiten Mal nicht gut bekommen.
"Zeit" ist seltsam, egal wie oft ich es versuche.
Erstellen Sie also erneut und stellen Sie es erneut bereit Ich habe Lambda aktualisiert und es hat funktioniert.
Nach dem zweiten Mal war es jedoch nicht gut.
Also, als ich verschiedene Dinge untersuchte, um die Ursache zu untersuchen Ich bin auf einen Artikel [hier] gestoßen (https://hacknote.jp/archives/50525/)!
Die Ursache war die globale Variable "now", die außerhalb von lambda_handler deklariert wurde.
Anscheinend ist Lambda zur Leistungsverbesserung Es ist wie die Wiederverwendung einer Instanz einer Funktion.
https://aws.amazon.com/jp/lambda/faqs/
Mit anderen Worten, Datum und Uhrzeit des ersten erfassten "Jetzt" werden zwischengespeichert. Es scheint, dass der gleiche Wert ab dem zweiten Mal wiederverwendet wurde.
Sagen Sie immer, dass Lambda-Funktionsinstanzen neu erstellt wurden Ich habe nachgedacht, also habe ich es überhaupt nicht bemerkt! !!
Nach dem Verständnis der Ursache Vorerst habe ich "jetzt" in "lambda_handler" gesetzt. Dies wird jedes Mal, wenn Lambda ausgeführt wird, ein neues "Jetzt" -Datum und eine neue Uhrzeit erhalten.
from datetime import datetime
def lambda_handler(event, context):
now = datetime.now()
method_a(now)
def method_a(now):
method_b(now)
def method_b(now):
method_c(now)
def method_c(now):
#x steht für Datum und Uhrzeit der Erstellung des Jobs.
time = now - x
print(data)
Dies kann auch in dieser Form erfolgen. Es ist nicht cool, es mit einer solchen Methode zu bestehen Ich habe es wie folgt behoben.
from datetime import datetime
def lambda_handler(event, context):
global now
now = datetime.now()
method_a()
def method_a():
method_b()
def method_b():
method_c()
def method_c():
#x steht für Datum und Uhrzeit der Erstellung des Jobs.
time = now - x
print(data)
Dies ist auch nach dem zweiten Mal sicher Jetzt können Sie Datum und Uhrzeit abrufen, zu denen "jetzt" ordnungsgemäß ausgeführt wurde. Ich konnte "Zeit" gut bekommen.
Zur Wiederverwendung von Lambda-Funktionsinstanzen Es war mein erstes Mal zu hören, also habe ich viel gelernt.
Danach sind globale Variablen sehr praktisch, Dass es leicht ist, unerwartete Fehler zu verursachen Ich erkannte es mit meinem eigenen Körper.
Ich werde vorsichtig sein, wie man es benutzt.
Recommended Posts