MemoryError с django во время массовой вставки данных - PullRequest
2 голосов
/ 12 января 2012

У меня есть приложение django, работающее на компьютере с Linux. Это приложение использует базу данных MySQL, которая содержит список из более чем 40 000 работодателей.
У меня есть команда управления django, которая просматривает этот список работодателей и для каждого загружает и вставляет в базу данных своих сотрудников. У некоторых работодателей менее 100 сотрудников, а у некоторых тысячи. Таким образом, мы говорим о большом количестве данных.

Когда я запускаю эту команду, кажется, что все работает нормально, пока в какой-то момент (примерно через час) я не получу MemoryError. Я не могу понять, где у меня течет память. Вот мой код:

import urllib3

class API:
    @staticmethod
    def getEmployees(employer):

        employees = []

        url = 'someapiurl'
        http_pool = urllib3.connection_from_url(url)
        req = http_pool.get_url(url)

        #this parsing takes between 0.1 to 5 seconds, depending on the size of the response
        doc = xml.dom.minidom.parseString(req.data)

        nodes = doc.getElementsByTagName(MATCHING_ELEMENTS)

        for node in nodes:
            employee = Employee()
            employee.createDataFromNode(node)
            employees.append(employee)

        return employee


class SomeClass:
    #only commit on success - this is to prevent commits from happening every single time save() is called.  

    @transcation.commit_on_success
    @staticmethod
    def createAll():
        #there are over 40,000 employers
        for employer in Employers.objects.all():
            SomeClass.createEmployeesForEmployer(employer)

    @staticmethod
    def createEmployeesForEmployer(employer):
        employees = API.getEmployees(employer)
        for employee in employees:
                employee.save()

В чем здесь проблема? Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...