2012-08-17 3 views
0

파이썬을 사용하여 클리어 퀘스트 서버에서 데이터를 추출하는 도구를 구현했습니다. 내가 스레딩을 사용하여 구현 한 clearquest에서 많은 검색을해야합니다. 각 스레드마다 개별적인 clearquest 세션을 열려고합니다. 이것을 실행하려고하면 런타임 오류가 발생하며 clearquest 세션이 제대로 열리지 않습니다.python 전역 해석기 잠금을 극복하는 방법

저는 인터넷에서 약간의 연구를했는데 파이썬의 Global Interpretor Lock 때문이었습니다. 나는이 GIL을 극복하는 방법을 알고 싶다 ... 어떤 아이디어라도 많이 감사 할 것이다.

+5

실제 오류 메시지가 무엇입니까? 일반적으로 GIL은 오류를주지 않고 CPU 바인딩 된 프로그램을 스레드 화하여 좋은 성능을 얻는 것을 막을 것입니다. – geoffspear

+0

clearquest 서버가 예외를 throw하고 스레드가있을 때 세션을 열지 못하게합니다. 단, 스레드가 정상적으로 세션을 열려고 시도 할 때 동일한 코드가 작동합니다. – karpanai

+0

clearquest가 동시 연결을 허용하지 않으면 스레드 또는 프로세스 사용 여부에 관계없이 동일한 문제가 발생합니다. –

답변

3

스레드를 사용하는 대신 다른 프로세스를 사용하고 IPC를 사용하여 각 프로세스간에 통신한다.

+3

Python 2.6+의''multiprocessing'' 패키지가 좋은 후보가 될 것입니다 : http://docs.python.org/library/multiprocessing.html –

2

나는 GIL 때문에 RuntimeErrors가 없을 것이라고 생각합니다. 추적 기록을 붙여 넣을 수 있습니까? 재진입하지 않는 코드의 중요한 부분을 가지고 있다면, 일부 동시성 프리미티브를 사용하여 코드를 격리해야합니다.

GIL의 주요 문제점은 강제로 계산을 직렬화한다는 것입니다. 결과적으로 처리량 및 배율이 감소합니다.