我正在使用以下腳本創建一些rss快照(只是說)。Python - GAE - 消耗大量內存的腳本循環
該腳本運行在後端,我有一些非常大的不斷增加的內存消耗。
class StartHandler(webapp2.RequestHandler):
@ndb.toplevel
def get(self):
user_keys = User.query().fetch(1000, keys_only=True)
if not user_keys:
return
logging.info("Starting Process of Users")
successful_count = 0
start_time = time.time()
for user_key in user_keys:
try:
this_start_time = time.time()
statssnapshot = StatsSnapShot(parent=user_key,
property=get_rss(user_key.id())
)
#makes a urlfetch
statssnapshot.put_async()
successful_count += 1
except:
pass
logging.info("".join(("Processed: [",
str(successful_count),
"] users after [",
str(int(time.time()-start_time)),
"] secs")))
return
編輯
這裏也是RSS功能可以說:
def get_rss(self, url):
try:
result = urlfetch.fetch(url)
if not result.status_code == 200:
logging.warning("Invalid URLfetch")
return
except urlfetch.Error, e:
logging.warning("".join("Fetch Failed to get ",url," with",e))
return
content = result.content #Around 500 - 200KB
reobj = re.compile(r'(?<=")[0-9]{21}(?=")')
user_ids = reobj.findall(content)
user_ids = set(user_ids)#set to fail if something is not unique
return user_ids
腳本運行正常,但隨着用戶越來越腳本消耗越來越多的內存。 來自C我不知道如何操縱Python中的內存和變量高效。
例如,我知道如果python中的變量不再被引用,垃圾回收器將釋放用於該變量的memeory,但那麼似乎是我的情況,我在哪裏做錯了?
如何優化這個腳本不有不斷增加的內存使用,但只消耗內存需要爲每個用戶進程?
我沒有當場在您的代碼段任何_obvious_內存泄漏,但1 /我有沒有GAE的經驗,2 /有部分代碼沒有提交(特別是「StatsSnapShot」)。 只是一對夫婦暗示/是更pythonic: - logging.warning(「」。join(「Fetch獲取失敗」,url,「with」,e))'=>'logging.exception(「Fetch Failed %s「,url,e)' - 'set(someseq)'不會'失敗,如果不是唯一的' - **永遠不會**使用裸體except子句(至少使用日誌記錄.exception有一些反饋意見) –
@brunodesthuilliers這意味着將失敗是錯字,意味着不復制。 –
use_cache = False按預期工作嗎? – tesdal