3
나는 예를 들어, 구글의 병렬 검색이, 펄 응용 프로그램이병렬 요청
6
1
7
10
3
9
2
5
8
4
DONE1 (should be before render)
DONE2 (should be before render)
Found! (render)
나는 Mojolicious 응용 프로그램에서이 코드를 사용하는 경우 컨트롤러 :
package MyApp::Google;
use Mojo::Base 'Mojolicious::Controller';
sub search {
my $self = shift;
my $delay = Mojo::IOLoop->delay(sub { $self->app->log->debug('DONE1 (should be before render)') });
foreach my $i (1 .. 10) {
$delay->begin();
$self->ua->get("http://www.google.ru/search?q=$i" => sub {
$self->app->log->debug($i);
$delay->end();
});
}
$delay->wait() unless $delay->ioloop->is_running();
$self->app->log->debug('DONE2 (should be before render)');
return $self->render_text('Found!');
}
그것은 잘못된 방향으로 가고있다
:
,451,515,[Wed May 15 11:07:32 2013] [debug] Routing to controller "MyApp::Google" and action "search".
[Wed May 15 11:07:32 2013] [debug] DONE2 (should be before render)
[Wed May 15 11:07:32 2013] [debug] 200 OK (0.005689s, 175.778/s).
[Wed May 15 11:07:32 2013] [debug] 1
[Wed May 15 11:07:32 2013] [debug] 8
[Wed May 15 11:07:32 2013] [debug] 10
[Wed May 15 11:07:32 2013] [debug] 5
[Wed May 15 11:07:32 2013] [debug] 3
[Wed May 15 11:07:32 2013] [debug] 9
[Wed May 15 11:07:32 2013] [debug] 6
[Wed May 15 11:07:32 2013] [debug] 2
[Wed May 15 11:07:32 2013] [debug] 4
[Wed May 15 11:07:32 2013] [debug] 7
[Wed May 15 11:07:32 2013] [debug] DONE1 (should be before render)
나는 그렇게 $delay->wait()
대기하지 않는 것 같아요. 왜 그럴거야?
가 줘, 제발, 일부 작업 예. 나는 할 수 없다. 해결책은 루트 문제를 해결하지 못합니다. 모든 작업이 완료 될 때까지 기다리는 것이 아닙니다. – Tema
오, 죄송합니다. 지연에서 ** finish ** 이벤트 (** Mojo :: IOLoop-> delay ** 함수의 첫 번째 인수)에서 실제 렌더링을 수행해야합니다. 완전한 예 나는 주된 대답에 추가했다. –
에서'render_text' (그리고 다른 많은 단축키)가 Mojolicious 4.0에서 제거되었습니다. 대신에 표준 양식'$ self-> render (text => 'test!');를 사용해야한다. –