Threading с PERL в Ирсси
Модуль потока для 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.
1 ответ
Я не могу помочь вам с темами, но в соответствии с Irssi Perl Scripting Reference вы хотите Irssi::timeout_add
функция.
Вы можете найти много примеров, как использовать его в хранилище скриптов Irssi. Основное использование:
use Irssi;
sub check_database {
...
}
Irssi::timeout_add(5*60*1000, "check_database", undef);