[Moscow.pm] Coro + AnyEvent --- Что не так
Ivan Petrov
i.petro.77.00 на gmail.com
Чт Окт 15 13:55:20 PDT 2015
> did you try to block inside an event loop callback?
основная идея - из калбаков AE не делать ничего кроме уведомлений.
соответственно что нельзя делать
- писать в Channel
- трогать что угодно что может позвать cede/schedule
то есть идеология такая
- если пишем однократный ожидальщик то используем стандартный
механизм Coro::rouse_*
- если пишем многократный ожидальщик (например сервер), то лучше
всего использовать совокупность schedule + ready
то есть заводим
my $watcher;
my @tasks;
sub do_task {
тут можно создавать async, писать в каналы итп
}
async {
while (1) {
$watcher = $Coro::current;
Coro::schedule;
while(@tasks) {
do_task(shift @tasks);
}
}
};
В калбеке приема соединения как-то так:
sub {
my ($fh) = @_;
push @tasks => $fh;
$watcher->ready if $watcher;
$watcher->undef;
}
Подробная информация о списке рассылки Moscow-pm