Files
tradon/cron.py
2025-12-26 13:11:43 +00:00

48 lines
1.5 KiB
Python
Executable File

# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import logging
import threading
import time
from trytond.pool import Pool
from trytond.transaction import Transaction
__all__ = ['run']
logger = logging.getLogger(__name__)
def run(options):
threads = []
for name in options.database_names:
thread = threading.Thread(target=lambda: Pool(name).init())
thread.start()
threads.append(thread)
for thread in threads:
thread.join()
threads = {}
while True:
for db_name in options.database_names:
thread = threads.get(db_name)
if thread and thread.is_alive():
logger.info(
'skip "%s" as previous cron still running', db_name)
continue
database_list = Pool.database_list()
pool = Pool(db_name)
if db_name not in database_list:
with Transaction().start(db_name, 0, readonly=True):
pool.init()
Cron = pool.get('ir.cron')
thread = threading.Thread(
target=Cron.run,
args=(db_name,), kwargs={})
logger.info('start thread for "%s"', db_name)
thread.start()
threads[db_name] = thread
if options.once:
break
time.sleep(60)
for thread in threads.values():
thread.join()