Ich schreibe eine Twitter-App in Google App Engine. Er akzeptiert Befehle als direkte Nachrichten, also habe ich einen Cronjob-Dienst von Drittanbietern eingerichtet, um einen Handler aufzurufen, der DMs in regelmäßigen Intervallen verarbeitet. Ich habe ein Model 'Info', das nur einen Eintrag hat, es speichert einige allgemeine Daten, die an vielen Stellen in der App verwendet werden (in diesem Fall die Zeit, als die Nachrichten kürzlich verarbeitet wurden). Das allgemeine Muster meiner Handler ist wie folgt:Google App Engine-Datenbankinkonsistenz
class Info(db.Model):
msg_polled = db.DateTimeProperty(auto_now_add = True)
.... More Properties ....
@classmethod
def get_info(cls):
info = cls.all().get()
if not info:
info = cls()
info.put()
return info
---------------------------------------------------------
info = Info.get_info()
msgs = api.GetDirectMessages(since = info.msg_polled)
if not msgs:
return
logging.info('Processing Messages since %s ' % str(info.msg_polled))
for msg in msgs:
...process commands...
logging.info('Processed Message :- @%s : %s' % (msg.sender_screen_name, msg.text))
info.msg_polled = datetime.datetime.now()
info.put()
Aber manchmal bekomme ich Protokolle wie folgt aus:
I 03-30 07:50AM 10.973
Processing Messages since Sun, 29 Mar 2009 11:41:59 GMT
I 03-30 07:50AM 11.122
Processed Message :- @foo : Foo_Bar
-------------------------------------------------------
I 03-30 07:46AM 08.014
Processing Messages since Sun, 29 Mar 2009 11:41:59 GMT
I 03-30 07:46AM 08.130
Processed Message :- @foo : Foo_Bar
Hier scheint es, dass Informationen nicht in der Datenbank verpflichtet zu werden. Die Nachricht wird mehrmals verarbeitet, manchmal bis zu 10 Mal, bevor sich der Wert von msg_polled ändert. Ich erhalte jedoch keine Datastore-Ausnahmen. Dies passiert nur ab und zu.
Jede Hilfe wird geschätzt.
Sie zeigen in Ihrer Beispiel nicht, wie Sie ursprünglich Informationen abrufen. Kannst du das mit einbeziehen? –
Auch der zweite Satz von Protokolleinträgen ist vor dem ersten Satz datiert - war das absichtlich? –
Entschuldigung, ich werde das auch aufnehmen .. und ja, die Logs sind in umgekehrter chronologischer Reihenfolge. – z33m