mem
Март 24, 2010 18:11:35
Доброго времени суток.
Проблема состоит в следующим. Мне необходимо написать некоторое приложение, которое бы позволяла проводить некоторую обработку данных и вычисления. Это приложение будет будет использоваться как средство для 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 только читал)
з.з.ы Задача поставленная передо мной больше учебная, но я не хотел бы писать в стол, а собираюсь в будущем развить приложение, поэтому не хотелось бы ошибаться на самом начале пути. Никто не мешает реализовать всё в один поток, но это будет ужасно. Хотелось бы использовать питон, ибо имхо это довольно вкусный язык, но гложат сомнения.
lizzard
Март 24, 2010 18:48:45
Кстати, для справки, в том же Jython, IronPython нет GIL, что позволяет использовать многопоточность нормально.
http://www.parallelpython.com/ - ради любопытства советую глянуть, очень простая либа, позволяющая распараллелить вычисления, использовал как-то раз, моё мнение что для “учебного” проекта сойдёт, для “серъёзного” необходимо допиливать или искать другое решение. Правда последняя стабильная версия датируется 23 февраля 2009, что не очень хорошо, имхо :).
o7412369815963
Март 24, 2010 19:02:19
я бы заюзал multiprocessing либо threading, в качестве web-морды - bottle т.к. он очень простой.
а если бы мощности не хватило то разработал бы кластер, т.к. мне это интересно :)
ZZZ
Март 26, 2010 18:24:40
mem
2) Использовать Disco (разработка nokia python + erlang ) - жутко интересно попробовать, но насколько будет эффект в производительности не знаю.
Я как раз занялся эрлангом. Думаю, что это будет самым красивым решением.
mem
4) Использовать python + qt-шные треды. - такое вообще себе слабо представляю.
Пробовал – ничего хорошего не вышло.
mem
Март 26, 2010 23:36:04
Спасибо про Jython и IronPython знаю. Как-то не очень у меня лежит душа к дотнету и java. По поводу библиотек хотелось бы использовать решения, которые бы можно было применять и в более серьёзных проектах. Сейчас присматриваюсь к предложенным. Пока что вариант c multiprocessing рассматриваю как запасной вариант. Сомнения по поводу qt - тредов и python видимо были не зря) Наверное тогда даже не буду пробовать, ибо времени не так много. Disco продолжает казаться заманчивым, но речь о самом использовании erlanga не идёт. Как я понимаю Disco просто позволяет построить параллельное выполнение задач по map/reduce, создавая по процессу на ядро с python окружением и гарантируя некоторую отказоустойчивость. При этом код задач пишется на python. До Disco думал часть алгоритма перевести на erlang, но как я понял даже небольшие вычисления в erlange оч медленные и смысла особого не будет. Немного смущает разворачивание Disco, надо бы ещё немного поглубже покопать=)
ZZZ
Я как раз занялся эрлангом. Думаю, что это будет самым красивым решением.
Вот и я почему-то так думаю, осталось оценить затраты))) Кстати по эрлангу не давно проводился небольшой занятный мастер-класс, материалы с которого доступны в сети.
тут про него и ссылки на видео =)
regall
Март 27, 2010 11:41:28
ZZZ
Я как раз занялся эрлангом. Думаю, что это будет самым красивым решением.
+100.
Erlang в плане распараллеливания очень классный и надежный.