>source

Google Cloud Run에서 Python Flask 앱의 일관성 없는 성능을 이해하려고 합니다. 앱은 이미지 파일을 입력으로 사용하고 cv2를 사용하여 일부 사전 처리를 수행한 다음 Tesseract를 사용하여 OCR을 수행합니다. Python 스레딩을 사용하여 이미지와 OCR 처리를 병렬 처리하지만 전체 처리에는 10~20초가 소요될 수 있습니다.

@app.route('/process_image/<path:image_path>')
def process_image(image_path):
    processing_results= process_input_image(image_path)
    return processing_results
def process_input_image(image_path)
    # process_input_image uses Python Threads to parallelize image processing
    for work in list_of_image_processing_work:
        th= Thread(target=do_image_work, args=(work, results))
        th.start()
    # wait for all threads to complete
    return results

처리에 시간이 조금 더 걸릴 것임을 나타내는 보다 즉각적인 응답을 반환하고 싶었습니다. 그래서 이미지 처리 호출에서 스레드를 시작하기 위해 다음 변경을 시도했습니다. Net에서는 이미지 처리를 수행하기 위해 일련의 스레드를 자체적으로 시작하는 루틴에 대한 호출에서 스레드를 시작하고 있습니다.

@app.route('/process_image/<path:image_path>')
def process_image(image_path):
    th= Thread(target=process_input_image, args=(image_path, results))
    th.start()
    return 'This\'ll just be a moment or so.'

하지만 이 두 번째 스레딩 레이어를 추가하자마자 Google Cloud Run에서 처리가 중단되는 것 같았습니다. 로그를 보면 루틴이 보입니다.프로세스_입력_이미지시작하지만 진행은 조금씩 진행되는 것처럼 보이며 거의 우선 순위가 낮고 궁극적으로 완료되지 않습니다. 이것이 스레드 우선 순위인지 궁금합니다.

  • 답변 # 1

    HTTP 요청이 메시지를 반환하면 CPU는 유휴 상태입니다. 이것은 HTTP 요청 이후에 실행되는 스레드가 CPU가 부족하여 종료될 수 있음을 의미합니다.

    백그라운드 스레드를 실행하려면 항상 켜짐 CPU를 선택합니다.

  • 이전 Android 코루틴에서 흐름 소스 데이터를 업데이트하려면 어떻게 해야 합니까?
  • 다음 javascript : null 속성을 읽을 수 없음('id' 읽기) [Discord Slash Commands]