The following code adds tasks that do some processing of files from blobstore, it works on B2 backend therefore it has no timeout limit:
for task in tasks: tools.debug("add_tasks_to_process_files", "adding_task") taskqueue.add(\ name=("Process_%s_files---%s--%s--%s--%s" % \ (len(tasks[task]), task[1], task[0], task[2], int(time.time()))),\ queue_name="files-processor",\ url="/analytics/process_files/",\ params={"processing_task": json.dumps({"profile": task, "blobs_to_process": tasks[task]})})
Tasks is a dictionary in the following form:
{ (x1,y1,z1): ["blob_key", "blob_key"... (limited to 35 keys)], (x2,y2,z2): ["blob_key", "blob_key"...], . . . }
x1, y1, z1 - all lines
tools.debug is a function that I wrote that sends messages to my local server using urlfetch (so I don't have to wait 20 minutes to read the logs):
def debug(location, message, params=None, force=False): if not (settings.REMOTE_DEBUG or settings.LOCALE_DEBUG or force): return if params is None: params = {} params["memory"] = runtime.memory_usage().current() params["instance_id"] = settings.INSTANCE_ID debug_message = "%s/%s?%s" % (urllib2.quote(location), urllib2.quote(message), "&".join(["%s=%s" % (p, urllib2.quote(unicode(params[p]).encode("utf-8"))) for p in params])) if settings.REMOTE_DEBUG or force: fetch("%s/%s" % (settings.REMOTE_DEBUGGER, debug_message)) if settings.LOCALE_DEBUG or force: logging.debug(debug_message)
since tools.debug was not in the code when it first failed, I know for sure that this is not causing memory problems.
I got this error:
/add_tasks_to_process_files/ 500 98812ms 0kb instance=0 AppEngine-Google; (+http://code.google.com/appengine): A serious problem was encountered with the process that handled this request, causing it to exit. This is likely to cause a new process to be used for the next request to your application. If you see this message frequently, you may have a memory leak in your application. (Error code 201)
And right after it:
/_ah/stop 500 110ms 0kb Exceeded soft private memory limit with 283.406 MB after servicing 1 requests total
I got it for the code above without a line: tools.debug("add_tasks_to_process_files", "adding_task")
Now let me show you what I see in my debugger:
1 2012-1-19 14:41:38 [processors-backend] processors-backend-initiated instance_id: 1329662498, memory: 18.05078125, backend_instance_url: http://0.processors.razoss-dock-dev.appspot.com, backend_load_balancer_url: http://processors.razoss-dock-dev.appspot.com 2 2012-1-19 14:41:39 [AddTasksToProcessFiles] start instance_id: 1329662498, files_sent_to_processing_already_in_previous_failed_attempts: 0, memory: 19.3828125 3 2012-1-19 14:41:59 [AddTasksToProcessFiles] add_tasks_to_process_files-LOOP_END total_tasks_to_add: 9180, total_files_added_to_tasks: 9184, task_monitor.files_sent_to_processing: 0, total_files_on_tasks_dict: 9184, instance_id: 1329662498, memory: 56.52734375 4 2012-1-19 14:42:0 [add_tasks_to_process_files] adding_task instance_id: 1329662498, memory: 57.81640625 5 2012-1-19 14:42:0 [add_tasks_to_process_files] adding_task instance_id: 1329662498, memory: 57.81640625 6 2012-1-19 14:42:1 [add_tasks_to_process_files] adding_task instance_id: 1329662498, memory: 57.9375 7 2012-1-19 14:42:2 [add_tasks_to_process_files] adding_task instance_id: 1329662498, memory: 57.9375 8 2012-1-19 14:42:2 [add_tasks_to_process_files] adding_task instance_id: 1329662498, memory: 58.03125 . . . 2183 2012-1-19 14:53:45 [add_tasks_to_process_files] adding_task instance_id: 1329662498, memory: 280.66015625 2184 2012-1-19 14:53:45 [add_tasks_to_process_files] adding_task instance_id: 1329662498, memory: 280.66015625 2185 2012-1-19 14:53:45 [add_tasks_to_process_files] adding_task instance_id: 1329662498, memory: 281.0 2 186 2012-1-19 14:53:46 [add_tasks_to_process_files] adding_task instance_id: 1329662498, memory: 281.0 2187 2012-1-19 14:53:46 [add_tasks_to_process_files] adding_task instance_id: 1329662498, memory: 281.0 2188 2012-1-19 14:53:46 [add_tasks_to_process_files] adding_task instance_id: 1329662498, memory: 281.3828125
full track: http://pastebin.com/CcPDU6s7
Is there a memory leak in taskqueue.add ()?
thanks