개요

파이썬에서 대량의 HTTP요청을 보내고 싶을 경우에 사용하는 grequests 라이브러리의 사용법을 정리해둔다.

설치

sudo pip3 install grequests

설치 트러블 슈팅

src/greenlet/greenlet.cpp:16:20: fatal error: Python.h: No such file or directory 에러 발생시

src/greenlet/greenlet.cpp:16:20: fatal error: Python.h: No such file or directory

여기를 보고 해결했다.

python3-devel이라는 패키지가 설치되어 있지 않아서 생기는 문제였다.

내 경우엔 python3-devel이 아니라 python36-devel이었다. 파이썬3에도 여러 세부 버전이 있어서 세부버전정보까지 지정해야 설치가 됐다.

sudo yum install python36-devel 

파이썬 의존 라이브러리 greenlet 설치시에 gcc에러 발생시

greenlet은 멀티프로세싱에 필요한 코루틴을 처리하기 위한 라이브러리라고 한다.
grequest를 설치하면 greenlet도 같이 설치가 되는데 설치도중 다음과 같은 에러가 발생했다.

/usr/include/c++/4.8.5/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.

메세지를 분석해보면 gcc를 사용해서 빌드하려고 하는데 std 버전을 11이상인 것으로 지정해야 한다는 것 같다. 인터넷을 검색해보니 gcc 버전이 낮은 것이 원인인 것 같다. 내 경우엔 설치되어 있는 gcc 버전이 4.8.5였다. yum list 로 확인해보니 gcc64버전도 설치가능한 것을 알 수 있었다. gcc64를 설치한 후에 다시 grequests 설치를 시도하자 이상없이 설치가 완료되었다.

sudo yum list | grep gcc
sudo yum install gcc64*
gcc -v

사용법

  • 사용법은 다음과 같이 간단하다.
  • urls에 확인하고자 하는 url목록을 입력하고 실행한다.
  • 결과가 urls의 입력 순서와 동일한 순서대로 출력된다는 점이 포인트다(뒤죽박죽이 되지 않는다).
import grequests

urls = [
    'http://www.heroku.com',
    'http://tablib.org',
    'http://httpbin.org',
    'http://python-requests.org',
    'http://kennethreitz.com'
]

rs = (grequests.get(u) for u in urls)

res_list = grequests.map(rs)
# urls의 순서와 동일한 순서대로 출력된다.
# res.url: url에 접근한 결과 리다이렉트되는 경우, 리다이렉트된 곳의 url이 출력된다. 
for res in res_list:
    # 응답을 얻지 못한 경우에는 None 타입이 된다. 
    if res:
        print(f"{res.url} => {res.status_code}")

참고링크

  • https://pypi.org/project/grequests/