Найти - Пользователи
Полная версия: Сбор результатов выполнения потоков в одном месте
Начало » Python для новичков » Сбор результатов выполнения потоков в одном месте
1 2 3
py.user.next
PDA
Функция Put до запуска потоков уже заполнила очередь файлами, зачем её в отдельный поток выводить?
Если там файлов много, то во время их поиска уже должна происходить обработка первого найденного.

PDA
Задача следующая:
есть папка- размер около 3 Гигабайт, в папке лежат файлы со статистикой, файлы могут быть от 300 Кб до 3 Мб.
А файлов много.
PDA
py.user.next
PDA
Функция Put до запуска потоков уже заполнила очередь файлами, зачем её в отдельный поток выводить?

Если там файлов много, то во время их поиска уже должна происходить обработка первого найденного.

PDA
Задача следующая:
есть папка- размер около 3 Гигабайт, в папке лежат файлы со статистикой, файлы могут быть от 300 Кб до 3 Мб.

А файлов много.
Файлов много конкретно за вчера 2305

Я наверное не правильно поставил задачу. Скорость обработки файлов при моей реализации на нужном уровне, не спорю наверняка можно ещё быстрей, но у меня уже такой задачи не стоит. Проблема в том что каждый поток выводит свой результат. то есть по факту у меня получается 10 значений, а нужно одно. Фактически это сумма этих 10 значений. Но попытка присвоить результат вывода потока переменной не увенчалась успехом.
py.user.next
PDA
Файлов много конкретно за вчера 2305
Как только он путь добавил в очередь, тот сразу должен быть взят и передан на обработку (изъят из очереди). Иначе память будет занята этими путями.
Он ещё последний путь не найдёт, а уже обработает ряд файлов и их результаты прибавит к общему результату.

PDA
Проблема в том что каждый поток выводит свой результат.
Потому что ты его выводишь на экран, когда его надо добавлять во вторую очередь. Там две очереди должно быть: одна - с путями, другая - с результатами обработчиков.

PDA
Но попытка присвоить результат вывода потока переменной не увенчалась успехом.
То, что ты запостил вначале, - это вообще не паралелльная программа. В параллельной программе всё должно одновременно выполняться, и там нет никаких “это произошло первее, а это произошло вторее”.
PDA
py.user.next
То, что ты запостил вначале, - это вообще не паралелльная программа. В параллельной программе всё должно одновременно выполняться, и там нет никаких “это произошло первее, а это произошло вторее”.


Напиши пожалуйста, что конретно надо исправить или добавить в моей реализации. Судя по твоим словам вопрос пары строчек.
py.user.next
PDA
что конретно надо исправить или добавить в моей реализации
Ну, вот алгоритм описан.
То есть твой вариант нужно просто удалить и написать заново, ещё и под присмотром.

PDA
    os.chdir(goal_dir)
    print(os.getcwd())
    dir_list = os.listdir(os.getcwd())
Это же просто быдлокод какой-то. Если надо просмотреть текущий каталог, просто запускается os.listdir() без аргументов.
>>> import os
>>> 
>>> os.listdir()
['algo', 'ev_ex1.py', 'examples', 'web', 'sys', 'xmlcmp', 't.py', '.directory']
>>>
Да и переходы по каталогам через os.chdir() мало где практикуются. Надо составлять путь через os.path.join().
doza_and
Уважаемый, а можно кусочек файла получить. И поясните пожалуйста что вы делаете. Складывается впечатление что вы пересчитываете поля. Возможно я могу написать такой агрегатор на numpy который не потребует плясок с распараллеливанием. Поясню. для таких алгоритмов обычно получается что их скорость ограничена скоростью считывания данных с жесткого диска (если у вас не SSD) и в этом случае параллель не параллель а физически скорость ограничена шиной. У вас это похоже не так. Можно попробовать поправить.

p.s.
Конечно chdir и параллельное выполнение ну никак не совместимы как вам и указывают.
PDA
doza_and
Уважаемый, а можно кусочек файла получить. И поясните пожалуйста что вы делаете. Складывается впечатление что вы пересчитываете поля. Возможно я могу написать такой агрегатор на numpy который не потребует плясок с распараллеливанием. Поясню. для таких алгоритмов обычно получается что их скорость ограничена скоростью считывания данных с жесткого диска (если у вас не SSD) и в этом случае параллель не параллель а физически скорость ограничена шиной. У вас это похоже не так. Можно попробовать поправить.p.s.Конечно chdir и параллельное выполнение ну никак не совместимы как вам и указывают.

Спасибо за помощь, но вопрос решился крайне просто. В функции main, где я вызываю потоки нужно было добавить метод join(). После добавления метода программа дожидалась окончания работы каждого потока, а результат складывала. То что мне и нужно было.
doza_and
PDA
но вопрос решился крайне просто.
Поздравляю. Если вас устраивает, то все ок. Но я так понимаю что вы остановились на времени порядка 3-5 минут, а скорее всего можно добиться 1-2 минуты и используя только одно ядро. :)
PDA
doza_and
Поздравляю. Если вас устраивает, то все ок. Но я так понимаю что вы остановились на времени порядка 3-5 минут, а скорее всего можно добиться 1-2 минуты и используя только одно ядро.
Именно- в среднем 4 минуты выходит. Два вопроса:
1) numpy это нестандартная библиотека? Я не нашёл описание на python.org
2) есть ли эта библеотека для питона 2,6
FishHook
PDA
Если не с кем побеседовать, то всегда есть отличный собеседник
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