Что я хотел донести своим ответом, собственно - это что аргументы к функции можно готовить заранее, а потом скармливать ей сразу все. В моём случае функция - filter(), в вашем - where()
Роман Павлов: ну зачем бояться, попробуйте. Но, конечно, лучше - не долбёжка сервера (вариант №1 по моей версии), а открытые соединения с ним, по которым приходят оповещения - накладных расходов меньше и точность больше (варианты 2 и 3)
Сергей Еремин: посмотрите генерируемый sql для вашей ORM-конструкции и подумайте, что там не так, из-за чего ормовский запрос выполняется так долго, примерно так делается:
TAB2.objects.annotate(num_in_TAB2=Count('TAB2')).order_by('-num_in_TAB2').query.__str__()
Сергей Еремин: ну он просто просит тчобы запрос возвращал первичный ключ, вот так получится?
SELECT TAB2.id, TAB2.option, Count(TAB1.id) AS CountObj ...
Сергей Еремин: ну вы спарсили данные, у вас есть они в каком-то исходном виде. Залейте их в MySQL/PostgreSQL, также как залили в SQLite, снимите дамп и вот. Теперь если что - накатывайте дамп ваших министерских данных после неудачных экспериментов.
Сергей Еремин: .. и смотрел созданный через ORM запрос - вполне себе обычный запрос с одним JOIN'ом, GROUP BY и ORDER BY. Если у вас получится написать на чистом sql для sqlite быстрый запрос - дайте знать, интересно
Сергей Еремин: я вчера перед тем, как вам ответить, сам попробовал составить в консоли джанго запрос по двум связанным моделям одного из проектов. Все прошло успешно и быстро
Сергей Еремин: да вы знаете, мы делаем 2 больших проекта на Django и пока по пальцам одной руки можно перечислить те места, где используем raw sql, так что "с ORM все норм :)". И группировка у нас есть тоже. У вас же не суперэкзотика какая-то. Если вы все равно планируете перейти на серьёзную СУБД, то установите её сейчас на девелоперскую машину и попробуйте этот же запрос через ORM в ней.
@Radzhab, тогда он сам себе злобный буратино.
Вы бездействие юзера хотите определить или компьютера? У вас в вопросе фигурирует и то и то.
Про юзера я описал.
Если компа - задача нетривиальная. Можно, например, смотреть на загрузку процессора, если в среднем она выше чем какое-то значение (ориентироваться на 0 я бы не стал, на простаивающем включенном компьютере процессор все равно используется) - значит какой-то процесс работает. Но, есть такой момент - оставьте простаивать компьютер с развёрнутым браузером, где есть анимированный флэш-баннер, например. Такие вещи могут грузить проц на несколько десятков процентов. Можно сказать, что юзер бездействует? да. А компьютер? Ну типа того, но формально - нет, проц -то ведь загружен.
В мои молодые годы я всякие хранители экрана и отключения по бездейстию пользователя просто по времени двигал гарантированно дальше, чтобы успело закончиться "формирование отчета в 1с"
@crazyzubr Ну, в итоге переопределил модель, заодно слив её с когда-то созданной UserExtra, которая была связана с auth.User 1 к 1. Регулярка была последней каплей))