Exemple #1
0
 def put(self, item, block=True, timeout=None):
     """reference to Queue.Queue"""
     self.not_full.acquire()
     try:
         if self.maxsize > 0:
             if not block:
                 if self._qsize() == self.maxsize:
                     raise Full
             elif timeout is None:
                 while self._qsize() == self.maxsize:
                     self.not_full.wait()
             elif timeout < 0:
                 raise ValueError("'timeout' must be a positive number")
             else:
                 endtime = _time() + timeout
                 while self._qsize() == self.maxsize:
                     remaining = endtime - _time()
                     if remaining <= 0.0:
                         raise Full
                     self.not_full.wait(remaining)
         task_id = self._put(item)
         self.unfinished_tasks += 1
         self.not_empty.notify()
     finally:
         self.not_full.release()
     return task_id
        def get(self, block=True, timeout=None):
            """Remove and return an item from the queue.

            Works as does `Queue.Queue.get` except that
              a `get` on a closed queue will raise `Closed`.

            Similarly, a blocked `get` will raise `Closed`
              if the queue is closed during the block.
            """
            self.not_empty.acquire()
            try:
                if not block:
                    if not self._qsize() and not self._closed:
                        raise Empty
                elif timeout is None:
                    while not self._qsize() and not self._closed:
                        self.not_empty.wait()
                elif timeout < 0:
                    raise ValueError("'timeout' must be a positive number")
                else:
                    endtime = _time() + timeout
                    while not self._qsize() and not self._closed:
                        remaining = endtime - _time()
                        if remaining <= 0.0:
                            raise Empty
                        self.not_empty.wait(remaining)
                if self._closed and not self._qsize():
                    raise Closed
                item = self._get()
                self.not_full.notify()
                return item
            finally:
                self.not_empty.release()
        def get(self, block=True, timeout=None):
            """Remove and return an item from the queue.

            Works as does `Queue.Queue.get` except that
              a `get` on a closed queue will raise `Closed`.

            Similarly, a blocked `get` will raise `Closed`
              if the queue is closed during the block.
            """
            self.not_empty.acquire()
            try:
                if not block:
                    if not self._qsize() and not self._closed:
                        raise Empty
                elif timeout is None:
                    while not self._qsize() and not self._closed:
                        self.not_empty.wait()
                elif timeout < 0:
                    raise ValueError("'timeout' must be a positive number")
                else:
                    endtime = _time() + timeout
                    while not self._qsize() and not self._closed:
                        remaining = endtime - _time()
                        if remaining <= 0.0:
                            raise Empty
                        self.not_empty.wait(remaining)
                if self._closed and not self._qsize():
                    raise Closed
                item = self._get()
                self.not_full.notify()
                return item
            finally:
                self.not_empty.release()
        def put(self, item, block=True, timeout=None, last=False):
            """Put an item into the queue.

            Works as does `Queue.Queue.put`, but with these differences:

            If the queue is closed, raises Closed.

            If `last` is True and the put succeeds,
              the queue will be atomically closed.

            Also raises `Closed` in the event that the queue is closed
              while the `put` is blocked.
            """
            self.not_full.acquire()
            try:
                if self.maxsize > 0:
                    if not block:
                        if self._qsize() == self.maxsize and not self._closed:
                            raise Full
                    elif timeout is None:
                        while self._qsize(
                        ) == self.maxsize and not self._closed:
                            self.not_full.wait()
                    elif timeout < 0:
                        raise ValueError("'timeout' must be a positive number")
                    else:
                        endtime = _time() + timeout
                        while self._qsize(
                        ) == self.maxsize and not self._closed:
                            remaining = endtime - _time()
                            if remaining <= 0.0:
                                raise Full
                            self.not_full.wait(remaining)
                if self._closed:
                    raise Closed
                self._put(item)
                self.unfinished_tasks += 1
                if last:
                    self._closed = True
                    self.not_empty.notify_all()
                    self.not_full.notify_all()
                else:
                    self.not_empty.notify()
            finally:
                self.not_full.release()
        def put(self, item, block=True, timeout=None, last=False):
            """Put an item into the queue.

            Works as does `Queue.Queue.put`, but with these differences:

            If the queue is closed, raises Closed.

            If `last` is True and the put succeeds,
              the queue will be atomically closed.

            Also raises `Closed` in the event that the queue is closed
              while the `put` is blocked.
            """
            self.not_full.acquire()
            try:
                if self.maxsize > 0:
                    if not block:
                        if self._qsize() == self.maxsize and not self._closed:
                            raise Full
                    elif timeout is None:
                        while self._qsize() == self.maxsize and not self._closed:
                            self.not_full.wait()
                    elif timeout < 0:
                        raise ValueError("'timeout' must be a positive number")
                    else:
                        endtime = _time() + timeout
                        while self._qsize() == self.maxsize and not self._closed:
                            remaining = endtime - _time()
                            if remaining <= 0.0:
                                raise Full
                            self.not_full.wait(remaining)
                if self._closed:
                    raise Closed
                self._put(item)
                self.unfinished_tasks += 1
                if last:
                    self._closed = True
                    self.not_empty.notify_all()
                    self.not_full.notify_all()
                else:
                    self.not_empty.notify()
            finally:
                self.not_full.release()