48 lines
1.5 KiB
Python
Executable File
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()
|