Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехлес дескрипторов при работе, нескольких скриптов в одной директории? 
:(
    Опции темы
Suppir
Дата 23.6.2011, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



Добрый день!

У меня есть директория с несколькими гигабайтами файлов *.txt.
Также есть 20 скриптов pl, которые выглядят примерно следующим образом:

Код

while(<*.txt>){
    open(IN, $_);
    while(<IN>){
        #здесь какие-то проверки
    }
    close IN;
}



Т.е. каждый скрипт открывает каждый txt на чтение, делает какие-то проверки и пишет потом в свой лог.
Сейчас я запускаю скрипты поочередно: отработает один, запущу другой и т.д. Но таким образом используется только одно ядро из 4. Не будет ли проблем с дескрипторами файлов, если я буду запускать по 4 скрипта одновременно (и, если один из них отработает, то сразу запускать следующий из очереди)? 


p.s. для многих скриптов нагрузка на процессор превышает нагрузку на винт, то есть винт работает со скоростью 150 Мб в секунду, а процессор позволяет обрабатывать только 5-10 Мб данных в секунду из-за сложных функций проверок. Поэтому хорошо бы использовать сразу все ядра. 


Это сообщение отредактировал(а) Suppir - 23.6.2011, 17:08
PM MAIL   Вверх
arto
Дата 23.6.2011, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



будут.
perldoc -f flock
PM MAIL ICQ   Вверх
Suppir
Дата 23.6.2011, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



Думал, может быть так сделать:


Код

while(<*.txt>){

    # создаем копию (с уникальным именем) для этого файла
    
    open(IN, "адрес копии");
    while(<IN>){
        #здесь какие-то проверки
    }
    close IN;
}




Но так получается, что эти несколько гигабайт txt будут копироваться 20 раз (по количеству скриптов). Что может только замедлить работу.

Это сообщение отредактировал(а) Suppir - 23.6.2011, 17:08
PM MAIL   Вверх
Pfailed
Дата 23.6.2011, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 22
Всего: 39



Если скрипты читают из этих файлов, но не пишут в них, то проблем не будет.


--------------------
PM MAIL   Вверх
Suppir
Дата 23.6.2011, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



Я сейчас попробовал несколько раз запустить - по очереди и сразу несколько сразу. Результат одинаковый, то есть проблем не возникает, по-видимому.
PM MAIL   Вверх
afiskon
Дата 23.6.2011, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 31.3.2011
Где: Россия, Москва

Репутация: нет
Всего: 4



Если открываете только на чтение, то проблем не будет. Но нагрузка на диск будет большой. И у вас в коде ошибка - close надо вызывать внутри первого цикла.
PM MAIL WWW   Вверх
Suppir
Дата 23.6.2011, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



Цитата(afiskon @  23.6.2011,  16:38 Найти цитируемый пост)
close надо вызывать внутри первого цикла. 


да, вижу, я при примера быстро написал - опечатался smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0445 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.