Есть ли способ выполнить большой цикл for с помощью многопроцессорной обработки Python? - PullRequest
0 голосов
/ 28 октября 2019

Я беру файл 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...