진행률 표시 줄을 표시하면 완료 시간이 느려집니다.

Aug 20 2020

팀의 작업을 자동화하는 내부 스크립트를 많이 작성합니다. 스크립트가 "중단"되었는지 궁금해하지 않도록 장기 실행 작업에 대한 간단한 진행률 표시 줄을 표시합니다. 실행하기 전에 완료해야하는 금액을 알고 있으므로 완료된 금액을 측정 할 수 있기 때문입니다. 수행되는 작업 수를 절약하기 위해 매초 n또는 작업이 시작 / 완료 될 때만 진행률 표시 줄을 업데이트합니다 .

내가 찾은 것은 다음 사이에 상충 관계가 있다는 것입니다.

  • 사용자 경험 (작업이 실행 중인지 확인)
  • 전체 스크립트 완료 시간

진행률 표시 줄을 생성하고 계속 인식하는 단계를 추가하면 작업이 2 배 더 오래 걸릴 수 있습니다.

일반적으로 이것은 예상되는 트레이드 오프입니까 (아마 다른 언어가 아니라 Python에서)?

답변

1 MikeMark Aug 20 2020 at 02:55

아주 좋은 질문입니다.

일반적으로 우리는 항상 사용자 경험을 우선시합니다.

예 : 항공편 검색 엔진은 즉시 결과를 제공 할 수 있지만 사용자가 철저한 검색을 수행 한 것에 대해 더 안전하다고 느끼기 때문에 로딩 시간이 더 길어집니다.

2 배 더 느려질 때. 2x는 아마 몇 초이면 괜찮을 것이고 몇 년 동안이면 끔찍할 것입니다. 그것은 모두 사용자의 상황에 달려 있습니다. 사이트의 작업 종류가 생사 문제라면 더 빠를수록 좋습니다. 사용자가 소요되는 시간에 여유가 있고 언제 다시 확인해야하는지 아는 것이 더 중요하고 예상 시간을 알려주는 것이 더 중요합니다. 최선의 선택입니다.

언제 더 빠르게

  • 로딩 시간은 채택, 사용, 신뢰성, 신뢰 등에 부정적인 영향을 미치는 것으로 입증되었습니다.
  • 속도는 삶과 죽음의 문제입니다
  • 속도는 돈을 버는 문제입니다 (예 : 전화중인 고객은 긴급한 답변이 필요함).

다음과 같은 경우 로딩 바 표시

  • 시간에 2를 곱한다고해서 사용자를 완전히 멈출 수있는 시간이 생성되지는 않습니다.
  • 사용자는 다른 작업을 수행하는 동안 기다릴 여유가 있습니다.

고려해야 할 추가 사항 일부 프로세스에는로드 바가 있고 일부는 그렇지 않은 하이브리드 솔루션이 필요할 수 있습니다.

대체 옵션이 필요할 수 있습니다. 예를 들어 로딩 표시 줄을 표시하고이를 숨기면 작업 속도를 높일 수 있다고 사용자에게 알리고 작업이 준비되었을 때 이메일 알림을받을 것인지 사용자에게 묻습니다.

어쨌든 가장 좋은 아이디어는 사용자가 자신의 상황과 필요에 따라 무엇을 선호하는지 확인하는 것입니다.

행운을 빕니다. 매우 흥미로운 도전입니다. 마지막에 선택한 결정을 다시 게시하십시오. :)

1 Ángel Sep 19 2020 at 09:12

간단하게, 작업을 수행하고 진행률 표시 줄을 표시하는 프로그램 (따라서 두 작업)은 하나의 작업 만 수행하는 것보다 더 많은 CPU를 사용합니다.

그러나 이것이 반드시 벽시계 시간이 느려 져야한다는 것을 의미하지는 않습니다. 사실, 2 배 감속 imho는 과잉으로 보입니다.

몇 가지 전략은 다음과 같습니다.

  • 진행률 표시 줄이 표시되지 않음 (실제로는 자세한 옵션을 추가해야하는 대부분의 Unix 명령의 기본값 임)
  • 진행률 표시 줄을 비활성화하는 조용한 옵션을 제공합니다. 이것은 실제로 UI에 대해 제공되어야하지만 (예를 들어 사용자가 cron에서 실행하거나 출력을 파일로 리디렉션한다고 가정) 진행률 표시 줄 속도 저하를 우회하는 부작용이 있습니다.
  • 다른 스레드를 통해 진행 상황을 표시합니다. 아마도 파이썬으로 수행하기에는 복잡 할 수 있지만 다른 언어에서는 정상입니다. 진행 상황을 보여주는 GUI 스레드와 실제 작업을 수행하는 작업자가 있습니다.
  • 진행률 표시 줄 업데이트 간격 / 단계 크기를 줄입니다.
    • 진행률 표시 줄을 매 바이트마다 다시 그리는 대신 파일을 바이트 단위로 복사하는 경우 (분명히 비효율적입니다), 매 MB 복사 후에 만 ​​업데이트 할 수 있습니다.
    • 또는 X 초마다 상태를 업데이트하는 타이머를 설정하는 등 소요 된 시간 (다시 말하면 기본 작업에 대해 비동기 적으로 또는 다른 스레드에서).
  • 진행률 표시 줄을 가능한 한 저렴하게 만듭니다. 이는 본격적인 진행률 표시 줄이 아닌 점만 출력하는 것에서 진행률 표시 줄을 "그려진"상태로 전환 할 수 있으며 각 단계에서 다시 계산하는 것을 피할 수 있습니다 (하지만 SIGWINCH에서 전체 처리를 수행해야 함).

일반적으로 이것은 예상되는 절충안입니까?

일반적으로 피할 수 있는지 여부에 달려 있다고 생각합니다. 인터넷에서 하나의 큰 파일을 다운로드하는 경우 다운로드가 다른 리소스를 사용하므로 거의 항상 적절한 진행률 표시 줄에 맞출 수 있습니다. 원격의 느린 파일 시스템 (예 : 스마트 폰)에서 파일을 복사하려는 경우 복사해야하는 모든 디렉토리 트리를 탐색하여 진행률 표시 줄이 7 표시 될 수 있도록하려면 리소스 (연결 대역폭)가 필요할 수 있습니다. 전화로) 파일이 발견되고 "표시된대로"복사 된 경우 건너 뛸 수 있습니다.