Каждый день у меня есть работа 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 минут, и это гарантирует, что когда данные будут кэшированы, они будут завершены.
Есть ли лучший способ закодировать это? Такое чувство, что мое решение не самое лучшее....
Спасибо, Том.