From: "Eregon (Benoit Daloze)" <noreply@...>
Date: 2022-07-27T10:23:01+00:00
Subject: [ruby-core:109336] [Ruby master Feature#18774] Add Queue#pop(timeout:)

Issue #18774 has been updated by Eregon (Benoit Daloze).


byroot (Jean Boussier) wrote in #note-12:
> So I started to implement `Queue#pop(timeout:)` and `SizedQueue#pop(timeout:)` https://github.com/ruby/ruby/pull/6185

Thanks!

> As pointed by @ioquatix, I believe that `SizedQueue#push` should have a timeout as well.

I think it'd be fine to add, and I don't think that needs to be discussed in a dev meeting again since it's so similar.
It seems good to add for consistency so all 3 blocking Queue/SizedQueue methods (the 2 #pop + SizedQueue#push) have a timeout.

----------------------------------------
Feature #18774: Add Queue#pop(timeout:)
https://bugs.ruby-lang.org/issues/18774#change-98479

* Author: Eregon (Benoit Daloze)
* Status: Open
* Priority: Normal
----------------------------------------
This has been mentioned many times but somehow was never added.
It is useful for many different use cases:
* Implementing Timeout#timeout without needing to create a Thread per call which is very inefficient (especially when the timeout is not hit): https://github.com/ruby/timeout/pull/14#issuecomment-1123380880
* @jeremyevans0 I would love a Queue#pop :timeout argument. It would simplify the mutex/condition variable approach currently used for Sequel's connection pool.
* @byroot Same. I wanted it so many times
* https://bugs.ruby-lang.org/issues/17363
* https://spin.atomicobject.com/2014/07/07/ruby-queue-pop-timeout/ + https://spin.atomicobject.com/2017/06/28/queue-pop-with-timeout-fixed/
* More in my email searches but this seems already plenty

I think it should be a keyword argument for clarity, and so there is no confusion with the existing optional argument `non_block=false`.



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>