@lemonlimelike

Как запускать определенное кол-во потоков?

Здравствуйте всем! Имею файл в 10к записей. Как запускать 10 потоков для каждые 10 записей. То есть, чтоб было не больше 10 потоков.

Имею такой код:
from threading import Thread
from openpyxl import load_workbook, Workbook
from fuzzywuzzy import process



def get_list_data(input_file_name):
    '''Получение списка товаров из файла'''
    list_data = []
    wb = load_workbook(filename=input_file_name)
    sheet = wb.active
    m_row = sheet.max_row
    with open('conf/alias.txt', 'r') as file_alias:
        list_alias = []
        for item in file_alias:
            # if ',' in item:
            #     list_alias.append(item.title().replace(
            #         '\n', '').split(',')[-1])
            # else:
            list_alias.append(item.title().replace('\n', ''))

    for i in range(1, m_row+1):
        if not sheet.cell(row=i, column=1).value:
            continue
        title = str(sheet.cell(row=i, column=1).value).replace("'", '')
        brand_s = str(sheet.cell(row=i, column=2).value).replace(
            "'", '').rstrip().title().split(' ')
        point_match = process.extractOne(brand_s[0], list_alias)
        alias = str(sheet.cell(row=i, column=2).value).replace("'", '').rstrip().title()
        if point_match is not None:
            if point_match[-1] >= 50:
                alias = point_match[0]

        brand = '+'.join(brand_s)
        min_count = str(sheet.cell(row=i, column=3).value).replace("'", '')
        max_time_delivery = str(sheet.cell(
            row=i, column=4).value).replace("'", '')
        count_sell = str(sheet.cell(
            row=i, column=5).value).replace("'", '')
        object = {'idnp': title, 'brand': brand, 'min_count': min_count,
                  'max_time_delivery': max_time_delivery, 'count_sell': count_sell, 'alias': alias}
        list_data.append(object)

    return list_data


if __name__ == '__main__':
	list_data = get_list_data('Копия китай.xlsx')

	for index,item in enumerate(list_data):
		print(index)


Была идея сделать так: запустить цикл по списку с шагом 10 и создавать поток на i,i-1,i-2,...,i-10 записей. Но с enumerate такое сделать не получается. Была еще идея: добавлять в список индексы записей уже которые были в потоках и каждый раз проверять, но это слишком тупо. Подскажите как сделать правильно.
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
HemulGM
@HemulGM Куратор тега Python
Delphi Developer, сис. админ
Используй не "алгоритм над потоком", а "алгоритм в потоке". Т.е. Напиши метод, куда ты передаешь файл и параметр (N) от 1 до 10. Внутри метода иди по файлу с учетом параметра, по условию if (i div 10) mod N = 0 ...
И либо создавай отдельные потоки внутри метода и выполни метод 10 раз, либо запускай методы в отдельных потоках, соответственно 10 штук
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы