44 lines
1.4 KiB
Python
44 lines
1.4 KiB
Python
# 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 threading
|
|
import logging
|
|
|
|
from trytond.pool import Pool
|
|
from trytond.transaction import Transaction
|
|
|
|
__all__ = ['run']
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def run(options):
|
|
database_list = Pool.database_list()
|
|
for dbname in options.database_names:
|
|
thread = _threads.get(dbname)
|
|
if thread and thread.is_alive():
|
|
logger.info('skip "%s" as previous cron still running', dbname)
|
|
continue
|
|
pool = Pool(dbname)
|
|
if dbname not in database_list:
|
|
with Transaction().start(dbname, 0, readonly=True):
|
|
pool.init()
|
|
if not pool.lock.acquire(0):
|
|
logger.warning('can not acquire lock on "%s"', dbname)
|
|
continue
|
|
try:
|
|
try:
|
|
Cron = pool.get('ir.cron')
|
|
except KeyError:
|
|
logger.error(
|
|
'missing "ir.cron" on "%s"', dbname, exc_info=True)
|
|
continue
|
|
finally:
|
|
pool.lock.release()
|
|
thread = threading.Thread(
|
|
target=Cron.run,
|
|
args=(dbname,), kwargs={})
|
|
logger.info('start thread for "%s"', dbname)
|
|
thread.start()
|
|
_threads[dbname] = thread
|
|
_threads = {}
|
|
Pool.start()
|