Форум сайта python.su
Здравствуйте
Сразу извиняюсь, если повторяюсь либо задаю глупый вопрос
Сам не программист питона, но использую в работе приложение на нем написанное
Приложение считает много и долго, как я выяснил, питон использует только 1 ядро для вычислений ((
Как-то не дружат у него потоки
подскажите пожалуйста, как можно это вылечить и лечиться ли в принципе?
Накопал, что есть альтернативные версии вез без GIL, типа python-safethread
но ставить ее боюсь, т.к. компьютер рабочий, и выводить его из строя как то не хочется даже на время…
Подскажите пжлст, подхватит ли интерпретатор от python-safethread прогу написанную на классическом питоне?
И дает ли это производительности на самом деле?
Если он мне с 3х незадействованных сейчас ядер наберет еще хотя бы 100% производительности, было бы круто!
Спасибо
Офлайн
Лечится в CPython использованием модуля multiprocessing
И более подробным изучением механизма GIL в Python
Офлайн
1. IronPython, Jython, и вроде у PyPy что-то есть по этому поводу.
2. Раскидывать задачи по процессам, а не по потокам.
3. Вынести задачу за пределы интерпретатора (Си в отдельных потоках).
4. Кажется можно несколько интерпретаторов в одном процессе запустить (в разных потоках, например), но этот вопрос мне не интересен и я его не изучал.
..bw
Офлайн
“И более подробным изучением механизма GIL в Python”
мне как пользователю нужно изучать работу GIL что бы програмка нормально работала? =) как-то не хочется…
“Лечится в CPython использованием модуля multiprocessing”
мне достаточно будет поставить интерпретатор CPython что бы он подхватил програмку? или в коде использование этой библиотеки multiprocessing должно быть явно указано и код под нее заточен должен быть?
Офлайн
bwох блин, это мне теперь еще и питон курить ко всему (((((((
1. IronPython, Jython, и вроде у PyPy что-то есть по этому поводу.
2. Раскидывать задачи по процессам, а не по потокам.
3. Вынести задачу за пределы интерпретатора (Си в отдельных потоках).
4. Кажется можно несколько интерпретаторов в одном процессе запустить (в разных потоках, например), но этот вопрос мне не интересен и я его не изучал.
..bw
Офлайн
rebrovsvЕсли как пользователю, то простой ответ “никак”.
мне как пользователю нужно изучать работу GIL что бы програмка нормально работала? smile как-то не хочется…
Офлайн
> еще и питон курить ко всему
Что значит “питон курить”? Знаешь один императивный язык – знаешь их все. Ты же не либу для общего пользования пишешь, тонкости тебе знать не нужны. Берёшь справочник и читаешь про multiprocessing из батареек.
> и код под нее заточен должен быть?
Да, должен.
..bw
Офлайн
“Если как пользователю, то простой ответ ”никак“ ”
спасибо, понял…. печально… значит вопрос откладывается до появления свободного времени или пока не поможет знакомый питоно-вод =))
“Что значит ”питон курить“? ”
“курить мануалы” == “разбираться до покраснения глаз, изучая инструкции ” извините, сленг ….
“Берёшь справочник и читаешь про multiprocessing из батареек.”
да уж и без этого хватает, что почитать, была бы возможность читать, не спрашивал бы на форуме =)
всем большое спасибо!
Офлайн
Если как пользователю, то простой ответ “никак” - Даже еще хуже. Тут все советы как треды эффективно повключать - а вообще код параллелится? Вы посмотрите там используются модули threading subprocess multiprocessing если нет - то труба. Далеко не всякий код можно распараллелить. Если авторы кода не предусмотрели, то вам не просто курить питон, а переделывать алгоритмы - а это совсем другая песня.
Офлайн
В Jython и IronPython вроде отсутствует GIL по этому можно попробовать их использовать вместо CPython-а.
Офлайн