Во-первых, вам нужна дополнительная сложность многопоточности?Сколько времени занимает ваш текущий процесс?Есть ли у вас несколько процессоров или несколько процессорных ядер на сервере, на котором вы будете его запускать, что сделает многопоточность выгодной?
Я не собираюсь писать ваш код для вас, но могу датьВы несколько указателей ...
Как бы вы сделали эту работу вручную?Предположим, у вас были эти записи в виде бумажных документов, и вам пришлось разделить задачу с коллегой.Как бы вы поделили работу?Между 2 или 20 людьми?(Вот сколько потоков вы могли бы разделить на это.)
Как только вы выяснили эти детали, вы можете создать несколько потоков (ваших работников, используя родительский код "диспетчера"), каждый из которых настроен на выбор толькочасть результатов по вашему запросу.Вам следует сохранять ссылки на каждый из ваших потоков и вызывать .join()
для каждого из них после их запуска, чтобы дождаться завершения всего пакета.Если имеется большой объем данных, которые будет трудно разделить на равные единицы работы (1000 записей, разделенных на 500 и 500, по любой причине могут потребовать 75% и 25% ресурсов), вы можете рассмотреть возможность разделения работы.в гораздо меньшие единицы (больше единиц, чем потоков), тогда диспетчер продолжит передавать единицы работы рабочим, пока вся работа не будет назначена.
Также подумайте, будут ли эти разделенные функции работы действительно отличаться?Если по какой-либо причине происходит сбой одной единицы работы и ее необходимо откатить в базе данных, означает ли это, что все другие единицы работы необходимо остановить и откатить любые существующие операции вставки?