Google App EngineでTwitterアプリを書いています。それはダイレクトメッセージとしてコマンドを受け入れるので、定期的にDMを処理するハンドラを呼び出すサードパーティのcronジョブサービスをセットアップしました。私は1つのエントリしか持たないModel 'Info'を持っており、App内の多くの場所で使用されるいくつかの一般的なデータを格納しています(この場合、メッセージが最近処理された時刻です)。Google App Engineデータベースの不一致
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回以上処理されることもあります。しかし、私はDatastoreの例外を取得していません。これはしばらくの間しか起こらない。
何か助けていただければ幸いです。
元の情報をどのように取得しているかは、サンプルには表示されません。あなたはそれを含めることができますか? –
また、ログエントリの2番目のセットは、最初のセットの前にある - 意図的なものでしたか? –
申し訳ありませんが、私も含めます。はい、ログの順序は逆順です。 – z33m