gpt4 book ai didi

perl - Inline::Java 与 Parallel::ForkManager 冲突

转载 作者:行者123 更新时间:2023-12-02 09:39:16 24 4
gpt4 key购买 nike

我在同时调用 Parallel::ForkManagerInline::Java 时遇到问题。具体来说,如果我使用 JNI => 1 选项(我必须这样做)调用 Inline::Java ,那么 fork 进程不会返回到父进程。代码如下:

use Parallel::ForkManager;

##### Calling Inline::Java #####
use Inline Java => <<END, JNI => 1;

END
###### End of Inline::Java #####

my $pm = Parallel::ForkManager->new(2);
for my $i (0..1) {
$pm->start and next;
print "Inside process $i\n";
$pm->finish;
}
$pm->wait_all_children;
print "Back to Parent.\n";

如果我运行这个程序,它会进入子进程,但永远不会返回到父进程。如果我删除注释之间的 3 行,它就可以正常运行。如果我将 JNI => 1 更改为 JNI => 0 (并不是说我可以出于我的目的更改该参数),则会出现以下错误消息与/usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/Inline/Java.pm 第 975 行的 Java 虚拟机失去连接

有人知道如何解决冲突吗?我还必须在并行过程之前调用 Inline::Java,因此在并行完成后使用 require 不是一个选项。谢谢!

最佳答案

每个 child 都通过同一个套接字进行通话,这会导致虚拟机接收到乱码。

您需要延迟与虚拟机的连接,以便在子级而不是父级中完成。

您可以将所有与 Inline::Java 相关的内容移动到另一个模块中,然后使用 require Child; (不是 use Child; )在 start 之后.

如果您需要在启动子进程之前使用 Inline::Java,请在不同的进程中进行。

关于perl - Inline::Java 与 Parallel::ForkManager 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7756139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com