Size: a a a

2020 April 10

МК

Михаил Козачков in Modern::Perl
Anton Petrusevich
короче, делайте что хотите :)
Лишь бы нам это не поддерживать?)
источник

AP

Anton Petrusevich in Modern::Perl
просто я уже всё сказал :)
источник

VG

Vadim Goncharov in Modern::Perl
у меня уже 45 минут без всяких коро и фьючерсов работает :)
источник

VG

Vadim Goncharov in Modern::Perl
размером с Эйфелевую Башню костыль, конечно
источник

AP

Anton Petrusevich in Modern::Perl
я и не говорил, что это невозможно. просто надо учитывать некоторые вещи в архитектуре заранее
источник

VG

Vadim Goncharov in Modern::Perl
да-да, особено нереальные пиздецы в поведении чужого сервера :)
источник

SZ

Sergey Zhmylove in Modern::Perl
Vadim Goncharov
да-да, особено нереальные пиздецы в поведении чужого сервера :)
Таки да, иначе за что по-твоему так много платят архитекторам? :)
источник
2020 April 11

VG

Vadim Goncharov in Modern::Perl
а знатоки нюансов форков вообще и AnyEvent::Fork::RPC есть? всё работает, кроме одного странного момента:

в главном
$decoders{$layer}->{proc} = $proctmpl
   ->fork
   ->send_arg($decoders{$layer}->{inc})
   ->AnyEvent::Fork::RPC::run ("TLExtDecoder::run",
       init       => "TLExtDecoder::init",
       serialiser => $AnyEvent::Fork::RPC::NSTORABLE_SERIALISER,
...
       on_event   => sub {
           if ($_[0] eq "ae_log") {
               my (undef, $pid, $ctx, $level, $message) = @_;
               (AnyEvent::Log::ctx "$layer\[$pid]/$ctx")->log($level, $message);
           } else {
               AE::log warn => "event from layer $layer: $_[0]\n";
           }

в воркере TLExtDecoder:
sub init {
...
   $AnyEvent::Log::LOG->fmt_cb(sub { [ @_ ] }); # Lehmann docs is wrong, this is needed for
   $AnyEvent::Log::LOG->log_cb(sub {            # such log_cb as this
       my ($time, $ctx, $lvl, $msg) = @{+shift};

       if (defined &AnyEvent::Fork::RPC::event) {
           AnyEvent::Fork::RPC::event (ae_log => $$, $ctx->title, $lvl, $msg);
       } else {
           warn "[$$ before init] $msg\n";
       }
   });
...

sub run {
...
   if ($@) {
       AE::log error => "TL unpack died: $@";
       return (0, undef);
   }

и вот когда последнее происходит, в консоль вываливается
Use of uninitialized value $pid in concatenation (.) or string at ./cborlog.pl line 110.
Use of uninitialized value $pid in concatenation (.) or string at ./cborlog.pl line 110.

а в логе парента
2020-04-10 23:26:24.442361 +0300 error 82[]/TLExtDecoder: run:62: TL unpack died: unexpected stream end at TL/Object.pm line 197.

так вот, куда вдруг делся pid из $$ если все остальные поля приходят нормально?.. О_о

(если что, FreeBSD и 5.30, на винде и 5.20 логгинг таким макаром нормально передавался)
источник

AT

Artem Tepponen in Modern::Perl
Ну залогируй дебажно этот $$ в отдельный файл синхронно. Чтобы поделить, где продевалось
источник

VG

Vadim Goncharov in Modern::Perl
да я его в начале инита прям в консоль логал, правильный был
источник

VG

Vadim Goncharov in Modern::Perl
а, ну на винде я еще встроенный сериализатор использовал, а здесь Storable - но он по идее должен дружить со всей магией какой только можно...
источник

AP

Anton Petrusevich in Modern::Perl
а что вообще в @_ приходит смотрел?
источник

AP

Anton Petrusevich in Modern::Perl
думаю, что дело в этом:
Also called on errors when no on_error handler is provided.
источник

AP

Anton Petrusevich in Modern::Perl
то есть твой хендлер он_ивент вызывается не только тогда, когда ты думаешь, но и когда потомок подыхает
источник

VG

Vadim Goncharov in Modern::Perl
нет, потомок не подыхает, там eval {}
источник

AP

Anton Petrusevich in Modern::Perl
стрим то закрывается
источник

VG

Vadim Goncharov in Modern::Perl
нет, он продолжает работать и декодить
источник

a

allter in Modern::Perl
Всем привет. По мотивам страданий с асинхронностью, описанных выше, собрался и причесал свой велосипед, который я использую в своих тестах (наподобие property-based), что бы не тащить Coro.

Кому-нибудь интересен такой модуль? Если да, то предлагайте лучшие названия для dop/into. async/await не хочу, что бы не было путаницы :)

Сахар примерно такой получается:

my $result_promise = dop                                                                                                                                                      
   sub { into v1 => promise1() },
   sub { into v2 => promise2( $_->{v1} ) },
   sub { into _ => log_promise( "acquired values: ".join( ', ', @$_{ qw(v1 v2) } ) ) },
   sub { [ @$_{ qw(v1 v2) } ] }, # Values that will be yielded by the $result_promise
   ;
источник

a

allter in Modern::Perl
P.S. Кстати, на CPAN за последний год появились 2 новых модуля промисов, которых там не было - Promise::ES6 и Promise::XS
источник
2020 April 12

VO

Vyacheslav Olkhovchenkov in Modern::Perl
что-то я торможу, для условного use модуля нормальный вариант -- только в eval этот use засовывать?
источник