Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > что показывает times


Автор: Itsys 26.2.2008, 01:03
Что возвращает функция times в скалярном контексте?

По документации - время с начала работы скрипта в секундах... а получается что-то другое...

При загрузке маленького файла функция times возвращает 45.037, а разница между time на начало выполнения и в конце выполнения скрипта - 1

При загрузке большого файла - 260.968 и 157 соответственно.

Так что же она показывает?

Автор: arto 26.2.2008, 01:34
# perl -le 'print scalar times(); sleep 10; print scalar times()'
0
0
# perl -le 'print scalar times(); foreach (1..100_000_000) { $_*$_; } print scalar times()'
0
32.16
# 

man 2 times

Автор: Itsys 26.2.2008, 21:11
 smile У меня Windows  smile 

man 2 times не катит

Можешь объяснить словами?

Или ответить как получить время выполнения скрпита, у меня задача: скрипт не должен выпоняться более 10 секунд.

Автор: shamber 27.2.2008, 10:00
Itsys, 
Код

   times
 Returns a four-element list giving the user and system times, in
           seconds, for this process and the children of this process.

               ($user,$system,$cuser,$csystem) = times;

           In scalar context, "times" returns $user.


Код

use Time::HiRes qw ( gettimeofday tv_interval);
#начальное время;
 $t0 = [gettimeofday];

superfunc();

#прошло времени;
 $elapsed = tv_interval ( $t0, [gettimeofday]);



Автор: Itsys 27.2.2008, 13:23
shamber, 
Цитата(shamber @  27.2.2008,  10:00 Найти цитируемый пост)
   times
 Returns a four-element list giving the user and system times, in
           seconds, for this process and the children of this process.

               ($user,$system,$cuser,$csystem) = times;

           In scalar context, "times" returns $user.

- это я прочитал.

Вопрос в чем - почему если от запуска скрипта до окончания проходит 1, ну максимум 2 секунды, times показывает 45.037?

2. В том случае если мне надо примерно засечь вермя, то не проще ли использовать следующую конструкцию:
Код

$t = time

.....
superfunc();
.....

$elapsed = time-$t;

Автор: shamber 27.2.2008, 14:13
Itsys, вы сами решайте что вам проще и как точнее

smile

Автор: arto 27.2.2008, 14:39
Цитата(Itsys @  27.2.2008,  13:23 Найти цитируемый пост)
Вопрос в чем - почему если от запуска скрипта до окончания проходит 1, ну максимум 2 секунды, times показывает 45.037?


пример можно?

Автор: Itsys 27.2.2008, 14:43
Там кода тысячи 2 строк....

но вот выдержка:
Код

    open (LOG, ">$sitepath/Admin/log.txt");
    #Загрузим информацю из файла в БД
    if ($PARAMS{FileFormat} eq "xls"){
        #Загружаем информацию о товарах
        my $oFmtJ = Spreadsheet::ParseExcel::FmtUnicode->new(Unicode_Map => 'CP1251');
        my $excel = Spreadsheet::ParseExcel::Workbook->Parse("$sitepath/Admin/suppliers/Files/$PARAMS{SupplierId}.xls", $oFmtJ);
        my $sheet = $excel->{Worksheet}[0];
        foreach my $rownum ($PARAMS{HeaderLine} .. $sheet->{MaxRow}){
            print LOG $rownum. ": ";
            my @ColumsValues;
            foreach my $cellnum (@Columns){
                my $cell = $sheet->{Cells}[$rownum][$cellnum];
                if ($cell) {
                    my $Val = $oFmtJ->TextFmt($cell->{Val}, $cell->{Code});
                    $Val =~ s/'/`/g;
                    if ($Val){
                        push (@ColumsValues, "'$Val'");
                    }
                    else{
                        push (@ColumsValues, "''");
                    }
                }
                else{
                    push (@ColumsValues, "''");
                }
            }
            $query = "INSERT INTO SuppliersFileRows (SupplierId, GoodType, RowNumber, Col" . (join(", Col" , @Columns)) . ") VALUES
                                                    ($PARAMS{SupplierId}, $PARAMS{GoodType}, $rownum, " . (join(", " , @ColumsValues)) . ")";
            print LOG "$query\n";
            if (!$SQLFastbook->do($query)){
                print "<span id=\"result\">" . $SQLFastbook->errstr . "<br>\n$query</span>\n";
                exit;
            }
            
            $query = "SELECT COUNT(*) AS CNT FROM SuppliersFileRows WHERE SupplierId = $PARAMS{SupplierId} AND GoodType = $PARAMS{GoodType}";
            my $sth = $SQLFastbook->prepare($query);
            $sth->execute || die "~~" . $sth->errstr . "<br>\n" . $query;
            my $count = $sth->fetchrow_hashref;
            print LOG "COUNT(*) = $$count{CNT}\n";
        }
    }
    close (LOG);
    print times;


Добавлено через 1 минуту и 27 секунд
в коде используется около 10 модулей - как стандартных, так и самописных, парсится excel и запихивается все в MS SQL через DBI и драйвер ODBC

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)