I was asked to give this a quick look; do you have a reproducer that
demonstrates the problem?
It looks to me like the bounded Queue implementation tries hard to push
back against unconstrained resource growth:
def put(
[ ... ]
future = Future() # type: Future[None]
try:
self.put_nowait(item)
except QueueFull:
self._putters.append((item, future))
_set_timeout(future, timeout)
else:
future.set_result(None)
return future
def put_nowait(self, item: _T) -> None:
[ ... ]
self._consume_expired()
if self._getters:
assert self.empty(), "queue non-empty, why are getters waiting?"
getter = self._getters.popleft()
self.__put_internal(item)
future_set_result_unless_cancelled(getter, self._get())
elif self.full():
raise QueueFull
else:
self.__put_internal(item)
def full(self) -> bool:
if self.maxsize == 0:
return False
else:
return self.qsize() >= self.maxsize
Taken together, these look to me like they should raise an error if the Queue
is already full, place the requestor on the _putters list, and keep going.
It's a guess, but I'd hope the size of the _putters list is constrained
by per-process open file limits -- eg I'm hoping every _putter
represents a socket, and those are usually constrained to 1024 per
process, or 10k per process, etc.
Thanks
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1903733
Title:
Out of memory issue for websocket client
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/python-tornado/+bug/1903733/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs