Fiber::Local
¶ ↑
A module to simplify fiber-local state.
Features¶ ↑
-
Easily access fiber-local state from a fiber.
-
Default to shared thread-local state.
Installation¶ ↑
$ bundle add fiber-local
Usage¶ ↑
In your own class, e.g. Logger
:
class Logger extend Fiber::Local def initialize @buffer = [] end def log(*arguments) @buffer << arguments end end
Now, instead of instantiating your cache LOGGER = Logger.new
, use Logger.instance
. It will return a thread-local instance.
Thread.new do Logger.instance # => #<Logger:0x000055a14ec6be80> end Thread.new do Logger.instance # => #<Logger:0x000055a14ec597d0> end
In cases where you have job per fiber or request per fiber, you might want to collect all log output for a specific fiber, you can do the following:
Logger.instance # => #<Logger:0x000055a14ec6be80> Fiber.new do Logger.instance = Logger.new # => #<Logger:0x000055a14ec597d0> end
Contributing¶ ↑
We welcome contributions to this project.
-
Fork it.
-
Create your feature branch (
git checkout -b my-new-feature
). -
Commit your changes (
git commit -am 'Add some feature'
). -
Push to the branch (
git push origin my-new-feature
). -
Create new Pull Request.
Developer Certificate of Origin¶ ↑
This project uses the Developer Certificate of Origin. All contributors to this project must agree to this document to have their contributions accepted.
Contributor Covenant¶ ↑
This project is governed by the Contributor Covenant. All contributors and participants agree to abide by its terms.
See Also¶ ↑
-
thread-local — Strictly thread-local variables.