F-Lab
로그인
🚀
상위권 IT 회사로 취업/이직하고 싶으신가요?

Gevent로 Python 어플리케이션 성능 개선하기

writer_thumbnail

F-Lab : 상위 1% 개발자들의 멘토링

📌 글 작성

F-Lab 백엔드 멘토 Jacob
팀 문화와 엔지니어 생산성에 관심이 많은 실리콘밸리 백엔드 개발자
 
  • 인터프리터 언어이기 때문에 런타임에 bytecode를 생성합니다. 컴파일러 언어에 비해서 런타임에 동일한 행위를 하기 위해서 처리해야 하는 일이 더 많습니다.
  • 가비지 콜렉터의 존재로 인해 CPU 사이클을 소모하게 됩니다. 또 가비지 콜렉터는 언제 실행될지 알기 어렵습니다.
  • 동적 타이핑으로 인해서 Python 인터프리터가 namespace lookup을 하는데 더 많은 노력이 들어갑니다.

 

import gevent
import socket
def arbitrary_socket_call():
_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
_socket.connect(('www.google.com', 80))
sock.send(b"GET / HTTP/1.1\r\nHost:www.google.com\r\n\r\n")
response = sock.recv(4096)
print(response)
def run_many_socket_calls():
for _ in 1000:
arbitrary_socket_call()
# gevent.socket 을 사용함으로써 동일한 결과를 내는 코드가 더 빠르게 실행된다
# gevent.socket 은 blocking I/O가 발생하면 그것을 기다리는 동안 다른 작업을 처리할 수 있게 해준다.
from gevent import socket
def arbitrary_socket_call():
_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
_socket.connect(('www.google.com', 80))
sock.send(b"GET / HTTP/1.1\r\nHost:www.google.com\r\n\r\n")
response = sock.recv(4096)
print(response)
def run_many_socket_calls():
jobs = [gevent.spawn(arbitrary_socket_call) _ for 1000]
gevent.joinall(jobs)
 
import gevent
from gevent import monkey
monkey.patch_all() # 이 함수 호출 이후로 import 되는 모듈에서 gevent가 지원하는 I/O 관련 함수는 모두 gevent 모듈의 비동기 함수를 사용하게 된다
import requests
TARGET_URL_LIST = [
'www.google.com',
'www.youtube.com',
'www.facebook.com',
'www.twitter.com',
'www.instagram.com',
'www.wikipedia.com',
'www.yahoo.com',
'www.live.com',
'www.reddit.com',
'www.netflix.com',
'www.linkedin.com',
'www.office.com',
'www.bing.com',
'www.quora.com',
'www.ebay.com',
]
def send_request(url: str):
content = requests.get(url).content
print(content)
def run_concurrent():
jobs = [gevent.spawn(send_request, url) for url in TARGET_URL_LIST]
gevent.joinall(jobs)
 
ⓒ F-Lab & Company

이 컨텐츠는 F-Lab의 고유 자산으로 상업적인 목적의 복사 및 배포를 금합니다.

조회수

F-Lab 멘토링 코스

  • 코스 이미지
    Java Backend

    아키텍처 설계와 대용량 트래픽 처리 능력을 깊이 있게 기르는 백앤드 개발자 성장 과정

  • 코스 이미지
    Frontend

    언어와 프레임워크, 브라우저에 대한 탄탄한 이해도를 갖추는 프론트엔드 개발자 성장 과정

  • 코스 이미지
    Android

    아키텍처 설계 능력과 성능에 대한 경험을 바탕으로 딥다이브하는 안드로이드 개발자 성장 과정

  • 코스 이미지
    Python

    대규모 서비스를 지탱할 수 있는 대체 불가능한 백엔드, 데이터 엔지니어, ML엔지니어의 길을 탐구하는 성장 과정

  • 코스 이미지
    iOS

    언어와 프레임워크, 모바일 환경에 대한 탄탄한 이해도를 갖추는 iOS 개발자 성장 과정

  • 코스 이미지
    Node.js Backend

    아키텍처 설계와 대용량 트래픽 처리 능력을 깊이 있게 기르는 백앤드 개발자 성장 과정

F-Lab
소개채용멘토 지원
facebook
linkedIn
youtube
instagram
logo
(주)에프랩앤컴퍼니 | 사업자등록번호 : 534-85-01979 | 대표자명 : 박중수 | 전화번호 : 0507-1315-4710 | 제휴 문의 : info@f-lab.kr | 주소 : 서울특별시 강남구 테헤란로 113, 705호 | copyright © F-Lab & Company 2020