使用Backburner for Beanstalkd时识别和区分工人

时间:2013-02-05 03:56:42

标签: ruby-on-rails ruby sinatra padrino beanstalkd

我正在尝试在我的应用程序中使用BackburnerBeanstalkd的Ruby客户端)来创建50个工作人员,这些工作人员都在为传入的工作查看相同的管道。问题是,这50名工作人员在执行工作时,都会执行一些繁重的文件操作等,并且每个工作人员都需要在唯一命名的编号目录上执行某些操作。例如,worker 7需要使用名为dir7的目录。

最初我以为我可以创建一个拥有50个线程的ThreadsOnFork工作者,并且我能够从worker的perform()方法访问与每个线程关联的数字,但是我无法做到这一点。

如何使用Backburner处理这种情况?或者,如果使用Backburner不可能,使用其他一些Ruby beanstalkd客户端?我希望我能够清楚地了解我的问题。感谢。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题,粗略的方法:写了一个shell脚本,通过环境变量将指定的数字传递给它来启动一个worker。以下是一个片段,如果有人在寻找类似的解决方案:

#!/bin/bash
for i in $(seq 1 "$1"); do
    env WORKER_NUM=$i rake QUEUES=queue1 backburner:work > logs/backburner.log 2>&1 &
done

通过将require 'backburner/tasks'添加到Rakefile,可以使用rake任务,如the Backburner documentation中所述。