What have you found for these years?

2012-03-20

[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

All texts are licensed under CC Attribution 3.0