Программа работала дольше суток.
Задержка в основном при обработке таблицы, в которой 12 столбцов и 100.000 строк со строковыми данными в каждой ячейке типа “qwert”, … “ABCDE”.
Таблица в SQLite, который по описанию без проблем работает с миллионом строк или макс значение строк 2 в 64 степени
первый кусок говнокода:
def get_next_list(k): choices=list(BigTable.objects.all().filter(Q(field1__exact=k) | Q(field2__exact=k) ).values_list('field1', 'field2', 'field3', ) ) choice=[] for ch in choices: ch=set(ch) # удалить повторяющиеся члены if "" in ch: ch.remove("") # удалить пустые члены if "ABC" in ch: ch.remove("ABC") # удалить какой-то конкретный член choice=choice + list(ch) choice=set(choice) return list(choice)
этот первый кусок собирает список, потом по этому списку еще раз проходит по таблице, список увеличивается и может вырасти до 500 штук в списке.
потом беру этот список
choices = ["qwert", ... "ABCDE", ...]
def update_records_in_bigtable(uid_br_next, choices): for k in choices: q = BigTable.objects.all().filter(Q(field1__exact=k) | Q(field1__exact=k) | Q(field3__exact=k) & Q(field3=0) ).update(uid_nr=uid_nr_next)
и третий кусок говнокода распределяет полученный список по двум другим таблицам
def add_records_to_crossreftable(choices, obj): for k in choices: try: x = CrossRefTable.objects.create(field1=k, uid_nr_foreign=obj) except: x = DuplicatesTable.objects.create(field1=k)
Пожалуйста дайте совет по улучшению кода