Вопрос

Я написал красивый многопоточный сценарий, и когда я запустил его, он работал хуже с 25 потоками, чем с прямым вызовом обработчика потока.

Затем я обнаружил глобальную блокировку переводчика. Я хочу спросить, прежде чем я отказался от Python для этого сценария и переписываю вещь в чем -то другом, есть ли способ выполнить реальное рабочее многопоточное многопоточное чтение на Python?

Это было полезно?

Решение

Другой подход заключается в том, чтобы отказаться от потоков и вместо этого использовать Многопроцессорная Модуль (Python 2.6+), который оборачивает GIL, и имеет API, который, по крайней мере, похож на тот, который в модуле потока.

Другие советы

Теперь это интересный вопрос - я не думаю, что в прямом эфире сбегает из Гила.

Неверный питон Предполагается, что он улучшил производительность «параллелизма» по сравнению с CPYTHON с использованием его Микротчики, но я не думаю, что это ускользает от Гила.

Кроме того, согласно Гил Пейдж на python.org, У Jython и Ironpython нет Gil.

Правильный ответ в значительной степени зависит от того, что вы делаете.

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

Не весь код имеет те небольшие изолированные блоки вычислительного кода, которые можно аккуратно реализовано в собственной библиотеке, но многое делает.

В CPYTHON (внедрение Python в C), нет, на мой взгляд. (Если я ошибаюсь, пожалуйста, поправьте меня, я бы хотел знать, существует ли решение!).

Возможно, вы захотите заинтересовать Ironpython (.net) или jpython (java/jwm). Я не использовал их, но я считаю, что, по крайней мере, один из них поддерживает потоки, основанные на данной среде исполнения.

Вы можете попробовать многопроцессорная Модуль, если это применимо к вашей проблеме.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top