我有一个每分钟刷新网页的 Perl 脚本。现在我想添加一些应该每小时一次的 MySQL 查询。Perl 中是否有像 JavaScript 一样的调度执行器,或者我可以将 JavaScript 合并到 Perl 中吗?
问问题
787 次
2 回答
2
此解决方案与Perl一起使用。
您可以localtime()
在 perl 中使用函数。计算一个小时的差异并拍摄 MySQL 查询。
要了解,localtime()
请访问此链接。
或者
您可以使用 CPAN 的Time::HiRes
.
请阅读Time::HiRes
这里。
或者
遵循以下代码:
use Time::Elapse;
## somewhere in your code...
Time::Elapse->lapse(my $now);
#...rest of code execution
print "Time Elapsed: $now\n";
于 2013-03-07T07:57:45.880 回答
0
我建议这样的事情。包括一个时间戳,该时间戳将结转到下一次更新(调整元标记以使其发生)。如果 sql 必须在 1 小时内运行,则会出现一些问题,但我想这只是一些维护。只有在运行sql时才会更新时间戳,并且只有在当前时间比上一个时间戳晚一小时以上时才会运行sql。
以下将时间戳更新为 3600 秒,而不是使用当前时间。然后我们非常接近每小时运行一次。
一些 Web 开发人员不喜欢以这种方式使用元刷新,因此 javascript 或 cookie 可能是一种选择。(但如果这对你有用,请高兴:-)
use strict;
use CGI;
#time() is number of seconds since long time ago
my $lastrun = CGI->param('lastrun') || time();
#if hour is important (ie not 58 or 61 minutes) then need to
#consider the time spent running this script, etc
if (time() > $lastrun + 60 * 60) { #one hr is 60 sec * 60 min
$lastrun += 60 * 60; #udate timestamp before starting sql
#run sql
}
#do fixed stuff every minute
print qq|
Pragma: no-cache
Content-Type: text/html
<html><head>
<!-- remember to adust the url below ---vvvvvvvvvvvvvvvv-----here -- so time is ok vvvvv -->
<meta http-equiv="refresh" content="60;URL='http://example.com/script.pl?lastrun=$lastrun">
</head>
<body>hello again, waiting...</body>
<html>
|;
于 2013-03-07T17:48:47.980 回答