По сути я сейчас базу и использую. Для каждого пользователя, при запуске новой задачи, создается строка, в которой прописывается нулевое значение, к которому как раз с определенным интервалом прибавляется новое значение. Единственное, время выполнения у меня туда не записывается, вот с этим как раз можно и попробовать реализовать как то. Получается, останется добавить функцию, которая будет проверять запись в бд на наличие запущенной задачи, и эту функцию выполнять при старте бота?
Но в этом случае, выходит, под каждая кнопка будет обрабатываться своим хендлером и уже не получится использовать конструкцию с 1 хендлером и несколькими if-elif? Впрочем, другого решения и нет, скорее всего.
Vindicar, в основном коде соединение с БД, и ее закрытие производится, как требуется, в в примере я написал таким образом именно для простоты восприятия.
Решил использовать несколько иную конструкцию. Для "перемешивания" карт взял функцию shuffle из модуля random и далее использую цикл whle true. Но спасибо за совет, он пригодится для реализации другой задумки)