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