Google App Engine で Twitter アプリを作成しています。コマンドをダイレクト メッセージとして受け入れるので、定期的に DM を処理するハンドラーを呼び出すサード パーティの cronjob サービスをセットアップしました。エントリが 1 つだけのモデル 'Info' があります。このモデルには、アプリの多くの場所で使用されるいくつかの共通データが格納されています (この場合、メッセージが最近処理された時間)。私のハンドラーの一般的なパターンは次のとおりです。
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()
しかし、時々私はこのようなログを取得します:
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
ここでは、情報がデータベースにコミットされていないようです。メッセージは複数回処理され、場合によっては msg_polled 値が変更されるまでに 10 回以上処理されます。しかし、データストアの例外は発生していません。これは、たまにしか発生しません。
どんな助けでも大歓迎です。