Sys.setswitchinterval в Python 3.2 и выше

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

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

Ответ 1

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

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 дает плохая производительность). Может быть (возможно,) изменение интервала переключения контекста может дать вам больше скорости.

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