【问题标题】:Identifying and differentiating among workers when using Backburner for Beanstalkd使用 Backburner for Beanstalkd 时识别和区分工作程序
【发布时间】:2013-02-05 03:56:41
【问题描述】:

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

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

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

【问题讨论】:

  • 如果工作人员只需要一个独特的位置来处理文件,为什么不在启动工作进程时根据(例如)GUID 创建一个新目录,然后删除它工人退出。
  • @AlisterBulman 我以其他方式解决了这个问题。我在下面添加了我的解决方案作为答案。

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2022-01-26
    • 2012-01-09
    相关资源
    最近更新 更多