12

concurrent.futures에 시간 초과를 지정하는 두 가지 방법이 있습니다. concurrent.futures에 대한 개별 시간 초과

  • wait()
  • 두 가지 방법

  • as_completed()
    • 는 N 실행 미래를 처리합니다.

      각 미래에 대해 개별 시간 초과를 지정하고 싶습니다.

      사용 케이스 : DB에서 데이터를 가져 오는

      • 미래 0.5 초 시간 제한이있다.
      • HTTP 서버에서 데이터를 가져 오는 미래 시간 제한이 1.2 초입니다.

      concurrent.futures으로 어떻게 처리합니까? 아니면이 라이브러리가 올바른 도구가 아닌가? mdurant에 의해 솔루션 AFAIK

      • 결론은 좋은 해결 방법이다.

      • 다음번에는 다른 라이브러리를 사용하게 될 것 같습니다. 아마 asyncio가 이것을 더 잘 지원할 수 있습니다. 참조 :

    답변

    5

    https://docs.python.org/3/library/asyncio-task.html#asyncio.sleep 어떻게 자신의 구현에 대한 :

    wait(dbfutures + httpfutures, timeout=0.5) 
    [fut.cancel() for fut in bdfutures if not fut.done()] 
    wait(httpfutures, timeout=0.7) 
    [fut.cancel() for fut in httpfutures if not fut.done()] 
    

    (또는 수면 while 루프/확인하거나 짧은 시간 초과로 대기)

    +0

    예, 나는이 유일한 해결책이라고 생각합니다. 좋지는 않지만 근사해. 다음 번에 async io를 사용할 것입니다 : https://docs.python.org/3/library/asyncio-task.html#asyncio.sleep – guettli