[ANN] sync-defer 0.9.2 released
sync-defer
by Lin Jen-Shin (godfat)
DESCRIPTION:
Synchronous deferred operations with fibers (coroutines)
CHANGES:
sync-defer 0.9.2 – 2012-03-20
-
Properly select the reactor.
-
Made it exception aware. If there’s an exception raised in the computation, sync-defer would resume back and raise that exception.
INSTALLATION:
gem install sync-defer
SYNOPSIS:
Remember to wrap a fiber around the client, and inside the client:
-
Generic interface which would select underneath reactor automatically:
# Single computation: puts(SyncDefer.defer{ sleep(5) # any CPU-bound operations 100}) # 100 puts "DONE" # Multiple computations: puts(SyncDefer.defer(lambda{ sleep(5) # any CPU-bound operations 100 }, lambda{ sleep(2) # any CPU-bound operations 50})) # [100, 50] # it would match the index puts "DONE"
Full examples with reactor turned on:
-
with cool.io:
# only for adding at least one watcher in the loop Coolio::TimerWatcher.new(1). attach(Coolio::Loop.default).on_timer{detach} Fiber.new{ # or Coolio::SyncDefer SyncDefer.defer{ sleep(5) } puts "DONE" }.resume Coolio::Loop.default.run
-
with eventmachine:
EM.run{ Fiber.new{ # or EM::SyncDefer SyncDefer.defer{ sleep(5) } puts "DONE" EM.stop }.resume }
-
No problems with exceptions, use them as normal:
EM.run{ Fiber.new{ begin SyncDefer.defer{ raise "BOOM" } rescue => e p e end EM.stop }.resume }
0 retries:
Post a Comment
Note: Only a member of this blog may post a comment.