Perl 中的简单并行处理

2024-03-21

我在某个对象的函数内有一些代码块,它们可以并行运行并加快速度。

我尝试使用subs::parallel通过以下方式(所有这些都在函数体内):

my $is_a_done = parallelize { 
                              # block a, do some work
                              return 1;
                             };
my $is_b_done = parallelize { 
                              # block b, do some work
                              return 1;
                             };
my $is_c_done = parallelize { 
                              # block c depends on a so let's wait (block)
                              if ($is_a_done) {
                               # do some work
                              };
                              return 1;
                             };
my $is_d_done = parallelize { 
                              # block d, do some work
                              return 1;
                             };

if ($is_a_done && $is_b_done && $is_c_done && $is_d_done) {
 # just wait for all to finish before the function returns
}

首先,请注意我使用if等待线程阻塞并等待前一个线程在需要时完成(更好的主意?if实在是太丑了……)。

其次,我收到一个错误:

Thread already joined at /usr/local/share/perl/5.10.1/subs/parallel.pm line 259.
Perl exited with active threads:
    1 running and unjoined
    -1 finished and unjoined
    3 running and detached

我没见过subs::parallel之前,但考虑到它正在为您完成所有线程处理,而且它似乎正在这样做wrong,根据错误信息,我认为有点可疑。

通常我不会建议就这样扔掉它,但你所做的确实没有任何意义harder使用普通线程接口,那么为什么不尝试一下,并稍微简化问题呢?同时,我将回答你问题的另一部分。

use threads;
my @jobs;
push @jobs, threads->create(sub {
  # do some work
});

push @jobs, threads->create(sub {
  # do some other work
});

# Repeat as necessary :)

$_->join for @jobs; # Wait for everything to finish.

如果您使用这些子函数的返回值(只需切换到哈希值就会有很大帮助),那么您需要一些更复杂的东西,但在您提供的代码示例中,您忽略它们,这使事情变得简单。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Perl 中的简单并行处理 的相关文章

随机推荐

  • Linq to Sql 任意关键字搜索查询

    我的应用程序中有一个案例 用户可以搜索术语列表 搜索需要按以下顺序进行三遍 与他们输入的内容完全匹配的一个 完成 简单 所有单词 单独 匹配的一种 完成了 也很简单 一处any单词匹配 如何 本质上 我如何在 Linq to Sql 中告诉
  • 如何传递 Rscript -e 多行字符串?

    有没有办法提供代码Rscript e多行 这在 vanilla R 中是可能的 R vanilla lt code a lt 3 3 quote gt cat a n quote gt ARGUMENT cat a ignored ARGU
  • Oracle Form 中的旧值和新值

    我正在使用 Oracle Forms 我有一个名为SOLD TO CUST PARTY NAME 如果我检测到字段值发生变化 我必须执行一个过程 我尝试使用when validate 但即使您只需单击该字段并移动到另一个字段 它也会执行 无
  • Entity Framework 4.1 - Code First:多对多关系

    我想建立这样的关系 一个区域位于 x 个其他区域的附近 public class Zone public string Id get set public string Name get set public virtual ICollec
  • 在 Java 中使用 ENUMS 验证值组合的最佳方法是什么?

    我通过如下定义 ENUM 来验证从数据库检索的记录的状态 public enum RecordStatusEnum CREATED CREATED INSERTED INSERTED FAILED FAILED private String
  • 在Linux中使用自定义规则在多个端口上运行的SSH服务[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在努力设置一台在多个端口上运行 SSH 服务的服务器 例如端口 22 和 5522 这些端口应该具有一组不同的规则 即 我们为端口 2
  • 在 C# 中如何将字符串转换为 ascii 二进制?

    不久前 高中一年级 我请一位非常优秀的大三 C 程序员制作一个简单的应用程序 将字符串转换为二进制 他给了我以下代码示例 void ToBinary char str char tempstr int k 0 tempstr new cha
  • 列表未添加 C# 中的所有值

    我尝试了下面的代码来创建 json 代码 代码工作正常 我从数据库加载值 但只有最后一个值我得到了输出 剩余值未添加 DataTable dt new DataTable var objectToSerialize new RootObje
  • 解除PDF密码保护,知道密码[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一堆 pdf 文件 我想从中删除密码 请注意 我知道密码 因此无需暴力破解 我正在 Mac 上工作 所以我想制作一个应用程序来删除这些
  • Git合并分支到master

    我有一个主分支和一个工作分支branch 1 我想 动 一下branch 1正是如此master 所以我想要这样的东西 git checkout master git merge branch 1 I don t know what is
  • symfony2 - twig - 如何从树枝模板内部渲染树枝模板

    我有一个 xxx html twig 文件 它显示一个页面 但是当我想用不同的数据刷新页面并用新数据更新它时 我有一个选择和一个提交按钮 问题是我不知道如何在控制器中调用一个动作 我从我的树枝传递参数并调用新数据 然后我用新参数再次渲染相同
  • Python:单击按钮[重复]

    这个问题在这里已经有答案了 我在单击此按钮时遇到问题 该按钮的 HTML 代码如下所示
  • Eventbug 的实际工作原理

    Eventbug http getfirebug com wiki index php Firebug Extensions Eventbug是 Firebug 的一个附加组件 是的 附加组件的附加组件 其目的是跟踪分配给 DOM 元素的所
  • ld:架构armv7的871个重复符号,clang:错误:链接器命令失败,退出代码1(使用-v查看调用)

    我在 iPhone 应用程序中使用 FastPDFKit 来显示 PDF 当我在模拟器上运行该项目时 它工作正常 但是 当我在 iPhone 上运行该项目时 出现以下错误 duplicate symbol value map in User
  • 如何多次查询并最后关闭连接?

    我想打开与 mysql 数据库的连接并使用不同的查询检索数据 我是否需要在每次获取数据时关闭连接 或者是否有更好的方法可以多次查询并仅在最后关闭连接 目前我这样做 db dbConnect MySQL user root password
  • 我们可以导出 Kibana 中的所有搜索结果数据吗?

    我正在尝试导出 Kibana 5 中的所有搜索结果数据 但它仅导出结果的计数 有没有办法将所有数据导出为 CSV 格式 在基巴纳 到目前为止尝试过 单击搜索结果底部的符号 可视化 尝试使用 原始 和 格式化 选项 数据以 CSV 格式导出
  • symfony:如何设置不同环境的配置参数文件?

    如何为每个环境设置不同的配置参数文件 目前参数在parameters yml两者都使用dev and prod环境 但我需要不同的参数才能在产品中部署我的应用程序 您可以将所有使用的参数放入dev环境在一个app config parame
  • Postgresql计数+排序性能

    我使用 postgresql 和 psycopg2 构建了一个小型库存系统 一切都很好 除了当我想创建内容的聚合摘要 报告时 由于 count 和排序 我的性能非常糟糕 数据库架构如下 CREATE TABLE hosts id SERIA
  • 如何更新 Kubernetes 中的 api 版本列表

    我尝试在我的配置中使用 autoscaling v2beta2 apiVersion 如下本教程 https kubernetes io docs tasks run application horizontal pod autoscale
  • Perl 中的简单并行处理

    我在某个对象的函数内有一些代码块 它们可以并行运行并加快速度 我尝试使用subs parallel通过以下方式 所有这些都在函数体内 my is a done parallelize block a do some work return