В мире API кажется, что многие приложения Python тратят больше времени на декодирование JSON, чем что-либо еще.
Однако кажется, что все декодеры JSON блокируют GIL во время декодирования, а это означает, что невозможно ускорить декодирование JSON с помощью многопоточности или вообще любых других средств. Множественная обработка может работать в некоторых случаях использования, когда декодированный json не нужно напрямую агрегировать (например, каждый процесс может декодировать и суммировать или иным образом обрабатывать, прежде чем возвращать гораздо меньший результат).
Мне было любопытно, есть ли какая-либо техническая причина, по которой нельзя было бы написать потокобезопасный декодер JSON, который либо декодирует JSON на нескольких ядрах внутри, либо каким-то образом освобождает GIL, позволяя выполнять несколько вызовов.
Если декодер в основном просто создает новые объекты, на которые не может ссылаться ничто за пределами декодированного дерева объектов (пока), нужен ли GIL? К каким другим частям интерпретатора необходимо получить доступ таким образом, чтобы потребовался GIL? Это что-то вроде общих пулов строк? Являются ли все эти проблемы непреодолимыми для этого конкретного варианта использования?