Remove and return an item from the queue. If queue is empty, wait until an item is available.
(self)
| 147 | self._wakeup_next(self._getters) |
| 148 | |
| 149 | async def get(self): |
| 150 | """Remove and return an item from the queue. |
| 151 | |
| 152 | If queue is empty, wait until an item is available. |
| 153 | """ |
| 154 | while self.empty(): |
| 155 | getter = self._get_loop().create_future() |
| 156 | self._getters.append(getter) |
| 157 | try: |
| 158 | await getter |
| 159 | except: |
| 160 | getter.cancel() # Just in case getter is not done yet. |
| 161 | try: |
| 162 | # Clean self._getters from canceled getters. |
| 163 | self._getters.remove(getter) |
| 164 | except ValueError: |
| 165 | # The getter could be removed from self._getters by a |
| 166 | # previous put_nowait call. |
| 167 | pass |
| 168 | if not self.empty() and not getter.cancelled(): |
| 169 | # We were woken up by put_nowait(), but can't take |
| 170 | # the call. Wake up the next in line. |
| 171 | self._wakeup_next(self._getters) |
| 172 | raise |
| 173 | return self.get_nowait() |
| 174 | |
| 175 | def get_nowait(self): |
| 176 | """Remove and return an item from the queue. |
no test coverage detected