【发布时间】:2010-10-16 20:53:27
【问题描述】:
我正在 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 次以上。但我没有收到任何数据存储异常。这种情况只会偶尔发生一次。
感谢任何帮助。
【问题讨论】:
-
您没有在示例中显示您最初是如何检索信息的。你能把它包括进去吗?
-
另外,第二组日志条目的日期早于第一组 - 这是故意的吗?
-
对不起,我也将其包括在内.. 是的,日志是按时间倒序排列的..
-
您的脚本是否可能在最后到达 put() 之前超时?我没有看到任何日志条目来确认情况并非如此。
-
no.. 我没有得到任何超时异常,这些是我得到的唯一日志