Class: Thespian::Example
- Inherits:
-
Object
- Object
- Thespian::Example
- Defined in:
- lib/thespian/example.rb
Overview
This class aids in running the examples in the different modes.
To run in threaded mode, just run without arguments:
bundle exec ruby examples/task_processor.rb
To run in fibered mode:
bundle exec ruby examples/task_processor.rb --fiber
This class does all the necessary incantations necessary to run in fibered mode (starts/stops EventMachine, wraps in root fiber, etc).
Class Method Summary collapse
-
.run(&example) ⇒ Object
Determine what mode to run in by looking at ARGV then invoke the block given.
Class Method Details
.run(&example) ⇒ Object
Determine what mode to run in by looking at ARGV then invoke the block given. If running in fibered mode, the block will be wrapped with necessary calls to EventMachine and Fiber. It will also make sure to define fiber safe versions of #sleep and #pass that the example can use.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/thespian/example.rb', line 16 def self.run(&example) if ARGV.include?("--fiber") || ARGV.include?("--fibers") require "eventmachine" require "strand" EM.run do Strand.new do puts "Running example with fibers..." Thespian::Actor::DEFAULT_OPTIONS[:mode] = :fiber example.binding.eval <<-CODE def sleep(n); Strand.sleep(n); end def pass; Strand.pass; end CODE example.call EM.stop end end else puts "Running example with threads..." example.binding.eval <<-CODE def pass; Thread.pass; end CODE example.call end end |