Skip to content

Instantly share code, notes, and snippets.

@gaffneyc
Created February 27, 2012 18:20
Show Gist options
  • Save gaffneyc/1925958 to your computer and use it in GitHub Desktop.
Save gaffneyc/1925958 to your computer and use it in GitHub Desktop.
require "rubygems"
require "ffi-rzmq"
Thread.abort_on_exception = true
COUNT = 100
WORKER_COUNT = 2
context = ZMQ::Context.create
producer = Thread.new do
socket = context.socket(ZMQ::PUSH)
socket.setsockopt(ZMQ::LINGER, 0)
socket.bind("inproc://messages")
COUNT.times do |i|
count = (COUNT - i - 1)
msg = "#{count} bottles of beer on the wall"
socket.send_string(msg, 0)
end
WORKER_COUNT.times do
socket.send_string("")
end
socket.close
end
workers = []
WORKER_COUNT.times do |i|
workers << Thread.new do
socket = context.socket(ZMQ::PULL)
socket.setsockopt(ZMQ::LINGER, 0)
socket.connect("inproc://messages")
loop do
msg = ""
socket.recv_string(msg)
puts "#{i}: #{msg.inspect}"
break if msg.size == 0
end
socket.close
puts "#{i}: Done"
end
end
puts "Waiting for producer"
producer.join
context.terminate
workers.each(&:join)
puts "Workers joined"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment