2017-12-13 1 views
0

기본 작업자 유형 (동기화)을 사용하는 경우 응용 프로그램이 어떤 이유로 든 차단되면 데이터베이스 쿼리 결과를 기다리는 동안 aaociated 작업자 프로세스가 더 이상 처리 할 수 ​​없다는 점을 이해합니다. 이 시간 동안 요청?비동기 근로자를 Gunicorn과 함께 사용하면 내 응용 프로그램이 스레드로부터 안전합니까?

내 앱 코드에서 너무 많은 특수 코딩을 필요로하지 않는 모델을 찾고 있습니다. 이 문제를 해결할 수있는 두 가지 비동기 작업자 유형 gevent 및 gthread가 있음을 알고 있습니다. 이 두 가지의 차이점은 무엇이며 내 앱은이를 사용하기 위해 스레드로부터 안전해야합니까?

업데이트 - 난 그것을 원숭이가 std 라이브러리 기능을 패치에 의해 작동하는 것 같다 geent에 대한 약간의 독서를 했어 그래서 나는 일반적으로 데이터베이스 쿼리의 경우에는 아마 어떤 DB 라이브러리를 패치하지 않았을 것이라고 생각했을 것이다 if 나는 데이터베이스를 기다릴 때 공동으로 제어권을 양보하기 위해 앱을 프로그래밍해야 할 필요가있다. 이 올바른지?

답변

0

스레드를 사용하는 경우 제대로 작동하도록 애플리케이션을 작성해야합니다. 항상 잠금을 사용하여 공유 자원에 대한 액세스를 조정합니다.

이벤트 (예 : gevent)를 사용하는 경우 애플리케이션이 효과적으로 단일 스레드이므로 공유 리소스에 액세스하는 것에 대해 일반적으로 걱정할 필요가 없습니다.

두 번째 질문에 대답하십시오 : 순수 파이썬 라이브러리를 사용하여 데이터베이스에 액세스하는 경우 gevent의 원숭이 패치가 라이브러리를 비 블로킹으로 성공적으로 렌더링해야합니다. 그러나 파이썬으로 싸여진 C 라이브러리를 사용한다면 원숭이 패치는 아무 쓸모가 없으며 데이터베이스에 액세스 할 때 애플리케이션이 차단 될 것입니다.

관련 문제