2017-03-02 12 views
0

perlperl 스크립트를 호출하여 일반 데이터베이스 쿼리를 처리하는 스크립트가 있습니다.다른 스크립트를 호출하는 동안 perl 스크립트 성능이 잘못되었습니다.

때때로 내부 스크립트 호출이 너무 자주 발생하면 데이터베이스에 적절한 값이 삽입되지 않고 디버그에서 새로운 계산 값을 삽입하기 전에 데이터베이스에서 모든 레코드를 가져올 수 없다는 것을 발견했습니다 .

나는 system() 자식 스크립트를 호출하는 방법을 사용했습니다. 이것은 자식 프로세스가 끝날 때까지 기다릴 것이지만 자식 호출이 빈번히 일어나는 동안 어떻게 오산하는 것이 가능한가? 정상적인 시나리오에서는 주 스크립트가 30 초 동안 유지되어 하위 스크립트가 올바르게 실행됩니다.

누구든지 내 코드 또는이 종류의 문제에 대한 해결책을 디버깅하기위한 제안 사항이있을 수 있습니다.

+0

작업의 결과가의 세부 사항에 따라 즉, 경쟁 조건이 될 수 각 프로세스 또는 스레드 스케줄링. 볼 코드가 없으면 진단 불가능한 것입니다. 그리고 시프트 키가 깨진 것처럼 보입니다. – Jens

+0

대문자를 적절히 사용하십시오. 질문을 훨씬 쉽게 읽을 수 있습니다. – Borodin

답변

1

모든 DB 삽입에 대한 Perl 스크립트 실행은 매우 효과적입니다.

Perl은 (호출 될 때마다) 호출 된 스크립트를 먼저 컴파일하므로 상당한 오버 헤드가 발생합니다.

OOP를 사용하고 DB 처리 코드를 별도의 클래스에 넣는 것이 훨씬 좋습니다 - 실행시 한 번만 컴파일됩니다. 또는 모듈을 사용하고 DB 코드를 함수에 넣으면 한 번만 컴파일됩니다. "use"pragma를보십시오. 예를 들어

: 모듈과 간단한 programm에

main_file.pl

use strict; 
use DB_code; 
DB_code::insert($data); 

DB_code.pm

package DB_code; 
use strict; 

sub insert { 
    my $data = shift; 
    print "Your data has been inserted!"; 
} 

1;