У меня не было проблем с производительностью с Python Global Interpreter Lock. Мне пришлось сделать несколько вещей поточно-ориентированными - несмотря на распространенные советы, GIL автоматически НЕ гарантирует потокобезопасность - но у меня есть программа, которая обычно запускает более 10 потоков, где все они могут быть активны в любой момент. время, в том числе вместе. Это довольно сложная асинхронная система обмена сообщениями.
Я понимаю многопроцессорность и даже использую сельдерей в этой программе, но решение должно быть очень запутанным, чтобы работать через многопроцессорность для этого набора проблем.
Я использую 2.7 и использую рекурсивные блокировки, несмотря на их снижение производительности.
У меня такой вопрос: столкнусь ли я с проблемами масштабирования с GIL? Пока я не видел проблем с производительностью. Измерять это ... проблематично. Есть ли несколько потоков или что-то подобное, что вы ударяете, и оно просто начинает задыхаться? Существенно ли отличается производительность GIL от выполнения многопоточного кода на одноядерном процессоре?
Спасибо!
x += 1
работать безопасно в двух разных потоках, потому что байтовый код для этого включает в себя загрузкуx
, добавление одного и сохранение обратно вx
, а интерпретатор может поменять местами GIL на любом промежуточном этапе. GIL предназначен не для логической безопасности, а для целостности интерпретатора; для отдыха используйте замки. - person ShadowRanger   schedule 26.08.2016