我正在考虑在 Perl 中创建一个允许用户创建错误监视器的 Web 应用程序。所以基本上每个“bug watch”都是一个bug ID,它将与“sleep”时间一起传递给子例程,一旦“sleep time”结束,它必须在不阻塞父进程或对等进程的情况下再次出现。
我试过Schedule::Cron。它支持类似 cron 的格式,但这里 subs 的参数必须是简单的标量,因此我排除了它。
POE/Coro 似乎是另一种选择,但我对此不太了解/ :(
有什么见解吗?TIA
-马特。
我正在考虑在 Perl 中创建一个允许用户创建错误监视器的 Web 应用程序。所以基本上每个“bug watch”都是一个bug ID,它将与“sleep”时间一起传递给子例程,一旦“sleep time”结束,它必须在不阻塞父进程或对等进程的情况下再次出现。
我试过Schedule::Cron。它支持类似 cron 的格式,但这里 subs 的参数必须是简单的标量,因此我排除了它。
POE/Coro 似乎是另一种选择,但我对此不太了解/ :(
有什么见解吗?TIA
-马特。
Schedule::Cron 有什么问题?您可以创建任何您喜欢的子例程引用,因此您可以创建引用您需要的额外或特定数据的闭包。您不必依赖参数列表。该模块是否还有其他不适合您的地方?
我尝试了 Schedule::Cron。它支持类似 cron 的格式,但这里 subs 的参数必须是简单的标量,因此我排除了它。
Schedule::Cron 文档说arguments是对包含在调用 subroutine 时使用的参数的数组的引用。如果您愿意,可以传递对参数的命名数组的引用。由于 cron 条目包含对 @data 的引用,因此您可以根据需要在代码中添加或删除 @data 元素。
$cron->add_entry(
'* * * * *',
subroutine => \&mysub,
arguments => \@data,
);
正如布赖恩建议的那样,您也可以使用闭包:
my $var = 42;
my @arr = get_stuff();
$cron->add_entry(
'* * * * *',
sub { mysub($var, @arr) },
);
有关闭包的更多信息,请参见perlref手册页。
如果您确实决定研究Coro,那么可能值得一看Continuity,因为这是一个围绕 Coro 构建的 Web 库/框架。
另请查看默认情况下“蹲”在Continuity之上的Squatting web microframework 。Squatting 发行版附带了一些使用Coro::Event的示例。
@(brian d foy):我认为 Schedule::Cron 对我有好处的原因 1:$cron->add_entry 似乎没有为我提供将 @arrays/$vars 传递给潜艇的选项。
$cron->add_entry("$temp",{'subroutine' => \&test1,'arguments' => \@array}); 不被允许。
2:我不确定是否有办法在 cron->run(detach=>1); 之后添加新的 cron 条目 已被解雇而没有重新启动脚本..