PerlProc::简单地返回后台子例程的值



我想在后台运行一个子例程,并在程序中返回其值。所以我做的是

 use Proc::Simple;
 $myproc = Proc::Simple->new();        # Create a new process object
 $myproc->start(&subroutine);         # Launch a perl subroutine

但是我的子程序返回了一个值。我第一次尝试使用全局变量,但没有成功。

有人知道我如何从bg过程中返回值吗?

查看Proc::Simple的代码,返回值被丢弃。start()方法只返回0或1,具体取决于fork是否成功。

我想你需要使用某种形式的IPC来获得返回值。

有人知道我如何从bg进程返回值吗

如果没有某种形式的进程间通信,进程通常只将其退出状态传递给父进程。CCD_ 1通过CCD_。

然而,您的子例程可能会返回一个简单数字以外的东西,在这种情况下,您需要设计某种IPC,或者将异步处理作为线程移回主程序。

Forks::Super中的bg_eval方法解决了这个问题,为您处理所有IPC。

use Forks::Super;
my $value = bg_eval &subroutine;

在后台运行函数subroutine,并返回一个绑定标量(或绑定数组,如果在列表上下文中调用)。下一次引用$value时,父进程将在后台进程中检索子例程调用的返回值,并在必要时等待它完成。

... do something else ...
push @other_vals, $value;  # return val from bg proc, waiting if nec.

我认为最简单的方法是使用线程。我可以在线程中运行子例程,并使用join()来使用它的返回值。

相关内容

  • 没有找到相关文章

最新更新