2016-09-07 10 views
2

파이썬 기반의 웹 서비스와 함께 여러 코어를 사용하는 아마존 t2.medium 인스턴스에서 초당. 하지만 서버를 확인하기 위해 top을 사용하면 CPU의 100 % 만 사용합니다. 아마존 t2.medium 인스턴스에는 2 cpu가 있어야한다고 생각합니다. 따라서 가능한 모든 CPU를 사용하고 더 많은 요청을 처리하도록 웹 서비스 코드를 변경하는 방법이 있는지 궁금합니다.어떻게 70 요청을 처리 할 수 ​​있습니다, 내가 스트레스가 내 서비스를 테스트하고이 단계에서 클라인 프레임 워크</p> <p><a href="https://klein.readthedocs.io/en/latest/index.html" rel="nofollow">https://klein.readthedocs.io/en/latest/index.html</a></p> <p>를 기반으로 웹 서비스를 쓰고 있어요 클라인

파이썬 문서를 읽었으며 multiprocessing 모듈을 찾았지만 올바른 솔루션이 될지 확신하지 못합니다. 지금 내 웹 서비스의 주요 기능은

APP = Klein() 
if __name__ == "__main__": 
    APP.run("0.0.0.0", SERVER_PORT) 

는 들어오는 요청을 처리하기 위해 여러 개의 CPU를 사용할 수있는이 서비스를 만들 수있는 정직하고 수정 있나요입니까? 질문을 읽어 주셔서 감사합니다.

답변

1

확실하게 multiprocessing을 사용할 수 있으며 프로세스가 스핀 업하기 쉽습니다.

from multiprocessing import Process 
from klein import Klein 

def runserver(interface, port, logFile): 
    app = Klein() 
    @app.route('/') 
    def heyEarth(request): 
     return 'Hey Earth!' 
    app.run(interface, port, logFile) 

process_list = [] 
for x, port in enumerate([8000, 8001, 8002, 8003]): 
    logfilename = open('localhost' + str(port) + '.log', 'a') 
    process_list.append(Process(target=runserver, args=('localhost', port, logfilename))) 
    process_list[x].daemon = True 
    process_list[x].start() 

process_list.pop().join() 

엔터프라이즈 환경에서는 nginx와 같은 전용로드 밸런서를 사용하는 것이 더 우수하고 신뢰할 수 있습니다. 위의 스 니펫은 웹 서버를 시작하는 데에만 사용해야하며 모든로드 균형 조정은 전용로드 균형 조정기에서 처리해야합니다.

최소한으로 디버깅 및 공유 시스템 파일과 같은 기본적인 작업을 수행하면 성가심을 느끼게됩니다. 그리고 그것은 "정상적인"물건입니다. 당신이 무슨 일이 일어나고 있는지 모르기 때문에 아무도 당신을 도울 수 없을 것입니다. 이 스 니펫을 실행하면서 신호가있는 이상한 것들과 Twisted를 발견했습니다. runserver()에 모두 klein 개의 가져 오기를 실행하면 문제가 해결 될 수 있다고 생각합니다.

다른 사람들의 실수로부터 배우고, 화상을 입은 사람들의 경고에 multiprocessing님께 알리고 킥 엉덩이 앱을 만드십시오! 희망이 도움이 : D

참조

- 그것은 토네이도 문서,하지만 여전히
  • Multicore TwistedWeb을 도움이 될 것입니다 - 이것은 핵심 개발자가 multiprocesses에 "트위스트"접근 방식입니다. Twisted 및 스폰 프로세스를 실행하려는 사용자를위한 읽기 가치가 있습니다.
  • +0

    이러한 추가 프로세스를 모두 사용하여 동일한 포트를 대상으로 요청을 처리 할 수 ​​있습니까? 아니면 항상 여러 포트를 사용해야합니까? – JLTChiu

    +0

    동일한 컴퓨터에 있다면 다른 포트가되어야합니다 (최소한 구현에 대해서는) –

    +0

    답변 감사합니다. 나는 이것을 나중에 체크 아웃 할 수도있다. – JLTChiu