Уведомления

Группа в Telegram: @pythonsu

#1 Март 24, 2010 18:11:35

mem
От:
Зарегистрирован: 2009-10-25
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

python, параллелизм, вычисления

Доброго времени суток.
Проблема состоит в следующим. Мне необходимо написать некоторое приложение, которое бы позволяла проводить некоторую обработку данных и вычисления. Это приложение будет будет использоваться как средство для data mining и будет реализовывать некоторые методы по поиску знаний в данных. В общем случае процесс работы с приложением будет состоять из 2 этапов:

Этап 1) обработка большого объёма многоразмерных данных. ( много i/o )
Этап 2) вычисление некоторых метрик данных и их комбинирование. ( много вычислений и мало i/o)

Каковы объёмы данных? Сейчас это небольшие объёмы в количестве 5000 записей и 100-400 атрибутов. Но в будущем они вырастут, и пока я даже не знаю насколько. Проблема вычислений состоит в том, что даже такая небольшая выборка многоразмерных данных порождает огромное количество комбинаций которые и вычисляет алгоритм. Тоесть вычислений будет много, они будут однообразыми (тот же подход от гугл map-reduce мне кажеться мог бы подойти) и их было бы неплохо параллелить. О чём собственно я и хочу спросить. Передо мной видется несколько путей:

1) Использовать модуль multiprocessing, ибо i/o будет только на первом этапе обработки и его будет не так много, как вычислений.
2) Использовать Disco (разработка nokia python + erlang ) - жутко интересно попробовать, но насколько будет эффект в производительности не знаю.
3) Плюнуть на python и использовать с++ (threads использовать qt-шные) - писать придётся дольше и нуднее=(
4) Использовать python + qt-шные треды. - такое вообще себе слабо представляю.

Понимаю что задачу обрисовал очень ообобщённо… дело в том, что сам пока не знаю будет ли это полностью десктопное приложение, или например тонкий клиент + сервер. Времени на реализацию у меня немного к сожалению. Одно могу сказать точно, что в качестве графики буду юзать qt.

з.ы. А ещё интереснее было бы построить как web приложение на Django + Disco, но это уже из разряда фантастики (django знаю совсем слабо, о disco только читал)
з.з.ы Задача поставленная передо мной больше учебная, но я не хотел бы писать в стол, а собираюсь в будущем развить приложение, поэтому не хотелось бы ошибаться на самом начале пути. Никто не мешает реализовать всё в один поток, но это будет ужасно. Хотелось бы использовать питон, ибо имхо это довольно вкусный язык, но гложат сомнения.



Офлайн

#2 Март 24, 2010 18:48:45

lizzard
От:
Зарегистрирован: 2009-03-05
Сообщения: 48
Репутация: +  0  -
Профиль   Отправить e-mail  

python, параллелизм, вычисления

Кстати, для справки, в том же Jython, IronPython нет GIL, что позволяет использовать многопоточность нормально.

http://www.parallelpython.com/ - ради любопытства советую глянуть, очень простая либа, позволяющая распараллелить вычисления, использовал как-то раз, моё мнение что для “учебного” проекта сойдёт, для “серъёзного” необходимо допиливать или искать другое решение. Правда последняя стабильная версия датируется 23 февраля 2009, что не очень хорошо, имхо :).



Офлайн

#3 Март 24, 2010 19:02:19

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

python, параллелизм, вычисления

я бы заюзал multiprocessing либо threading, в качестве web-морды - bottle т.к. он очень простой.
а если бы мощности не хватило то разработал бы кластер, т.к. мне это интересно :)

Офлайн

#4 Март 24, 2010 19:31:04

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

python, параллелизм, вычисления

Офлайн

#5 Март 26, 2010 18:24:40

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

python, параллелизм, вычисления

mem
2) Использовать Disco (разработка nokia python + erlang ) - жутко интересно попробовать, но насколько будет эффект в производительности не знаю.
Я как раз занялся эрлангом. Думаю, что это будет самым красивым решением.

mem
4) Использовать python + qt-шные треды. - такое вообще себе слабо представляю.
Пробовал – ничего хорошего не вышло.



Офлайн

#6 Март 26, 2010 23:36:04

mem
От:
Зарегистрирован: 2009-10-25
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

python, параллелизм, вычисления

Спасибо про Jython и IronPython знаю. Как-то не очень у меня лежит душа к дотнету и java. По поводу библиотек хотелось бы использовать решения, которые бы можно было применять и в более серьёзных проектах. Сейчас присматриваюсь к предложенным. Пока что вариант c multiprocessing рассматриваю как запасной вариант. Сомнения по поводу qt - тредов и python видимо были не зря) Наверное тогда даже не буду пробовать, ибо времени не так много. Disco продолжает казаться заманчивым, но речь о самом использовании erlanga не идёт. Как я понимаю Disco просто позволяет построить параллельное выполнение задач по map/reduce, создавая по процессу на ядро с python окружением и гарантируя некоторую отказоустойчивость. При этом код задач пишется на python. До Disco думал часть алгоритма перевести на erlang, но как я понял даже небольшие вычисления в erlange оч медленные и смысла особого не будет. Немного смущает разворачивание Disco, надо бы ещё немного поглубже покопать=)

ZZZ
Я как раз занялся эрлангом. Думаю, что это будет самым красивым решением.
Вот и я почему-то так думаю, осталось оценить затраты))) Кстати по эрлангу не давно проводился небольшой занятный мастер-класс, материалы с которого доступны в сети. тут про него и ссылки на видео =)



Офлайн

#7 Март 27, 2010 11:41:28

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

python, параллелизм, вычисления

ZZZ
Я как раз занялся эрлангом. Думаю, что это будет самым красивым решением.
+100.
Erlang в плане распараллеливания очень классный и надежный.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version