我在 Google App Engine 中编写一个 twitter 应用程序。它接受命令作为直接消息,因此我设置了第三方 cronjob 服务来调用定期处理 DM 的处理程序。我有一个只有一个条目的模型“信息”,它存储了一些在应用程序中的许多地方使用的通用数据(在这种情况下,是最近处理消息的时间)。我的处理程序的一般模式是这样的:
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 次以上。但我没有收到任何数据存储异常。这种情况只偶尔发生一次。
任何帮助表示赞赏。