![명령을 N번 '시간' 측정하는 방법(CTRL-C를 사용하여 중지할 수 있는 방법)](https://rvso.com/image/168808/%EB%AA%85%EB%A0%B9%EC%9D%84%20N%EB%B2%88%20'%EC%8B%9C%EA%B0%84'%20%EC%B8%A1%EC%A0%95%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95(CTRL-C%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%A4%91%EC%A7%80%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%8A%94%20%EB%B0%A9%EB%B2%95).png)
짧은 질문:
이 작업은 Mac에서 수행됩니다.
time for i in {1..10}; do python3 foo.py ; done
하지만 CTRL-C로는 이를 막을 수 없습니다. 어떻게 작동하게 만들까요? (또는 N번의 실행 시간을 측정하는 방법은 무엇입니까?)
세부:
Github에는 몇 가지 표준 프로그램 테스트가 있으며 이를 실행할 수 있습니다.
python3 foo.py
또는
time python3 foo.py
실행 시간은 0.27초로 보고됩니다. 테스트는 1000개의 테스트 사례와 테스트 프레임워크에 연결되어 있으므로 테스트를 변경하고 싶지 않기 때문에 시간을 100번 측정하고 싶습니다. 이 명령은 time
10번이나 100번의 시간을 측정할 방법이 없는 것 같습니다. (이것은 Unix에서는 다소 이상한 일입니다. 이렇게 오랜 세월이 걸렸고 이렇게 유용하고 간단한 것이 에 내장되어 있지 않습니다 time
.) 다음을 사용할 수 있습니다:
time for i in {1..10}; do python3 foo.py ; done
하지만 CTRL-C는 이를 중지할 수 없습니다. 하나의 Python 스크립트를 중지하고 나머지는 계속 실행합니다. 그래서 다행히 그렇지 않거나 100
그렇게 1000
입력이 되었습니다. 혹시 사용하는 방법 time
이나 더 좋은 방법이 있나요? (프로그램을 바꾸는 것 외에?)
답변1
Ctrl-C
루프에서 새로운 프로세스를 생성하기 때문에 불가능합니다 . Ctrl-C
각 반복이 실행되는 속도보다 100, 1000배 빠르게 눌러 모든 작업을 중단해야 합니다 .
대안으로 루프에 의해 생성된 최신 전경 프로세스를 중지하는 bash
키를 눌러 동일한 효과를 얻을 수 있습니다.Ctrl-Z
그만두다루프 자체.
답변2
쉘이 다음과 같다고 가정 zsh
하면 다음을 수행하십시오.
time (repeat 10 python3 foo.py)
python3 명령을 실행하는 하위 쉘을 실행하는 프로세스(및 자식을 기다린)의 시간은 10번입니다.
bash
또는 ksh93
(또는 )을 사용하면 zsh
다음을 수행할 수 있습니다.
time (for ((i=0;i<10;i++)) { python3 foo.py; })
POSIXly에서는 다음을 수행할 수 있습니다.
time -p sh -c '
i=0; while [ "$i" -lt 10 ]; do
python3 foo.py
i=$((i + 1))
done'
답변3
"Ctrl+C" 솔루션은 아니지만 "우아하게" 긴 루프 시퀀스를 중지하려는 경우에 사용할 수 있는 솔루션입니다. 당신이 해야 할 일은 ./stop-foo-py
파일을 만드는 것뿐입니다. 예를 들어 $ echo "" > ./stop-foo-py
(다른 터미널에서).
rm ./stop-foo-py
time for ((i=0;i<1000;i++));
do if [ ! -f "./stop-foo-py" ]; then
python foo.py ;
fi ;
done
또는 rm ./stop-foo-py; time for ((i=0;i<1000;i++)); do if [ ! -f "./stop-foo-py" ]; then python foo.py ; fi ; done
한 줄로.
절반 정도 추가됩니다.ms단일 루프마다.
$ time for ((i=0;i<1000;i++)); do if [ ! -f "./stop" ]; then : ; fi ; done
real 0m0.548s
user 0m0.157s
sys 0m0.359s