I have some sort of memory leakage in my program. I made a previous post but this code-snippet it more streamlined.
It fetches 100 users per loop; we got ~6000 users.
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
I ran it with a paused Task-queue so that no other task ran in parallel. This is my memory-log.
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
Memory usage grows linearly and ends with: Exceeded soft private memory limit of 128 MB with 153 MB after servicing 5586 requests total
Sometimes it manage to finish before memory runs out; it's not an infinite loop.