2016-11-18 3 views
0

Сценарий должен получать сообщения из api и сохранять их в базе данных.Сценарий работает только при первом запуске

После запуска сценария, который выполняется успешно, он не сможет получать новые сообщения, даже если есть новые для других 5-24 + часов. Он будет возвращать тот же самый старый ответ каждый раз в доли секунды, как он запускался из кеша или что-то в этом роде. (если я удаляю старые сообщения, он все равно добавляет их в db)

Интересно, что если я разворачиваю тот же скрипт, он запускается нормально в первый раз, а затем снова, я должен ждать еще одного 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) 

ответ

0

Appengine URL Fetch службы делает appear кэшировать ответы. Как уже упоминалось в этой google appengine group thread, чтобы перепускной/отключить кэш, вам нужно добавить это вы запрашиваете заголовки:

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

Где "max-age" является старейшей вы хотите возвращаемые данные из кэша быть.

Смежные вопросы