Имам задача cron всеки ден, за да направя повикване до API и да извлека някои данни. За всеки ред от данните стартирам опашка със задачи за обработка на данните (което включва търсене на данни чрез допълнителни API). След като всичко това приключи, моите данни не се променят през следващите 24 часа, така че ги кеширам.
Има ли начин да разбера кога всички задачи, които поставих на опашка, са приключили, за да мога да кеширам данните?
В момента го правя по наистина объркан начин, като просто планирам две задания на cron като това:
class fetchdata(webapp.RequestHandler):
def get(self):
todaykey = str(date.today())
memcache.delete(todaykey)
topsyurl = 'http://otter.topsy.com/search.json?q=site:open.spotify.com/album&window=d&perpage=20'
f = urllib.urlopen(topsyurl)
response = f.read()
f.close()
d = simplejson.loads(response)
albums = d['response']['list']
for album in albums:
taskqueue.add(url='/spotifyapi/', params={'url':album['url'], 'score':album['score']})
class flushcache(webapp.RequestHandler):
def get(self):
todaykey = str(date.today())
memcache.delete(todaykey)
Тогава моят cron.yaml изглежда така:
- description: gettopsy
url: /fetchdata/
schedule: every day 01:00
timezone: Europe/London
- description: flushcache
url: /flushcache/
schedule: every day 01:05
timezone: Europe/London
По принцип - правя предположение, че изпълнението на всичките ми задачи няма да отнеме повече от 5 минути, така че просто изчиствам кеша 5 минути по-късно и това гарантира, че когато данните бъдат кеширани, те са завършени.
Има ли по-добър начин за кодиране на това? Чувствам, че моето решение не е най-доброто....
Благодаря Том