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

前端之家收集整理的这篇文章主要介绍了perl – Parallel :: ForkManager()模块是否支持全局变量的同步?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我对Perl中的这个 Parallel::ForkManager模块很新,它有很多学分,所以我认为它支持我需要的东西,我还没想到.

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

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

解决方法

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

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

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

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

猜你在找的Perl相关文章