Форум сайта python.su
857
PDAЕсли там файлов много, то во время их поиска уже должна происходить обработка первого найденного.
Функция Put до запуска потоков уже заполнила очередь файлами, зачем её в отдельный поток выводить?
PDAА файлов много.
Задача следующая:
есть папка- размер около 3 Гигабайт, в папке лежат файлы со статистикой, файлы могут быть от 300 Кб до 3 Мб.
Офлайн
0
py.user.nextФайлов много конкретно за вчера 2305
PDA
Функция Put до запуска потоков уже заполнила очередь файлами, зачем её в отдельный поток выводить?
Если там файлов много, то во время их поиска уже должна происходить обработка первого найденного.
PDA
Задача следующая:
есть папка- размер около 3 Гигабайт, в папке лежат файлы со статистикой, файлы могут быть от 300 Кб до 3 Мб.
А файлов много.
Офлайн
857
PDAКак только он путь добавил в очередь, тот сразу должен быть взят и передан на обработку (изъят из очереди). Иначе память будет занята этими путями.
Файлов много конкретно за вчера 2305
PDAПотому что ты его выводишь на экран, когда его надо добавлять во вторую очередь. Там две очереди должно быть: одна - с путями, другая - с результатами обработчиков.
Проблема в том что каждый поток выводит свой результат.
PDAТо, что ты запостил вначале, - это вообще не паралелльная программа. В параллельной программе всё должно одновременно выполняться, и там нет никаких “это произошло первее, а это произошло вторее”.
Но попытка присвоить результат вывода потока переменной не увенчалась успехом.
Отредактировано py.user.next (Дек. 7, 2015 13:11:06)
Офлайн
0
py.user.next
То, что ты запостил вначале, - это вообще не паралелльная программа. В параллельной программе всё должно одновременно выполняться, и там нет никаких “это произошло первее, а это произошло вторее”.
Офлайн
857
PDAНу, вот алгоритм описан.
что конретно надо исправить или добавить в моей реализации
PDAЭто же просто быдлокод какой-то. Если надо просмотреть текущий каталог, просто запускается os.listdir() без аргументов.os.chdir(goal_dir) print(os.getcwd()) dir_list = os.listdir(os.getcwd())
>>> import os >>> >>> os.listdir() ['algo', 'ev_ex1.py', 'examples', 'web', 'sys', 'xmlcmp', 't.py', '.directory'] >>>
Отредактировано py.user.next (Дек. 7, 2015 13:48:50)
Офлайн
253
Уважаемый, а можно кусочек файла получить. И поясните пожалуйста что вы делаете. Складывается впечатление что вы пересчитываете поля. Возможно я могу написать такой агрегатор на numpy который не потребует плясок с распараллеливанием. Поясню. для таких алгоритмов обычно получается что их скорость ограничена скоростью считывания данных с жесткого диска (если у вас не SSD) и в этом случае параллель не параллель а физически скорость ограничена шиной. У вас это похоже не так. Можно попробовать поправить.
p.s.
Конечно chdir и параллельное выполнение ну никак не совместимы как вам и указывают.
Отредактировано doza_and (Дек. 7, 2015 21:15:13)
Офлайн
0
doza_and
Уважаемый, а можно кусочек файла получить. И поясните пожалуйста что вы делаете. Складывается впечатление что вы пересчитываете поля. Возможно я могу написать такой агрегатор на numpy который не потребует плясок с распараллеливанием. Поясню. для таких алгоритмов обычно получается что их скорость ограничена скоростью считывания данных с жесткого диска (если у вас не SSD) и в этом случае параллель не параллель а физически скорость ограничена шиной. У вас это похоже не так. Можно попробовать поправить.p.s.Конечно chdir и параллельное выполнение ну никак не совместимы как вам и указывают.
Офлайн
253
PDAПоздравляю. Если вас устраивает, то все ок. Но я так понимаю что вы остановились на времени порядка 3-5 минут, а скорее всего можно добиться 1-2 минуты и используя только одно ядро. :)
но вопрос решился крайне просто.
Отредактировано doza_and (Дек. 8, 2015 08:25:14)
Офлайн
0
doza_andИменно- в среднем 4 минуты выходит. Два вопроса:
Поздравляю. Если вас устраивает, то все ок. Но я так понимаю что вы остановились на времени порядка 3-5 минут, а скорее всего можно добиться 1-2 минуты и используя только одно ядро.
Офлайн
568
PDA
Если не с кем побеседовать, то всегда есть отличный собеседник
Офлайн