스크립팅 및 매우 큰 파일많은 파일을 가져와 연결하는 스크립트가 있습니다.
이 파일은 >4,100만 행이 될 수 있으며 10기가비트에 속할 수 있습니다(100GB의 여유 공간과 128GB 메모리가 있습니다: JMP16.2 사용).
그런 다음 행과 열 등을 선택하는 스크립트가 있습니다.내 질문은 스크립팅 그 자체에 관한 것이 아니라 각 스크립트를 순서대로 실행하는 경우와 모든 스크립트를 포함하는 스크립트를 사용하는 경우 JMP가 "중단"되는 이유입니다.
예를 들어, 각 JSL을 순서대로 실행하면 모든 것이 작동하는 것처럼 보입니다.
1. Concat_files.JSL
2. Change_Test_Instance_Name.JSL
3. 요약_테스트_인스턴스.JSL
대
나를 위해 위의 각각을 실행하는 스크립트 ...
예를 들어,
Run_all_scripts.JSL
include("ADDIN_HOME(my_scripts)\Concat_files.jsl");
include(("ADDIN_HOME(my_scripts)\Change_Test_Instance_Name.JSL");
include("ADDIN_HOME(my_scripts)\Summarize_Test_Instance.JSL.jsl");
이것은 내 시스템을 정지시킵니다 ....로그가 열려 있고 다음 스크립트에서 막혔다는 것을 알 수 있습니다(로그는 show("Entering Change_Test_Instance name")과 같은 show 문을 보여줍니다.
wait()를 사용해 보았습니다. 각 포함(및 각 스크립트 내) 사이에 명령문이 있지만 여전히 작동하지 않습니다.내가 시도해야 할 다른 것이 있습니까?
자동화 및 스크립팅Re: 스크립팅 및 대용량 파일답변이 늦어 죄송합니다(바쁜 일로).
아이디어 주셔서 감사합니다.디버거를 사용한 적이 없습니다.
네임스페이스 아이디어도 살펴보겠습니다.또한 기본 DT가 열려 있는 경우(연결됨) include 문을 사용하여 스크립트를 실행하면 스크립트를 있는 그대로 실행할 때(include 없음)만큼 빠르게 실행된다는 사실도 발견했습니다.따라서 기본 데이터 테이블이 잠시 동안 메모리에 있는 것과 연결한 다음 즉시 포함 스크립트를 실행하는 것에 대한 것입니다.
Re: 스크립팅 및 대용량 파일JSL 디버거/프로파일러를 사용하여 코드를 실행하거나 수행 중인 것처럼 보다 세분화된 time_start..time_end로 계측할 수 있습니다. 내 생각 엔 포함과 함께 어떤 이유로 코드에 N^2 동작 (데이터를 두 배로 늘리는 데 4X 시간)이 있습니다. 데이터 테이블의 이름과 충돌하는 일부 이름의 네임스페이스 문제일 수 있습니다.
나쁠 수 있는 한 곳은
dt_summary << select where( Contains( Test_names, :Test_Instance ) );
하지만 타이밍 없이는 알기 어렵습니다. Test_names에 1e6 항목이 있고 dt_summary에 1e6 행이 있는 경우 평균 500,000개의 test_names가 각 1e6 행에서 검사됩니다. 아니면 10개 정도만 있고 문제가 되지 않을 수도 있습니다. 대략 다음과 같이 다시 작성하고 싶을 수 있습니다.
// untested. combine two loops and use an aa rather than a list for lookup
Test_names = AssociativeArray();
For Each Row(
If( ( Contains( dt_summary:Test_Instance, "CHAR_char" )),
Test_names[ dt_summary:Test_Instance ] = 1
)
);
dt_summary << select where( Test_names<<CONTAINS></CONTAINS>
목록에 수백 개의 항목이 있는 경우 연관 배열이 훨씬 빠릅니다.
JSL 프로파일러를 사용하려면 첫 번째 프로파일링 경험을 위해 3시간을 실행하지 마십시오. 포함을 사용하여 작은 프로그램을 시도하고 다음 버튼으로 재생하는지 확인하십시오.
Something in the toolboxSomething in the toolbox도구 상자에 있는 것
A new window opens, the clock is for timing JSL.A new window opens, the clock is for timing JSL.새 창이 열리고 시계는 JSL 타이밍용입니다.
The tooltip for the icon says "run profiler".The tooltip for the icon says "run profiler".아이콘의 툴팁에 "프로파일러 실행"이라고 표시됩니다.
파란색 일시 중지 버튼을 사용하거나 종료될 때까지 기다린 다음 핫스팟을 검사할 수 있습니다.
tabs for sourcestabs for sources소스 탭
tabs for sourcestabs for sources 소스 탭
Re: 스크립팅 및 대용량 파일같은 로그를 붙여넣은듯....
여기는 혼자 달릴 때...200초 또는 약 3.33분
N Rows(dt) = 41929065;
"In Reduce_Test_Instance";
As Date(Today()) = 15Feb2022:10:11:57;
"Reducing Test Instances Ended";
As Date(Today()) = 15Feb2022:10:15:17;
start_time - As Date(Today()) = -200;
Re: 스크립팅 및 대용량 파일스크립트가 멈추었는지 확인하기 위해 스크립트를 실행했습니다(실행 중인 것처럼 보이지만 스크립트 내에서 실행할 때는 몇 분이 아니라 몇 시간이 걸립니다).
로그에는 show 문만 있습니다.
다음은 스크립트 내에서 스크립트를 실행하기 위한 로그 출력입니다.("하나의 테스트 인스턴스로 변경"하는 데 3.65시간이 소요됩니다. 동일한 파일에서 동일한 스크립트를 직접 실행하는 경우 3.65분이 소요됩니다.)CPU는 3.65시간 동안 약 20%의 12개 코어(CPU0 ~ CPU11)를 실행했습니다.
다음은 아래 JSL의 로그 및 스니펫입니다.
N Items(files_open) = 12;
"Files are Concatenated ";
As Date(Today()) = 14Feb2022:13:00:32;
start_time - As Date(Today()) = -492;
"Saving Digital_shmoo_all";
As Date(Today()) = 14Feb2022:13:00:54;
"Done Saving Digital_shmoo_all";
As Date(Today()) = 14Feb2022:13:01:24;
"Changing to one test instance";
N Rows(dt) = 41929065;
"In Reduce_Test_Instance";
As Date(Today()) = 14Feb2022:13:01:39;
"Reducing Test Instances Ended";
As Date(Today()) = 14Feb2022:16:41:13;
start_time - As Date(Today()) = -13174;
"Transposing";
"File has been transposed";
As Date(Today()) = 14Feb2022:16:42:23;
start_time - As Date(Today()) = -69;
동일한 대용량 파일을 사용하여 축소 테스트 인스턴스 스크립트를 단독으로 실행하면 다음은 로그입니다.
As Date(Today()) = 14Feb2022:13:01:24;
"Changing to one test instance";
N Rows(dt) = 41929065;
"In Reduce_Test_Instance";
As Date(Today()) = 14Feb2022:13:01:39;
"Reducing Test Instances Ended";
As Date(Today()) = 14Feb2022:16:41:13;
start_time - As Date(Today()) = -13174;
"Transposing";
"File has been transposed";
As Date(Today()) = 14Feb2022:16:42:23;
start_time - As Date(Today()) = -69;
이 스크립트의 기본은 "Char_Char" 로 시작하는 이름을 찾아 "Char_Char" 가 없도록 변경하는 것입니다. 요약 테이블을 만들고 "Char_Char"가 있는 요약 테이블의 행을 선택하고 선택한 기본 테이블의 행을 가져온 다음 기본 테이블의 이름을 변경하여 이를 수행합니다.다음은 느린 스크립트의 일부입니다.
One_Test_Instance.JSL
dt = Current Data Table();
Names Default To Here( 1 );
Show( N Rows( dt ), "In Reduce_Test_Instance" );
Show( As Date( Today() ) );
start_time = As Date( Today() );
dt << clear select;
dt << clear column selection;
Wait();
Test_names = {};
dt << Summary(
Group( :Test_Instance ),
Freq( "None" ),
Weight( "None" ),
output table name( "Summary_of_Table" )
);
dt_summary = Current Data Table();
Wait();
For Each Row( Insert Into( Test_names, dt_summary:Test_Instance ) );
Wait();
For( i = N Items( Test_names ), i > 0, i--,
If( (!Contains( Test_names[i], "CHAR_char" )),
Remove From( Test_names, i )
)
);
dt_summary << select where( Contains( Test_names, :Test_Instance ) );
Wait();
aa = dt << get selected rows; //Get selected rows in main table
Wait();
Close( dt_summary, nosave );
If( N Rows( aa ) > 0,
(dt:Test_instance[aa]) = "CHAR_char_meas_TI";
(dt:Setup[aa]) = "meas_TI"; //Change name in main table
);
dt << clear select;
dt << clear column selection;
Wait();Re: 스크립팅 및 대용량 파일보고서 창을 100개 또는 1000개 열거나 닫고 있습니까? 창문을 전혀 열지 않는 것이 도움이 될 수 있습니다. (아마도 OS가 무언가를 정리할 기회를 얻지 못할 수도 있습니다.)
JMP 16 로그에 1000줄을 인쇄하고 있습니까? 도움이 될 수 있는 이전 로그 형식을 사용하는 pref가 있습니다.
작업 관리자가 통찰력을 제공할 수 있습니다. 명백한 메모리 및 디스크 범인뿐만 아니라 핸들 및 GDI 개체를 살펴보십시오.
또는 컴퓨터 전면에 있는 디스크 표시등이 있는 경우 이를 확인하십시오. 페이징을 해야 할 것 같지 않습니다. 좋은 컴퓨터입니다!
답변을 받았을 때 무슨 일이 있었는지 알고 싶습니다. 위의 내용이 도움이 되지 않는다면 기술 지원도 도움이 될 수 있습니다.