示例#1
0
 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))
示例#3
0
    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))