Axion
10
2019-10-21 15:43:58 작성 2019-10-21 15:46:18 수정됨
1
97

파이썬 비동기, 멀티프로세싱... GIL때문에 선택장애왔습니다 도와주세요


지금 작업하는 프로젝트 특정 구간이 웹소켓을 이용해 네트워크 I/O가 많은 작업을 처리하는데

대략적으로 이런 순서의 작업입니다.


1. 다수 서버에 웹소켓 연결, 옵저버 실행

-> 옵저버가 마지막 업데이트된 데이터인지 계속 모니터링함

-> 업데이트되면 스트림형태로 데이터 받고 계산함수호출(함수 내에서 병렬계산)

   1.1. 계산중 업데이트되면 옵저버가 함수실행 중단

   1.2. 문제없이 계산함수 끝나면 연결된 서버개수만큼 http request를 동시에 보냄


대략 이런작업입니다.


기존에는 별생각없이 멀티스레드랑 콜백으로 처리했는데

GIL이랑 threadsafe 고려할것도 너무많고 스파게티 되는경우가 많아 걍 버리려고합니다..


퍼포먼스가 중요해서 pypy, 리눅스로 작업중인데.. 위같은 환경에서 뭐가 좋은 선택일까요


1. asyncio + coroutine

2. 멀티 프로세싱

3. greenlet

4. concurrent future + 프로세스 풀

5. 파이썬을 버린다

0
0