sys.setswitchinterval в Python 3.2 и выше - PullRequest
12 голосов
/ 11 сентября 2011

Python 3.2 представил новую реализацию GIL Антуана Питроу, которая предоставляет функцию sys.setswitchinterval.

Когда это изменение будет полезно и почему?

1 Ответ

5 голосов
/ 11 сентября 2011

Одно из применений - убедиться, что операции выполняются атомарно, например:

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)

Другим вариантом использования будет настройка вашего кода, особенно когда вы сталкиваетесь с эффектом конвоя (или любым граничным случаем, когда новый GIL дает плохую производительность). Возможно (просто возможно) изменение интервала переключения контекста может дать вам большую скорость.

Отказ от ответственности: Первый упомянутый выше метод - это dark magic , и он совершенно не рекомендуется (в этом случае предпочтительны threading.Lock -лики). В общем, я не думаю, что изменение интервала переключения контекста потока является чем-то, что нужно делать в обычных условиях. Я перефразирую то, что Тим Питерс уже сказал о метаклассах: changing thread context switch interval is deeper magic than 99% of people are going to need.

...