Найти - Пользователи
Полная версия: как задействовать больше 1 ядра
Начало » Python для новичков » как задействовать больше 1 ядра
1 2
rebrovsv
Здравствуйте
Сразу извиняюсь, если повторяюсь либо задаю глупый вопрос
Сам не программист питона, но использую в работе приложение на нем написанное
Приложение считает много и долго, как я выяснил, питон использует только 1 ядро для вычислений ((
Как-то не дружат у него потоки

подскажите пожалуйста, как можно это вылечить и лечиться ли в принципе?

Накопал, что есть альтернативные версии вез без GIL, типа python-safethread
но ставить ее боюсь, т.к. компьютер рабочий, и выводить его из строя как то не хочется даже на время…

Подскажите пжлст, подхватит ли интерпретатор от python-safethread прогу написанную на классическом питоне?
И дает ли это производительности на самом деле?
Если он мне с 3х незадействованных сейчас ядер наберет еще хотя бы 100% производительности, было бы круто!

Спасибо
cutwater
Лечится в CPython использованием модуля multiprocessing
И более подробным изучением механизма GIL в Python
bw
1. IronPython, Jython, и вроде у PyPy что-то есть по этому поводу.
2. Раскидывать задачи по процессам, а не по потокам.
3. Вынести задачу за пределы интерпретатора (Си в отдельных потоках).
4. Кажется можно несколько интерпретаторов в одном процессе запустить (в разных потоках, например), но этот вопрос мне не интересен и я его не изучал.

..bw
rebrovsv
“И более подробным изучением механизма GIL в Python”
мне как пользователю нужно изучать работу GIL что бы програмка нормально работала? =) как-то не хочется…

“Лечится в CPython использованием модуля multiprocessing”
мне достаточно будет поставить интерпретатор CPython что бы он подхватил програмку? или в коде использование этой библиотеки multiprocessing должно быть явно указано и код под нее заточен должен быть?
rebrovsv
bw
1. IronPython, Jython, и вроде у PyPy что-то есть по этому поводу.
2. Раскидывать задачи по процессам, а не по потокам.
3. Вынести задачу за пределы интерпретатора (Си в отдельных потоках).
4. Кажется можно несколько интерпретаторов в одном процессе запустить (в разных потоках, например), но этот вопрос мне не интересен и я его не изучал.

..bw
ох блин, это мне теперь еще и питон курить ко всему (((((((
не было печали =(((
спасибо
cutwater
rebrovsv
мне как пользователю нужно изучать работу GIL что бы програмка нормально работала? smile как-то не хочется…
Если как пользователю, то простой ответ “никак”.
bw
> еще и питон курить ко всему
Что значит “питон курить”? Знаешь один императивный язык – знаешь их все. Ты же не либу для общего пользования пишешь, тонкости тебе знать не нужны. Берёшь справочник и читаешь про multiprocessing из батареек.

> и код под нее заточен должен быть?
Да, должен.

..bw
rebrovsv
“Если как пользователю, то простой ответ ”никак“ ”
спасибо, понял…. печально… значит вопрос откладывается до появления свободного времени или пока не поможет знакомый питоно-вод =))

“Что значит ”питон курить“? ”
“курить мануалы” == “разбираться до покраснения глаз, изучая инструкции ” извините, сленг ….

“Берёшь справочник и читаешь про multiprocessing из батареек.”
да уж и без этого хватает, что почитать, была бы возможность читать, не спрашивал бы на форуме =)

всем большое спасибо!
doza_and
Если как пользователю, то простой ответ “никак” - Даже еще хуже. Тут все советы как треды эффективно повключать - а вообще код параллелится? Вы посмотрите там используются модули threading subprocess multiprocessing если нет - то труба. Далеко не всякий код можно распараллелить. Если авторы кода не предусмотрели, то вам не просто курить питон, а переделывать алгоритмы - а это совсем другая песня.
Rodegast
В Jython и IronPython вроде отсутствует GIL по этому можно попробовать их использовать вместо CPython-а.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB