来自perlipc /信号:
eval {
local $SIG{ALRM} = sub { die "alarm clock restart" };
alarm 10;
flock(FH, 2); # blocking write lock
alarm 0;
};
if ($@ and $@ !~ /alarm clock restart/) { die }
Run Code Online (Sandbox Code Playgroud)
如果超时的操作是system()或qx(),则此技术可能会生成僵尸.如果这对你很重要,你需要自己做fork()和exec(),并杀死错误的子进程.
我有一个类似的代码,其中超时的操作是system()或qx().
关于僵尸他们消耗记忆的坏事还是僵尸可以伤害的方式更多?
我正在使用精彩的AnyEvent来创建异步TCP服务器(特别是MUD服务器).
为了保持一切顺利运行并且尽可能少的阻塞/同步代码片段,我已经用异步对应物替换了一些我使用的模块,例如AnyEvent :: Memcached和AnyEvent :: Gearman.这允许主程序非常快速,这是期望的.我编写了一些这些调用需要同步的代码.
我目前遇到的一个问题是这个问题的重点是记录.
在转向此服务器程序的AnyEvent之前,我使用的是Log :: Log4perl,因为它允许我微调哪些模块或子程序应该被记录,在哪个级别以及哪个日志输出(屏幕,文件等).
这里的问题是Log4perl操作(警告,信息等)当前是同步执行的,但只要日志行最终在屏幕/文件上(并按正确的顺序),我就没有要求.
当使用异步事件处理程序(如AnyEvent)时,Log :: Log4perl仍然是正确的选择,还是应该查看其他模块?如果是这样,推荐哪个?
关注舞者教程:
http://search.cpan.org/dist/Dancer/lib/Dancer/Tutorial.pod
我正在使用我自己的sqlite3数据库与此架构
CREATE TABLE if not exists location (location_code TEXT PRIMARY KEY, name TEXT, stations INTEGER);
CREATE TABLE if not exists session (id INTEGER PRIMARY KEY, date TEXT, sessions INTEGER, location_code TEXT, FOREIGN KEY(location_code) REFERENCES location(location_code));
Run Code Online (Sandbox Code Playgroud)
我的舞者代码(helloWorld.pm)用于数据库:
package helloWorld;
use Dancer;
use DBI;
use File::Spec;
use File::Slurp;
use Template;
our $VERSION = '0.1';
set 'template' => 'template_toolkit';
set 'logger' => 'console';
my $base_dir = qq(/home/automation/scripts/Area51/perl/dancer);
# database crap
sub connect_db {
my $db = qw(/home/automation/scripts/Area51/perl/dancer/sessions.sqlite);
my $dbh = DBI->connect("dbi:SQLite:dbname=$db", …Run Code Online (Sandbox Code Playgroud)