Я беру файл Excel (.xlsx) в качестве входных данных, который имеет около 30 000 строк. Я использую XLRD для чтения файла Excel. После прочтения файла я выполняю некоторую обработку данных и сохраняю их в массиве объектов. Дело в том, что мой код отлично работает для небольшого числа строк, например от 100 до 200, но он зацикливается на больших файлах.
Я пробовал использовать многопоточность Python, но так и не нашел правильного решения.
def read(file_object, request):
company_id = request.session[SessionKeys.COMPANY_KEY]
wb = xlrd.open_workbook(file_object.file.path)
data = dict()
for sheet_index, sheet in enumerate(wb.sheets()):
number_of_rows = sheet.nrows
number_of_columns = sheet.ncols
items = []
needs_edit = False
for row in range(1, number_of_rows):
al = AttendanceLog()
for index, col in enumerate(range(number_of_columns)):
al.company_id = company_id
al.file_id = file_object.id
if index not in [0, 1, 4, 6]:
value = sheet.cell(row, col).value
if index == 2:
al.code = value
try:
al.employee = Employee.objects.filter(company_id=company_id).get(code=value)
al.name = al.employee.name
except ObjectDoesNotExist:
needs_edit = True
if index == 3:
al.date = xlrd.xldate.xldate_as_datetime(value, wb.datemode).date()
if index == 5:
al.time = value
items.append(al)
data[sheet_index] = {'items': items, 'needs_edit': needs_edit}
return data