2011-06-28 89 views

回答

3

如果传递一个COUNT选项rake任务,你可以同时运行多个工人:

COUNT=5 QUEUE=* rake resque:workers 

在生产中,你可以使用类似God,让您的进程运行。 Resque项目有一个sample configuration script,允许多个工作人员。

+0

就是这样一个pid文件?排队工作时是否需要做额外的工作,或者Resque会自动将每项工作委派给不同的工作人员?我是否也需要使用“上帝”来管理这些平行工作,还是额外的东西? –

+1

'上帝'只是一种让你的程序在生产中运行的方式;绝对不**需要**。队列的本质是每当添加新工作时,下一个可用的工作人员都会接受它。所以如果你有5个工人和5个工作,每个工作人员都会运行一个工作(这是一个总体概括,尽管 - 我不熟悉Resque的内部知道他们如何专门处理这个工作 - 例如,如果第一个工人在第五个工作分配之前完成工作,第一个工人可以拿到它而不是最后一个工人)。 –

+0

很酷,谢谢。所以,如果我一次有很多很多类似的工作(我可能需要同时处理1000个工作),我是否应该启动大量工作人员?还是有更好的策略呢? –

4

我想看看Resque Pool gem,它可以很容易地为不同的队列设置多个工作人员。然后你可以按队列分组类似的任务。

如果您还没有使用某些进程进行监控,resque-pool可以帮助您通过一个deamon管理您的作品。它还为您提供了几种方法来监控工人的状况。此外,它还允许您通过简单的yaml文件轻松更改每个队列正在运行的工作人员数量。

+1

这与Dylan的解决方案有什么不同? –

+2

resque-pool有一个主守护程序,可以不断确保您拥有配置的工作人员数量。虽然monit或god也可以这样做,但resque-pool守护进程负载你的环境,然后分出父进程。这意味着如果您使用CoW友好的Ruby(例如REE),您将看到相当大量的RAM节省,因为替换该进程仍将受益于共享内存。通过monit或god重新启动的进程将拥有引导环境的完整内存副本。 – nirvdrum

0

如果你的monit监测小心有每个工人

#!/bin/sh 
cd <path of app>/current/ 
for i in 3; 
do 
    VVERBOSE=1 PIDFILE=<path of app>/shared/pids/resque_$i.pid RAILS_ENV=production QUEUE=name_of_queue bundle exec rake environment resque:work > <path of app>/shared/log/resque_$i.log 
done