![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| nIkTo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
Подскажите как использовать многопоточность для решения такой задачи :
Есть огромное количество директорий, которые необходимо обработать, лежат они в текстовом файле. Необходимо по мере выплнения потоков (~ 50 потоков) читать из файла пути каталогов и выполнять над каталогами операции. Использование fork с засиранием таблицы процессов не подходит. Тоесть нужно организовать многопоточную работу с файловой системой. Благодарю за советы. Это сообщение отредактировал(а) nIkTo - 18.7.2008, 09:03 |
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Огромное количество директорий на локальной машине или на удаленных серверах с медленной связью?
|
|||
|
||||
| nIkTo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
amg, точное замечание ...
На удаленных серверах с медленной связью |
|||
|
||||
| FooBar |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 25.2.2008 Репутация: 1 Всего: 3 |
ну вот так например можно с использованием нитей.
|
|||
|
||||
| IceSunrise |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 7.4.2008 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
А я все же думаю не стоит использовать треды... К сожалению с перловыми тредами не знаешь где и когда на какие грабли наступишь, хотя здесь вроде все просто. Лучше создавайте контролируемое количество процессов и поддерживайте такой пул.
А если подумать, то зачем здесь большое количество процессов?.... Если я правильно понял, вы читаете файл с директориями на одном сервере, в то время, как сами директории расположены на удаленных сервера и обработка этих директорий осуществляется именно на удаленных серверах. В таком случае достаточно одного процесса, который просто запустит эту самую обработку на всех удаленных машинах. Или я что-то не правильно понял...? |
|||
|
||||
| nIkTo |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
FooBar, похоже все выполнилось в одном треде.
Выполнил это :
Это сообщение отредактировал(а) nIkTo - 21.7.2008, 18:48 |
||||
|
|||||
| FooBar |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 25.2.2008 Репутация: 1 Всего: 3 |
nIkTo, это из за того что ваш тестовый файл слишком маленький, первый стартоваваший поток все строки обработал, а другим ничего не осталось
|
|||
|
||||
| nIkTo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
FooBar, а помоему это из за
один поток лочит общий массив и до окончания работы с ним не даёт работать другим потокам |
|||
|
||||
| FooBar |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 25.2.2008 Репутация: 1 Всего: 3 |
массив блокируется только в пределах блока кода, после выхода он разблокируется, просто создайте файл побольше и посмотрите кстати число в названии созданного файла - это номер потока полученный методом threads->tid Это сообщение отредактировал(а) FooBar - 23.7.2008, 15:19 |
||||
|
|||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 5 Всего: 57 |
ИМХО, проще делать через fork, при этом контролируя количество дочерних процессов -------------------- менеджер по кодеврайтингу |
|||
|
||||
| nIkTo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
как сделать вывод результатов каждого потока в один общий файл ?
З.Ы. Так не получилось :
Это сообщение отредактировал(а) nIkTo - 27.7.2008, 22:36 |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |