Files
tryton/trytond/cron.py
T
Cédric Krier 8a4ba59b2d Switch to WSGI API
issue4646
review20541003
2016-03-15 16:57:26 +01:00

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()