gpt4 book ai didi

perl - 与 perl 的按需进程间通信

转载 作者:行者123 更新时间:2023-12-02 22:31:01 25 4
gpt4 key购买 nike

想象进程间通信

+--------------+                               +------------+
| main_process | ==produces data somewhat to=> | monitoring |
+--------------+ +------------+

哪里:

  • main_process 不停地运行 并为 monitoring 生成一些数据
  • monitoring只是有时运行,当它运行时它应该读取 main_process 产生的数据
  • monitoring未运行 main_process 生成的数据不应该被保存。

问题是:如何写出像“按需”的IPC

main_process 的代码基本就是下一个(真正的比较复杂):

use 5.014;
use warnings;
my $box = new BlackBox( callback => sub {
my ($self, $jref) = @_;
#
# processing of $jref
#
});
$box->run();

callback每 2-5 秒调用一次,正如我上面所说,此过程应该不间断运行。我无法更改 BlackBox。

我需要:

  • processing of $jref部分 - 应该发送什么 $jref某处
  • monitoring进程本身,什么应该读取数据,什么时候运行...

不需要任何代码,只需要一些指向正确方向的指针,或者知道如何做到这一点,而不会填满我的内存或硬盘,所以最简单的方法:

  • 将 $jref 写入文件不合适 因为它会在 monitoring 时填满我的硬盘。没有运行。

如果有人关心,$jref是对 json 字符串的引用,所以我可以这样做:

 use JSON::XS qw(decode_json):
my $perlref = decode_json($$jref);

最佳答案

我的第一个想法是“UDP 到本地主机?”

该想法的变体包括 AF_UNIX 或命名管道。使用流套接字,您将执行非阻塞连接,而使用管道,您将执行 O_WRONLY|O_NONBLOCK,如果您获得 EAGAIN,则无需写入即可返回。

您可以保存您的文件句柄并在多个调用中重复使用它,如果您得到 EPIPE,只需关闭它并重新打开它。您需要 $SIG{PIPE}='IGNORE'; 希望黑匣子不会反对。

读取方面就像 cat $path_to_fifonc -l -u -p $udpport 一样简单,如果您使用 AF_UNIX 套接字,则稍微困难一些。

关于perl - 与 perl 的按需进程间通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12245788/

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