我已经在我为客户托管的站点上设置了此任务队列实现,它有一个cron job
,它每天凌晨2点运行“/admin/tasks/queue
”,这将排队发送电子邮件,“/admin/tasks/email
”,并使用cursors
至于做小块排队。由于某种原因,昨晚/admin/tasks/queue
不断运行此代码,因此发送了我的整个电子邮件:/
的配额。我用这段代码做错了什么?这个任务队列设置有什么问题?
class QueueUpEmail(webapp.RequestHandler):
def post(self):
subscribers = Subscriber.all()
subscribers.filter("verified =", True)
last_cursor = memcache.get('daily_email_cursor')
if last_cursor:
subscribers.with_cursor(last_cursor)
subs = subscribers.fetch(10)
logging.debug("POST - subs count = %i" % len(subs))
if len(subs) < 10:
logging.debug("POST - Less than 10 subscribers in subs")
# Subscribers left is less than 10, don't reschedule the task
for sub in subs:
task = taskqueue.Task(url='/admin/tasks/email', params={'email': sub.emailaddress, 'day': sub.day_no})
task.add("email")
memcache.delete('daily_email_cursor')
else:
logging.debug("POST - Greater than 10 subscibers left in subs - reschedule")
# Subscribers is 10 or greater, reschedule
for sub in subs:
task = taskqueue.Task(url='/admin/tasks/email', params={'email': sub.emailaddress, 'day': sub.day_no})
task.add("email")
cursor = subscribers.cursor()
memcache.set('daily_email_cursor', cursor)
task = taskqueue.Task(url="/admin/tasks/queue", params={})
task.add("queueup")
感谢您的分析,我最初的想法是memcache可能是一个问题。 – 2010-05-31 20:12:13
Memcache可能是您遇到问题背后的直接原因,是的。你最好的办法是将光标作为每个任务的参数传递给下一个任务。 – 2010-06-01 09:18:28