2014-07-21 3 views
0

꽤 큰 다중 스레드 python2 웹 응용 프로그램이 있습니다. 메인 스레드에서 비즈니스 로직을 작동, 하위 스레드 대부분 데이터베이스 작업을 실행합니다. TreadPoolExecutor는 현재 사용되지 않으며 가까운 장래에 구현 될 수 없습니다. 특정 양의 데이터를 빠르게 처리하고 결과를 DataBase에 저장해야하는 다른 스레드를 추가하려고합니다 (io 연산). 이 작업은 자주 실행되지 않습니다.Python : 작업 처리를 위해 스레드 사용

그래서 질문은 : 대부분 잠자는 스레드를 실행하고 데이터를 처리하기 위해 이벤트를 기다려야합니까 아니면 충분한 데이터가있을 때 메인에서 새 스레드를 생성하고 처리가 완료 될 때 닫는 것이 더 좋을까요? GIL이 그들 사이를 전환하기 위해 실행중인 스레드의 양은 이미 상당히 많습니다.

감사합니다.

+0

확실한 스레드가 여기 있습니까? –

+0

글쎄, 사실 나는 하위 프로세스가 훨씬 더 잘할 것이라고 확신합니다 :) 스레드에서 DB 작업의 원인이 있지만 성능 이익이 있습니다. 이제는 스레드가 제거되지 않아 응용 프로그램이 매우 크고 오래되고 대부분 디자인이 좋지 않습니다. 또한 나는 궁금해하고있다. ;) – sunrize531

답변

1

이 프로세스를 실행하면 말하자면 하루에 한 번씩 스레드를 만들고 파기하는 오버 헤드가 거의 없습니다.

신호를 대기중인 스레드 (예 : 대기열에있는 메시지)에는 CPU가 필요하지 않으므로 CPU를 필요로하지 않습니다.

즉, 오류 전달, 안정성, 코드 복잡성과 같은 다른 디자인 요소를 볼 수 있습니다.

오류 처리가 빠져 있다면 쓰레드가 살아있는 상태로 유지하는 것이 더 좋을 것입니다. 왜냐하면 그것은 대소 문자를 처리하기 때문입니다 : 우발적으로 동시에 두 개의 인스턴스를 실행 중입니다.

스레드가 멈추거나 교착 상태에 문제가있는 경우 기존 작업자 스레드를 종료하고 깨끗한 스레드를 시작하는 것이 좋습니다.

+0

나는 GIL이 다양한 쓰레드 (100 개의 바이트 코드가 처리 된 후 말이다)를 끊임없이 전환한다는 사실을 알고있다. 이로 인해 응용 프로그램에 이미 많은 양의 스레드가 있으므로 전체 성능이 저하 될 수 있습니다. – sunrize531

+0

@ sunrize531 : 참고 자료가 있으십니까? –

+0

또한 새 (분기 된) 프로세스에서 태스크를 실행하도록 고려 했습니까? –

관련 문제