Size: a a a

2020 January 18

IB

Ivan Bessarabov in Modern::Perl
Не уверен что правильно понял что ты хочешь сделать.
источник

IB

Ivan Bessarabov in Modern::Perl
вот тебе пример вызова перловой сабы при получении результата
источник

IB

Ivan Bessarabov in Modern::Perl
#!/usr/bin/perl

use strict;
use warnings FATAL => 'all';
use feature 'say';
use utf8;
use open qw(:std :utf8);

use Minion;
use Data::Dumper;

my $minion = Minion->new(
   SQLite => 'sqlite:/tmp/minion.db',
);

sub cb {
 my ($result) = @_;

 warn $result;
}

$minion->add_task(add => sub {
 warn 'in job';
 my ($job, $first, $second) = @_;

 my $result = $first + $second;

 cb($result);
});

my $id = $minion->enqueue(add => [1, 1]);

my $worker = $minion->worker;
$worker->status->{jobs} = 2;
$worker->run;
источник

IB

Ivan Bessarabov in Modern::Perl
У меня обычно определине кода который молотит задачу (`$minion->add_task(`) и постановка задачи (`$minion->enqueue`) находится в разных файлах.
источник

МИ

Михаил Иванов in Modern::Perl
Правильнее сказать - в разных процессах
источник

AP

Anton Petrusevich in Modern::Perl
Колбэк в самом джобе? Оригинально
источник

SS

Supreme Spirit in Modern::Perl
Михаил Иванов
Правильнее сказать - в разных процессах
ага, вот это я уже понял
источник

AP

Anton Petrusevich in Modern::Perl
Gearman таки лучше, думаю
источник

SS

Supreme Spirit in Modern::Perl
объясню, что хочу. я немного работал с celery, minion по сути то же самое. как подсказал @bessarabov, чтобы гарантировать сохранность результата в случае краша, стоит засунуть каждую whois-проверку в таск. но воркер работает в режиме ожидания и после окончания тасков он ждет новые. я хочу, чтобы он завершал работу, то есть вызывал $worker->unregister; по идее.

синтаксис перла весьма не прост, не сразу получается въехать)

как я вообще вижу свою задачу. в $minion->enqueue я передаю параметр, в котором имя домена. и, получается, внутри $minion->add_task я беру этот параметр и вызываю метод модуля, который выполняет whois-запрос. дальше я обрабатываю этот ответ и сохраняю в базу запись. это все внутри каждого таска. после окончания выполнения всех задач, воркер должен остановиться и скрипт выгрузит в файл из базы все нужные строки.
источник

IB

Ivan Bessarabov in Modern::Perl
> но воркер работает в режиме ожидания и после окончания тасков он ждет новые. я хочу, чтобы он завершал работу, то есть вызывал $worker->unregister; по идее.
не понял что что ты хочешь
источник

SS

Supreme Spirit in Modern::Perl
Ivan Bessarabov
> но воркер работает в режиме ожидания и после окончания тасков он ждет новые. я хочу, чтобы он завершал работу, то есть вызывал $worker->unregister; по идее.
не понял что что ты хочешь
если запустить этот скрипт. он будет запущен вечно
источник

IB

Ivan Bessarabov in Modern::Perl
так
источник

SS

Supreme Spirit in Modern::Perl
что логично, но мне надо завершать по окончанию задач
источник

b

basiliscos in Modern::Perl
kill делай скрипту, когда завершил
источник

SS

Supreme Spirit in Modern::Perl
к примеру, в течение 5 секунд после выполнения задачи не поступает новых – остановить воркер
источник

b

basiliscos in Modern::Perl
но вообще так не делают
источник

SS

Supreme Spirit in Modern::Perl
basiliscos
но вообще так не делают
вот-вот)
источник

b

basiliscos in Modern::Perl
что ты хочешь сэкономить, убив скрипт?
источник

b

basiliscos in Modern::Perl
всё равно запускать его заново через нек. время... так пусть висит?
источник

IB

Ivan Bessarabov in Modern::Perl
Какжется, я понял — ты просто хочешь один скрипт, внутри которого находится все. Ты сего запускаешь — он все молотит, а потом завершает работу.
источник