Python3.10
У меня скрипт в цикле забирает события из базы, обрабатывает их и удаляет.
import mysql.connector
import logging
from logging.handlers import RotatingFileHandler
scope.mysqldb = mysql.connector.connect(**mysql_connect)
scope.mysqlcursor = scope.mysqldb.cursor(dictionary=True)
init_logger()
while time_limit() > 0:
scope.mysqlcursor.execute("SELECT * FROM subscriptions_events ORDER BY event_at ASC LIMIT 500");
events = scope.mysqlcursor.fetchall();
print (f"found {len(events)} subscription events")
logger.info(f"found {len(events)} subscription events")
if 0 == len(events):
print ('sleeping')
time.sleep(1)
continue
# process events
# delete events
def init_logger(log_file='sync.log'):
global logger;
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
handler = RotatingFileHandler('sync.log', mode='a', maxBytes=1 * 1024 * 1024, backupCount=0)
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
Если в таблице, например 800 событий, то он печатает
found 500 subscription events
found 300 subscription events
found 0 subscription events
Все нормально. Но если потом в таблице появляются новые события, то уже запущенный скрипт их не видит - он печатает по прежнему
found 0 subscription events
И только если скрипт перезапустить, то он видит новые события.
Еще одна непонятка. Строка с количеством найденных записей пишется также и в логфайл. Но когда скрипт не получает новых записей, то лог файл даже не создается, хотя в консоль печатается дальнейший "sleeping". Но если перезапустить скрипт при наличии пустой таблицы - то в лог файл все пишется.
Таблица заполняется триггером.
Почему так?