2 # -*- coding: utf-8 -*-
3 ##############################################################################
5 # OpenERP, Open Source Management Solution
6 # Copyright (C) 2004-2011 OpenERP SA (<http://www.openerp.com>)
8 # This program is free software: you can redistribute it and/or modify
9 # it under the terms of the GNU Affero General Public License as
10 # published by the Free Software Foundation, either version 3 of the
11 # License, or (at your option) any later version.
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU Affero General Public License for more details.
18 # You should have received a copy of the GNU Affero General Public License
19 # along with this program. If not, see <http://www.gnu.org/licenses/>.
21 ##############################################################################
23 """ Cron jobs scheduling
25 Cron jobs are defined in the ir_cron table/model. This module deals with all
26 cron jobs, for all databases of a single OpenERP server instance.
33 from datetime import datetime
37 _logger = logging.getLogger(__name__)
39 SLEEP_INTERVAL = 60 # 1 min
41 def cron_runner(number):
43 time.sleep(SLEEP_INTERVAL + number) # Steve Reich timing style
44 registries = openerp.modules.registry.RegistryManager.registries
45 _logger.debug('cron%d polling for jobs', number)
46 for db_name, registry in registries.items():
47 while True and registry.ready:
48 acquired = openerp.addons.base.ir.ir_cron.ir_cron._acquire_job(db_name)
53 """ Start the above runner function in a daemon thread.
55 The thread is a typical daemon thread: it will never quit and must be
56 terminated when the main process exits - with no consequence (the processing
57 threads it spawns are not marked daemon).
61 # Force call to strptime just before starting the cron thread
62 # to prevent time.strptime AttributeError within the thread.
63 # See: http://bugs.python.org/issue7980
64 datetime.strptime('2012-01-01', '%Y-%m-%d')
66 for i in range(openerp.tools.config['max_cron_threads']):
69 t = threading.Thread(target=target, name="openerp.service.cron.cron%d" % i)
72 _logger.debug("cron%d started!" % i)
77 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: