Python 如何计算许多GAE任务的结果?

Python 如何计算许多GAE任务的结果?,python,google-app-engine,google-cloud-datastore,app-engine-ndb,Python,Google App Engine,Google Cloud Datastore,App Engine Ndb,我运行许多任务来获取一些信息并对其进行处理。在每次任务运行之后,我都有一个整数,它指示我得到了多少部分信息。 我想得到从不同任务接收到的这些整数的总和 目前我使用memcache存储sum: def update_memcache_value(what, val, how_long=86400): value_old = get_memcache_value(what) memcache.set('system_'+what, value_old+val, how_long)

我运行许多任务来获取一些信息并对其进行处理。在每次任务运行之后,我都有一个整数,它指示我得到了多少部分信息。 我想得到从不同任务接收到的这些整数的总和

目前我使用memcache存储sum:

def update_memcache_value(what, val, how_long=86400):
    value_old = get_memcache_value(what)
    memcache.set('system_'+what, value_old+val, how_long)

def get_memcache_value(what):
    value = memcache.get('system_'+what)
    if not value:
        value = 0
    return int(value)

update\u memcache\u value
在每个任务中都会被调用(非常频繁地不止一次)。但是看起来那里的数据在白天经常丢失。我可以使用NDB存储相同的数据,但它需要大量的写操作。有没有更好的方法来存储相同的数据(计数器)?

不幸的是,如果您的任务整天都在执行,memcache不是一个选项

如果您想减少写操作,可以设置第二个计数器,并每隔100个任务或任何适合您的任务备份memcache上的值


如果您希望在每项任务中都使用写操作,那么您可以尝试在第三方存储中备份这些结果,例如,通过Google电子表格,但仅仅为了保存一些写操作(而不是性能,这不是问题).

听起来你特别想让许多任务做一部分,然后在最后把它们都减少到一个数字。。。所以您想使用MapReduce。或者您可以只使用管道,因为MapReduce实际上是构建在管道之上的。如果您担心写操作,那么您将无法利用AppEngine的并行性

谷歌I/O 2010-使用谷歌应用程序引擎的数据管道

管道库

MapReduce


NDB不是回写吗?所以我不确定你能做些什么来提高效率。每次更新值时,您都无法避免在某处写入,如果要刷新缓存->mem并且需要持久性,则无法避免写入它。请使用appengine pipelines和/或appengine mapreduce。@DmitrySadovnychyi,我不会面临与管道相同的NDB限制()用法?我认为你的目标是最小化成本,应该是在单个任务中处理尽可能多的数据。你的问题太广泛了。统计计数器的方法有很多,但它们涉及不同的方法。请编辑您的问题,将重点放在一种方法上。