【问题标题】:A queueing system for PerlPerl 的排队系统
【发布时间】:2012-04-13 13:15:27
【问题描述】:

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

我已经尝试过IPC::DirQueue,但它会因为排队 50k 左右的工作而变得非常缓慢。可以在 Perl 中使用的该模块的替代方案有哪些?

【问题讨论】:

    标签: perl task-queue


    【解决方案1】:

    我在使用 ZeroMQ 解决此类问题方面取得了相当大的成功,无论是使用 Perl 还是其他语言。

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

    【讨论】:

    • ZeroMQ 看起来很有趣,我试试看。
    【解决方案2】:

    我没有在您列出的条件下尝试过,但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;
    

    【讨论】:

      猜你喜欢
      • 2011-05-20
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2010-12-30
      • 2011-10-31
      • 2015-07-27
      相关资源
      最近更新 更多