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 # => # end Thread.new do Logger.instance # => # 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 # => # Fiber.new do Logger.instance = Logger.new # => # 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.