Mojo :: Command로 구현 된 스크립트가 있습니다. 거대한 텍스트 파일을 읽고 거기에서 데이터를 추출합니다. 이 파일에는 간단한 탭 구분 (C/TSV) 레코드가 들어 있습니다. 한 줄에 한 레코드. 모조 이벤트 루프를 사용하여 레코드를 작은 파일, 즉 레코드 당 하나의 파일에 저장하면 어떻게됩니까? 내 스크립트는 각 레코드가 저장 될 때까지 기다리지 않고 다음 레코드까지 계속됩니다.거대한 텍스트 파일을 처리하는 장기 실행 스크립트에 Mojo Event Loop 사용?
package My::task;
use Mojo::Base 'Mojolicious::Command';
#in My::task::run
#use Text::CSV to open and read the file
while (!$csv->eof()) {
my $row = $csv->getline($fh)
do_something_time_consuming_and_store_the_record_somewhere($row)
}
나는 모조 이벤트 루프를 사용하고 포크 (fork)/스레딩을 방지 할 수있다 생각했다 : 여기
는 벗었 예이다. 성공적으로 이전에 Parallel::Forker을 사용했지만 Mojo가 실행 속도를 높이기 위해 무엇을 제공해야하는지 생각했습니다. 그게 가능합니까? 방법?
do_something ... ($ 행)은 복잡합니다. :) 레코드에서 무엇이 발견되는지에 따라 mysql 데이터베이스에 연결되거나 연결되지 않을 수도 있습니다. 그것은 또한 자기 자신 등등 기록에서 추측에 CPU 집약적 일 수 있습니다. 이것이 내가 그것을 추상화 한 이유입니다. 그러나 아마도 적어도 IO 부분이 레코드를 저장/덤프 할 때까지 기다리지 않고 mysql이 응답하기를 기다리지 않고 어떻게 진행해야합니까? –
나는 또한 hypnotoad를 사용하여 서버 및 클라이언트 측 파트에서 명령을 분할하려고 생각했습니다 ... 물론 잘 모르겠습니다.) ... –
그래서 조합이 있습니다. o) 많이 사용하고 있습니다. DBD :: mysql을 통해 비동기 호출이있는 IOLoop. 그러나 당신이 조합을 가지고 있기 때문에, 당신은 정말로 mojo :: redis와 resque 노동자의 군대와 함께 가고 싶습니다. (#mojo에 diegok 우리의 거주 전문가입니다) – niczero