脚本只能在第一次运行时正常工作

时间:2016-11-18 21:30:47

标签: google-app-engine google-app-engine-python reddit

脚本必须从api获取帖子并将其保存到数据库中。

运行成功运行的脚本后,即使有另外5-24小时的新内容,也无法获取新帖子。 它会在每秒的几分之一内返回相同的旧响应,就像从缓存或其他东西运行一样。 (如果我删除旧帖子,它仍会将它们添加到数据库中)

有趣的是,如果我部署相同的脚本,它第一次运行正常,然后再次运行,我必须再等待5-24小时。

如果它成功运行,则需要3-10秒,否则需要不到一秒钟。

我真的很困惑,是否有类似缓存响应的内容?或者这可能是reddit api方面的问题?添加任何此选项会有帮助吗?

CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 100,
CURLOPT_TIMEOUT => 100

我目前正在使用请求库

r = requests.get(url, headers = {'User-agent': 'My App 12345'})
response = r.json()

以下是我的剧本的GAE部分

class MainHandler(webapp2.RequestHandler):
def get(self):
    # --------------- Database Connection ---------------
    global db
    global cursor

    if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine/'):
        db = MySQLdb.connect(xxx)
    else:
        db = MySQLdb.connect(xxx)
    cursor = db.cursor()
    # ---------------------------------------------------
    fetchFromReddit("") # Start fetching script

    self.response.write("Finished !")

    db.close()
    cursor.close()

    app = webapp2.WSGIApplication([
        ('/url', MainHandler)
    ], debug=True)

1 个答案:

答案 0 :(得分:0)

Appengine URL Fetch服务执行appear以缓存响应。如此google appengine group thread中所述,要绕过/禁用缓存,您需要将其添加到请求标头中:

headers={'Cache-Control': 'no-cache,max-age=0', 'Pragma': 'no-cache'}

其中"max-age"是您希望从缓存返回的最旧数据 是