def _update_threads(diff, proc_name, wp): if diff > 0: # add new threads wp.workers += [ util.WorkerThread(wp.on_exception, wp.tasks) for _ in range(diff) ] _logger.info( "%s workers increased and now its amount = %s" % (proc_name, teletools.running_workers_num(wp.workers))) elif diff < 0: # decrease threads cnt = 0 for i in range(len(wp.workers)): if wp.workers[i]._running: wp.workers[i].stop() _logger.info('%s worker [id=%s] stopped' % (proc_name, wp.workers[i].ident)) cnt += 1 if cnt >= -diff: break cnt = 0 for i in range(len(wp.workers)): if not wp.workers[i]._running: _logger.info('%s worker [id=%s] joined' % (proc_name, wp.workers[i].ident)) wp.workers[i].join() cnt += 1 if cnt >= -diff: break _logger.info( "%s workers decreased and now its amount = %s" % (proc_name, teletools.running_workers_num(wp.workers)))
def manage_threads(self): new_num_threads = self.get_num_of_children() diff = new_num_threads - self.odoo_threads wp = self.odoo_thread_pool if new_num_threads > self.odoo_threads: # add new threads wp.workers += [ util.WorkerThread(wp.on_exception, wp.tasks) for _ in range(diff) ] self.odoo_threads += diff _logger.info("Odoo workers increased and now its amount = %s" % running_workers_num(wp.workers)) elif new_num_threads < self.odoo_threads: # decrease threads cnt = 0 for i in range(len(wp.workers)): if wp.workers[i]._running: wp.workers[i].stop() _logger.info('Odoo worker stop') cnt += 1 if cnt >= -diff: break cnt = 0 for i in range(len(wp.workers)): if not wp.workers[i]._running: wp.workers[i].join() _logger.info('Odoo worker join') cnt += 1 if cnt >= -diff: break self.odoo_threads += diff _logger.info("Odoo workers decreased and now its amount = %s" % running_workers_num(wp.workers))
def __threaded_polling(self, none_stop=False, interval=0, timeout=3): logger.info('Started polling.') self.__stop_polling.clear() error_interval = .25 polling_thread = util.WorkerThread(name="PollingThread") or_event = util.OrEvent( polling_thread.done_event, polling_thread.exception_event, self.worker_pool.exception_event ) while not self.__stop_polling.wait(interval): or_event.clear() try: polling_thread.put(self.__retrieve_updates, timeout) while not or_event.is_set(): time.sleep(.05) # wait for polling thread finish, polling thread error or thread pool error polling_thread.raise_exceptions() self.worker_pool.raise_exceptions() error_interval = .25 except apihelper.ApiException as e: logger.error(e) if not none_stop: self.__stop_polling.set() logger.info("Exception occurred. Stopping.") else: polling_thread.clear_exceptions() self.worker_pool.clear_exceptions() logger.info("Waiting for {0} seconds until retry".format(error_interval)) time.sleep(error_interval) error_interval *= 2 except KeyboardInterrupt: logger.info("KeyboardInterrupt received.") self.__stop_polling.set() polling_thread.stop() break logger.info('Stopped polling.')
def manage_threads(self): for bundle in self.threads_bundles_list: bot = bundle['bot'] wp = bot.worker_pool new_num_threads = int( get_parameter(bot.db_name, 'telegram.telegram_threads')) diff = new_num_threads - bot.telegram_threads if new_num_threads > bot.telegram_threads: # add new threads wp.workers += [ util.WorkerThread(wp.on_exception, wp.tasks) for _ in range(diff) ] bot.telegram_threads += diff _logger.info( "Telegram workers increased and now its amount = %s" % running_workers_num(wp.workers)) elif new_num_threads < bot.telegram_threads: # decrease threads cnt = 0 for i in range(len(wp.workers)): if wp.workers[i]._running: wp.workers[i].stop() _logger.info('Telegram worker stop') cnt += 1 if cnt >= -diff: break cnt = 0 for i in range(len(wp.workers)): if not wp.workers[i]._running: wp.workers[i].join() _logger.info('Telegram worker join') cnt += 1 if cnt >= -diff: break bot.telegram_threads += diff _logger.info( "Telegram workers decreased and now its amount = %s" % running_workers_num(wp.workers))