Perl的排队系统

时间:2012-04-13 13:15:28

标签: perl task-queue

我正在开发一个Perl项目,该项目需要一个FIFO消息队列,用于在一台机器上的多个进程之间分配任务(UNIX)。队列大小可能会增加到1M个作业。

我已经尝试了IPC::DirQueue,但是当排入约5万个作业时,它变得非常缓慢。这个模块有哪些好的替代品可以在Perl中使用?

2 个答案:

答案 0 :(得分:9)

我使用ZeroMQ在Perl和其他语言中使用ZeroMQ取得了相当不错的成功。

根据我的经验,ZeroMQ模块似乎是目前Perl最可靠的绑定。

答案 1 :(得分:4)

我没有在您列出的条件下尝试过,但Thread::Queue已证明对我有用。与forks结合使用,只要这些进程由队列创建者生成,它就可以用于与进程通信。

use forks;  # If you want to use processes instead of threads.
use Thread::Queue qw( );

工人模型通常是理想的。

my $q = Thread::Queue->new();

my @workers;
for (1..$NUM_WORKERS) {
   push @workers, async {
      while (my $item = $q->dequeue()) {
         ...
      }
   };
}

# ... Enqueue requests [ $q->enqueue($request); ] ...

# Signal termination
$q->enqueue(undef) for 1..@workers;

# Collect workers.
$_->join() for @workers;