rebrovsv
Ноя. 28, 2011 12:26:25
Здравствуйте
Сразу извиняюсь, если повторяюсь либо задаю глупый вопрос
Сам не программист питона, но использую в работе приложение на нем написанное
Приложение считает много и долго, как я выяснил, питон использует только 1 ядро для вычислений ((
Как-то не дружат у него потоки
подскажите пожалуйста, как можно это вылечить и лечиться ли в принципе?
Накопал, что есть альтернативные версии вез без GIL, типа python-safethread
но ставить ее боюсь, т.к. компьютер рабочий, и выводить его из строя как то не хочется даже на время…
Подскажите пжлст, подхватит ли интерпретатор от python-safethread прогу написанную на классическом питоне?
И дает ли это производительности на самом деле?
Если он мне с 3х незадействованных сейчас ядер наберет еще хотя бы 100% производительности, было бы круто!
Спасибо
cutwater
Ноя. 28, 2011 12:46:26
Лечится в CPython использованием модуля multiprocessing
И более подробным изучением механизма GIL в Python
bw
Ноя. 28, 2011 13:28:35
1. IronPython, Jython, и вроде у PyPy что-то есть по этому поводу.
2. Раскидывать задачи по процессам, а не по потокам.
3. Вынести задачу за пределы интерпретатора (Си в отдельных потоках).
4. Кажется можно несколько интерпретаторов в одном процессе запустить (в разных потоках, например), но этот вопрос мне не интересен и я его не изучал.
..bw
rebrovsv
Ноя. 28, 2011 13:30:20
“И более подробным изучением механизма GIL в Python”
мне как пользователю нужно изучать работу GIL что бы програмка нормально работала? =) как-то не хочется…
“Лечится в CPython использованием модуля multiprocessing”
мне достаточно будет поставить интерпретатор CPython что бы он подхватил програмку? или в коде использование этой библиотеки multiprocessing должно быть явно указано и код под нее заточен должен быть?
rebrovsv
Ноя. 28, 2011 13:31:51
bw
1. IronPython, Jython, и вроде у PyPy что-то есть по этому поводу.
2. Раскидывать задачи по процессам, а не по потокам.
3. Вынести задачу за пределы интерпретатора (Си в отдельных потоках).
4. Кажется можно несколько интерпретаторов в одном процессе запустить (в разных потоках, например), но этот вопрос мне не интересен и я его не изучал.
..bw
ох блин, это мне теперь еще и питон курить ко всему (((((((
не было печали =(((
спасибо
cutwater
Ноя. 28, 2011 13:39:12
rebrovsv
мне как пользователю нужно изучать работу GIL что бы програмка нормально работала? smile как-то не хочется…
Если как пользователю, то простой ответ “никак”.
bw
Ноя. 28, 2011 15:07:29
> еще и питон курить ко всему
Что значит “питон курить”? Знаешь один императивный язык – знаешь их все. Ты же не либу для общего пользования пишешь, тонкости тебе знать не нужны. Берёшь справочник и читаешь про multiprocessing из батареек.
> и код под нее заточен должен быть?
Да, должен.
..bw
rebrovsv
Ноя. 28, 2011 16:17:28
“Если как пользователю, то простой ответ ”никак“ ”
спасибо, понял…. печально… значит вопрос откладывается до появления свободного времени или пока не поможет знакомый питоно-вод =))
“Что значит ”питон курить“? ”
“курить мануалы” == “разбираться до покраснения глаз, изучая инструкции ” извините, сленг ….
“Берёшь справочник и читаешь про multiprocessing из батареек.”
да уж и без этого хватает, что почитать, была бы возможность читать, не спрашивал бы на форуме =)
всем большое спасибо!
doza_and
Ноя. 28, 2011 17:32:43
Если как пользователю, то простой ответ “никак” - Даже еще хуже. Тут все советы как треды эффективно повключать - а вообще код параллелится? Вы посмотрите там используются модули threading subprocess multiprocessing если нет - то труба. Далеко не всякий код можно распараллелить. Если авторы кода не предусмотрели, то вам не просто курить питон, а переделывать алгоритмы - а это совсем другая песня.
Rodegast
Ноя. 28, 2011 19:38:16
В Jython и IronPython вроде отсутствует GIL по этому можно попробовать их использовать вместо CPython-а.