加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – Parallel :: ForkManager()模块是否支持全局变量的同步

发布时间:2020-12-15 21:42:27 所属栏目:大数据 来源:网络整理
导读:我对Perl中的这个 Parallel::ForkManager模块很新,它有很多学分,所以我认为它支持我需要的东西,我还没想到. 我需要做的是在每个子进程中,它根据每个子进程中计算的键值将一些更新写入全局哈希映射. 但是,当我继续在for循环之外声明一个哈希映射并期望在循环
我对Perl中的这个 Parallel::ForkManager模块很新,它有很多学分,所以我认为它支持我需要的东西,我还没想到.

我需要做的是在每个子进程中,它根据每个子进程中计算的键值将一些更新写入全局哈希映射.
但是,当我继续在for循环之外声明一个哈希映射并期望在循环之后更新哈希映射时,事实证明哈希映射保持为空.
这意味着虽然循环内部的更新成功(通过打印出值),但在循环外部则不然.

有谁知道如何编写这样一段代码来做我想要的?

解决方法

这不是Perl特定的问题,而是理解Unix风格的进程.分叉新进程时,进程之间默认不共享任何内存.根据您的需要,有几种方法可以达到您想要的效果.

一种简单的方法是使用像BerkeleyDB这样的东西将哈希绑定到磁盘上的文件.绑定哈希可以在fork之前初始化,然后每个子进程都可以访问它. BerkeleyDB文件旨在安全地同时从多个进程访问.

更复杂的方法是使用某种形式的进程间通信.有关实现此目的的所有细节,请参阅perlipc联机帮助页,其中详细介绍了Perl支持的几种IPC方法.

如果你的Perl支持它,最后的方法是使用线程并在它们之间共享变量.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读