У меня есть приложение 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()
В чем здесь проблема? Спасибо!