[python-asyncio] libuv, pyuv, aiouv

windows python asyncio 에서 기본 내장된 ProactorEventLoop 보다 빠른 event loop 는 없을까 고민하다가 nodejs 기반으로 유명하다는 libuv가 생각났다. python에는 libuv를 기반으로하는 pyuv가 있다. pyuv를 asyncio 에서 사용하려면 aiouv가 필요하다. 이것을 설치해보기로 했다.

업데이트 참고. 요약하자면 소득은 없는데(run_in_executor 로 실행하는 쪽이 ProactorEventLoop보다 눈에 띄게 느리더라. 우리쪽 문제일수도 있다.) windows 에서 설치는 불편했다.

업데이트 2 참고. pip aiouv 설치는 pyuv 가 없다고 하면서 안된다. 뭐 여기까진 괜찮다. pyuv 설치하자.
pip 로 pyuv 설치도 안된다. cp949 UnicodeError와 libuv 설치를 하려고 했는데 링킹이 안되니 어쩌고…아몰랑.  수동 설치 고고!

python 2.7, windows sdk 7.1 설치가 되었다고 가정하고 진행함. (python2.7은 libuv 빌드에 필요함. libuv 설치 스크립트에 c:\python27 이 하드코딩되어 있으니 python 3를 기본으로 사용하면 웬만하면 python2.7은 c:\python27 에 설치할 것)

pyuv 빌드 & 설치
1. github 에서 pyuv 소스 받기 https://github.com/saghul/pyuv/archive/v1.x.zip (pip install -d . pyuv 해서 받은 소스는 빌드 시 링킹에러가 발생한다. 같은 버전으로 알고 있는데 왜…)
2. cmd 열기
3. call “C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd” /release /x64
4. python setup.py build_ext –inplace –libuv-clean-compile
5. 원하는 venv 환경을 activate 하고 소스 폴더로 돌아온다.
6. python setup.py install 하면 venv 환경에 설치됨
7. 끝

aiouv 는 pyuv만 있으면 쉽다.
1. pip install https://github.com/saghul/aiouv/archive/master.zip (pip install aiouv 는 패키지가 없다면서 설치가 안됨 pypi 에서 검색이 되는데 패키지 명이 잘못됐나… 일단 이슈는 써봤는데… https://github.com/saghul/aiouv/issues/15)
2. 끝

업데이트 : 1000~ 2000 개의 redis set 하는 테스크로 시간 측정을 해봤을 때 aiouv.EventLoop가 윈도우즈에서 사용할 수 있는 ProactorEventLoop보다 40~60% 정도 빠르다. 테스트 중이다.

업데이트 2 : 언젠가부터 인지는 모르겠지만 windows python 3.4.3 x64 에서 간단히 설치된다. pip install pyuv 하면 된다

[python] libuv x64 release빌드하는 법

현재(2015-07-27) pip 에 등록된 pyuv 1.1.0을 빌드하기 위해선 libuv를 수동으로 빌드해야 하더라. pyuv 를 github에서 받아서 빌드하면 따로 libuv 를 빌드할 필요가 없다. 같은 버전인데 무슨차이인지 모르겠음 -_-;

libuv 빌드를 하려면 python2.x 가 필요하다. (visual studio sln vcxproj 파일을 python2.x 로 만든다)

1. libuv zip 다운로드 https://github.com/libuv/libuv/archive/v1.x.zip
2. 압축 풀고
3. cmd (command line 으로 git 실행할 수 있어야 하는 상태) 로 해당 폴더 이동 후 vcbuild.bat x64 release 실행
4. 배치파일이 실행되면서 vc project 를 만들어주는 gyp 프로젝트를 다운로드 받는다.
5. 실패 (python2.x 에서 설치하는 사람은 성공할 것임)

print 'Error running GYP'

6. 아.. 내 default python 이 3.4 다. cmd 에서 set PYTHON=PYTHON_2.X경로를 지정한다 ex) set PYTHON=c:\python27\python.exe
7. 다시 ‘vcbuild.bat x64 release’ 실행
8. uv.sln 이 생성됨
9. 이제 libuv 를 빌드하자 (Windows SDK 7.1 이 설치된 것을 가정한다. vs2010을 가정해서 뭔가 하는게 많은거 같다. 속 편하려면 vs2010 설치하자)
10. msbuild /p:PlatformToolset=Windows7.1SDK;Configuration=Release;Platform=x64 uv.sln
13. 끝