как правильно ограничить использование данных по счетчику

robisho

Активный пользователь
Пользователь
Окт 19, 2020
151
26
28
Добрый день. Вводные такие: есть списки строк (global_lst и llist), скрипт идет по global_lst и применяет одну из строк llist к одной строке global_lst, причем использоваться строки llist могут только определенное количество раз в час (count). Используется ThreadPool(thread). После исчерпания счетчика скрипт засыпает на оставшееся от часа время, после пробуждения продолжает обход global_lst, а счетчик count для llist обнуляется. Получается, что если len(llist) == 3 и count == 5, то за час скрипт должен отработать 3 х 5 = 15 строк из global_lst, т.е. каждая строка из llist отработает за час 5 раз.
Завел ddict, в котором ключ - это строка из llist, а значение - это count. При использовании строки из llist счетчик count += 1.
Но всё упирается в количество thread. Если len(llist) * count == thread, то работает правильно. Но если len(llist) * count != thread, то значения в словаре ddict будут больше по факту, чем нужно. Допустим, если thread = 10, len(llist) = 3 и count = 5, то скрипт останавливается, когда ddict = {element1: 7, element2: 6, element3: 7}, а должен останавливаться, когда {element1: 5, element2: 5, element3: 5}.
Подскажите, пожалуйста, как можно вовремя остановить скрипт.
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 668
475
83
ничего не понятно, но очень интересно...
 
  • Ха-ха!
Реакции: 4olshoy_blen

robisho

Активный пользователь
Пользователь
Окт 19, 2020
151
26
28
извините, объяснил, как сумел) там весь скрипт на 3500+ строк.

thread = 10
count = 5
len(llist) = 3
после отработки первых 10 потоков значения в ddict меньше count( {element1: 4, element2: 3, element3: 3} ), скрипт продолжает работу. после отработки вторых 10 потоков значения в ddict уже больше count( {element1: 7, element2: 7, element3: 6} ), поэтому скрипт останавливается. а нужно, чтобы скрипт тормозился, когда значения в ddict равны count.

upd: пока формулировал - понял, что если сумма amount ( (count - val1) + (count - val2) + (count - val3) ) меньше thread, то thread должен быть равен amount в этом случае.
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
435
119
43
там весь скрипт на 3500+ строк.
ого😲. Это же трудно дебажить. Лучше разбить на несколько файлов
 

Форум IT Специалистов