當前位置: 首頁>>代碼示例>>Python>>正文


Python tools.PriorityQueue類代碼示例

本文整理匯總了Python中willie.tools.PriorityQueue的典型用法代碼示例。如果您正苦於以下問題:Python PriorityQueue類的具體用法?Python PriorityQueue怎麽用?Python PriorityQueue使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。


在下文中一共展示了PriorityQueue類的3個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。

示例1: clear_jobs

 def clear_jobs(self):
     """Clear current Job queue and start fresh."""
     if self._jobs.empty():
         # Guards against getting stuck waiting for self._mutex when
         # thread is waiting for self._jobs to not be empty.
         return
     with self._mutex:
         self._cleared = True
         self._jobs = PriorityQueue()
開發者ID:Alhifar,項目名稱:CGRelay,代碼行數:9,代碼來源:bot.py

示例2: __init__

 def __init__(self, bot):
     """Requires bot as argument for logging."""
     threading.Thread.__init__(self)
     self.bot = bot
     self._jobs = PriorityQueue()
     # While PriorityQueue it self is thread safe, this mutex is needed
     # to stop old jobs being put into new queue after clearing the
     # queue.
     self._mutex = threading.Lock()
     # self.cleared is used for more fine grained locking.
     self._cleared = False
開發者ID:Alhifar,項目名稱:CGRelay,代碼行數:11,代碼來源:bot.py

示例3: JobScheduler

    class JobScheduler(threading.Thread):

        """Calls jobs assigned to it in steady intervals.

        JobScheduler is a thread that keeps track of Jobs and calls them every
        X seconds, where X is a property of the Job. It maintains jobs in a
        priority queue, where the next job to be called is always the first
        item.
        Thread safety is maintained with a mutex that is released during long
        operations, so methods add_job and clear_jobs can be safely called from
        the main thread.

        """

        min_reaction_time = 30.0  # seconds
        """How often should scheduler checks for changes in the job list."""

        def __init__(self, bot):
            """Requires bot as argument for logging."""
            threading.Thread.__init__(self)
            self.bot = bot
            self._jobs = PriorityQueue()
            # While PriorityQueue it self is thread safe, this mutex is needed
            # to stop old jobs being put into new queue after clearing the
            # queue.
            self._mutex = threading.Lock()
            # self.cleared is used for more fine grained locking.
            self._cleared = False

        def add_job(self, job):
            """Add a Job to the current job queue."""
            self._jobs.put(job)

        def clear_jobs(self):
            """Clear current Job queue and start fresh."""
            if self._jobs.empty():
                # Guards against getting stuck waiting for self._mutex when
                # thread is waiting for self._jobs to not be empty.
                return
            with self._mutex:
                self._cleared = True
                self._jobs = PriorityQueue()

        def run(self):
            """Run forever."""
            while True:
                try:
                    self._do_next_job()
                except Exception:
                    # Modules exceptions are caught earlier, so this is a bit
                    # more serious. Options are to either stop the main thread
                    # or continue this thread and hope that it won't happen
                    # again.
                    self.bot.error()
                    # Sleep a bit to guard against busy-looping and filling
                    # the log with useless error messages.
                    time.sleep(10.0)  # seconds

        def _do_next_job(self):
            """Wait until there is a job and do it."""
            with self._mutex:
                # Wait until the next job should be executed.
                # This has to be a loop, because signals stop time.sleep().
                while True:
                    job = self._jobs.peek()
                    difference = job.next_time - time.time()
                    duration = min(difference, self.min_reaction_time)
                    if duration <= 0:
                        break
                    with released(self._mutex):
                        time.sleep(duration)

                self._cleared = False
                job = self._jobs.get()
                with released(self._mutex):
                    if job.func.thread:
                        t = threading.Thread(
                            target=self._call, args=(job.func,)
                        )
                        t.start()
                    else:
                        self._call(job.func)
                    job.next()
                # If jobs were cleared during the call, don't put an old job
                # into the new job queue.
                if not self._cleared:
                    self._jobs.put(job)

        def _call(self, func):
            """Wrapper for collecting errors from modules."""
            # Willie.bot.call is way too specialized to be used instead.
            try:
                func(self.bot)
            except Exception:
                self.bot.error()
開發者ID:Alhifar,項目名稱:CGRelay,代碼行數:95,代碼來源:bot.py


注:本文中的willie.tools.PriorityQueue類示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。