0

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

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

如何使用 Backburner 处理这种情况?或者,如果 Backburner 无法使用其他 Ruby beanstalkd 客户端?我希望我的问题足够清楚。谢谢。

4

1 回答 1

0

我以粗略的方式解决了这个问题:编写了一个 shell 脚本,通过环境变量将其指定的编号传递给它来启动一个工作者。下面是一个片段,如果有人正在寻找类似的解决方案:

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

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

于 2013-02-19T16:31:53.930 回答