python:循环访问用户列表时泄漏内存

时间:2016-01-27 14:49:58

标签: python google-app-engine memory-management memory-leaks push

我的程序中有一些内存泄漏。我制作了a previous post但这段代码片段更精简了。

每个循环获取100个用户;我们有~6000名用户。

def sync_users():
  api = API()#class handling api-request - no leak
  maxResults = 100
  page_token = ""
  user  = None
  users = None
  while True:
    gc.collect()
    logging.debug(memory_usage().current())
    users = api.user_list(maxResults=maxResults, pageToken=page_token)
    if "users" not in users:
      break
    for user in users["users"]:
      deferred.defer(sync_user, user)
    if "nextPageToken" in users:
      page_token = users["nextPageToken"]
    else:
      break

我使用暂停的任务队列运行它,以便没有其他任务并行运行。 这是我的记忆日志。

    92.703125
    92.70703125
    93.81640625
    94.80859375
    96.2109375
    97.3515625
    98.75
    99.71484375
    101.1796875
    102.44140625
    103.5
    ...
    150.25390625
    151.2421875

内存使用量呈线性增长,最终结果如下: 在为5586个请求提供服务后,超过128 MB的软私有内存限制(153 MB)

有时它会在内存耗尽之前完成;它不是一个无限循环。

0 个答案:

没有答案