>  Q&A  >  본문

并发 - python的flask框架结合gevent性能反而大幅度下降?

项目使用flask框架,是个较复杂的推荐系统,需要从设定的各类数据源取(有些复杂的排序、过滤)推荐数据,大部分数据存取使用redis,经过常规优化后取数据控制在200ms以内。
为进一步大幅度提升性能采用gevent作为并发框架,但是发现性能反而下降了大概25%,原来一个数据源就30ms,改造后上升到一两百毫秒都有,这是为什么?这种情况大家会怎么进一步调优了。
(使用场景除了比较集中的取数据模块,其他地方还有零星用到gevent)

大家讲道理大家讲道理2714일 전1044

모든 응답(1)나는 대답할 것이다

  • 黄舟

    黄舟2017-04-18 09:36:54

    이 질문은 다소 복잡합니다. 주제는 환경 및 시작 매개변수, 실행 중인 프로세스 수 및 실행 방법을 소개하는 것이 좋습니다.

    이러한 조건이 없는 상황에서, 이 문제에 대해서는 제가 직접 이해한 바에 따라 이야기하고 싶습니다. gevent를 사용하여 성능을 향상시키려는 것이었지만, 이로 인해 성능이 저하되는 것으로 나타났습니다. 시간이 지나면 성능이 저하되는 부분을 조사할 필요가 있습니다.

    질문자의 성능 저하 측정 기준은 데이터를 얻는 데 시간이 더 오래 걸린다는 것입니다. 여기서는 우선 질문자는 gevent의 작동 방식을 모른다는 점에 대해 하나의 스레드가 여러 개 실행된다는 점을 지적합니다. 프로세스는 여러 IO 작업에 적합합니다. 약간 더 많은 CPU 작업이 혼합되면 시간을 파악하기 어려울 수 있습니다. 예를 들어, 여기에서 묻는 질문에는 코루틴 중 하나가 실행되는 경우 어떻게 될까요? 또는 200밀리초? CPU 작업이 수행된다면 다른 코루틴 IO가 아무리 빨라도 도움이 되지 않습니다.

    또한, gevent를 도입한다고 해서 데이터 획득 속도가 빨라지는 것은 아니라는 점을 강조할 필요가 있습니다. 예를 들어, 도입 후에는 30ms가 줄어들지 않고 더 많아질 뿐입니다. 도입하면 이득? 1초 안에 33개의 클라이언트 요청을 받을 수 있는 것으로 나타났습니다. 도입 후에는 100/s 또는 300/s를 받을 수도 있습니다. 이것이 gevent의 장점입니다.

    피험자가 처한 환경을 완전히 이해하지 못한 채 너무 많은 제안을 할 수 밖에 없습니다. 피험자가 이해하지 못하는 경우 이전 정보에 대한 추가 분석을 제공할 수 있습니다.

    회신하다
    0
  • 취소회신하다