【发布时间】:2014-09-10 03:54:36
【问题描述】:
PERL 的线程模块似乎不适用于 Irssi。 我无法获得更多信息,因为#Irssi 的人们从未回应。
我需要让脚本每 5 分钟检查一次数据库。 现在我认为这可以通过 PERL 中的多线程实现,但是一旦包含模块 Irssi 就会抛出异常。
具有讽刺意味的是,如果我尝试构建一个 while 循环,该循环会在 Irssi 客户端挂起一段时间后自行终止。
有什么建议吗?
代码
use strict;
use warnings;
use threads;
use Thread::Queue;
my $q = Thread::Queue->new(); # A new empty queue
# Worker thread
my $thr = threads->create(
sub {
# Thread will loop until no more work
while (defined(my $item = $q->dequeue())) {
# Do work on $item
}
}
);
Irssi 中的错误(不是全部,但同样的,找不到包):
13:30| Can't locate package Irssi::ServerSetup for
@Irssi::Irc::ServerSetup::ISA at
/home/nullby7e/.irssi/scripts/test.pl line 27.
13:30|
13:30| Can't locate package Irssi::Nick for @Irssi::Irc::Nick::ISA at
/home/nullby7e/.irssi/scripts/test.pl line 27.
13:30|
13:30| Can't locate package Irssi::ServerConnect for
@Irssi::Irc::ServerConnect::ISA at
/home/nullby7e/.irssi/scripts/test.pl line 27.
【问题讨论】:
-
我认为 Perl 线程永远不会与 irssi 应用程序一起工作。但是 CPAN 有用于 POE 和 AnyEvent 的 irssi 模块——这种方法更有可能奏效,你研究过吗?
-
我不知道,会调查的。
-
可以用fork命令吗?
标签: multithreading perl irssi