2011-09-11 3 views
11

Python 3.2는 sys.setswitchinterval을 노출하는 Antoine Pitrou의 new GIL implementation을 소개했습니다.sys.setswitchinterval in Python 3.2 이상

언제 이것을 변경하면 유용할까요? 그 이유는 무엇입니까? 또 다른 사용 사례 당신이 convoy effect (또는 가장자리에 직면 해 코드 특별히 조정됩니다

sw_interval = sys.getswitchinterval() 
try: 
    # Setting the switch interval to a very big number to make sure that their will be no 
    # thread context switching while running the operations that came after. 
    sys.setswitchinterval(sys.maxint) 
    # Expressions run here will be atomic .... 
finally: 
    sys.setswitchinterval(sw_interval) 

:

+0

수취인 없음! 50 번 담당자가 한 번 ... –

답변

4

한 사용은 예를 들어, 확인하는 작업 (들)을 만드는 원자 적으로 실행하는 것입니다 새 GIL이 나쁜 성능을 제공하는 경우). 컨텍스트 스위치 간격을 변경하면 속도가 더 빨라질 수 있습니다.

면책 조항 : 위를 차지 첫 번째 방법은 어두운 마법을 고려하고 그것은 완전히합니다 (threading.Lock -likes이 그 사용 사례 바람직하다)하지 않는 것이 좋습니다. 일반적으로 나는 스레드 컨텍스트 스위치 간격을 변경하는 것이 정상적인 상황에서해야 할 일이라고 생각하지 않습니다. 팀 피터스 (Tim Peters)가 메타 클래스에 관해 이미 말한 내용을 다시 말하면 : changing thread context switch interval is deeper magic than 99% of people are going to need.

+0

응용 프로그램이 IO 바운드이면 _increase_ 또는 _decrease_ 하시겠습니까? –

+2

@Matt : 사실 IO 바인딩 된 스레드 만 갖는 것은 문제가되지 않습니다. 스레드가 IO 바인딩 된 명령을 실행할 때마다 GIL을 릴리스하기 때문에 문제가 발생하지 않지만이 문제에서 설명한 것처럼 IO 스레드와 CPU 스레드를 사용할 때 문제가 발생할 수 있습니다. 문제 (http://bugs.python.org/issue7946)이 경우 (다시) 스위치 간격을 줄이면 IO 경계 스레드가 차단하지 않으면 훨씬 오래 기다릴 필요가 없으므로 성능이 향상 될 수 있습니다 조금도. – mouad

+0

+1이 방법에서 '어두운'마법 참조 –