История изменений
Исправление beck, (текущая версия) :
Переписал по вашему совету с итератором файла. Однако суть в том, и я об этом писал раньше, что мне в итоге нужно было сравнить эти два массива, поэтому я их и собираю, а не просто выкинуть в файл найденные подстроки. Ну да ладно. Про сравнить пару массивов сделаю ещё один тест. )))
Итак, perl
my $time1 = gettimeofday;
print "begin: ", $time1, "\n";
open(FP_01, "<$ARGV[0]") || die "Can not open $ARGV[0] file";
open(FP_02, "<$ARGV[1]") || die "Can not open $ARGV[1] file";
open(FP_RES, ">$ARGV[2]") || die "Can not open $ARGV[2] file";
while (<FP_01>) {
print FP_RES substr($_, 3, 11) . "\n";
}
while (<FP_02>) {
print FP_RES substr($_, 3, 11) . "\n";
}
close(FP_01);
close(FP_02);
close(FP_RES);
my $time2 = gettimeofday;
print "end: ", $time2, "\n";
Запустил несколько раз, для усреднить результат:
begin: 1584348067.03854
end: 1584348067.38828
begin: 1584348102.90829
end: 1584348103.25905
begin: 1584348104.91495
end: 1584348105.28588
begin: 1584348138.61802
end: 1584348138.96772
Примерно ~0,35 секунды. Причём расхождение результатов 0,02.
Перейдем к питону:
t = datetime.now()
print(t.strftime("%Y-%m-%d %H:%M:%S.%f").rstrip('0'))
file_in_1 = open(sys.argv[1], 'r')
file_in_2 = open(sys.argv[2], 'r')
file_out = open(sys.argv[3], 'w')
for temp in file_in_1:
print(temp[3:14], file=file_out)
for temp in file_in_2:
print(temp[3:14], file=file_out)
file_in_1.close()
file_in_2.close()
file_out.close()
print(datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f").rstrip('0'))
Результаты:
2020-03-16 11:24:57.511136
2020-03-16 11:24:58.786507
2020-03-16 11:25:03.978829
2020-03-16 11:25:05.32895
2020-03-16 11:25:06.698896
2020-03-16 11:25:07.979156
2020-03-16 11:25:09.256597
2020-03-16 11:25:10.594978
2020-03-16 11:27:26.465951
2020-03-16 11:27:27.756798
Примерно ~ 1,3 секунды. А вот расхождение результатов 0,07.
Итого: Perl быстрее в 3,7 раза и к тоже показывает куда более стабильный результат. В общем, как и ожидалось, питон - так и не показал чудесной производительности.
ЗЫ убрал chomp из perl, он не нужен. )))
Исправление beck, :
Переписал по вашему совету с итератором файла. Однако суть в том, и я об этом писал раньше, что мне в итоге нужно было сравнить эти два массива, поэтому я их и собираю, а не просто выкинуть в файл найденные подстроки. Ну да ладно. Про сравнить пару массивов сделаю ещё один тест. )))
Итак, perl
my $time1 = gettimeofday;
print "begin: ", $time1, "\n";
open(FP_01, "<$ARGV[0]") || die "Can not open $ARGV[0] file";
open(FP_02, "<$ARGV[1]") || die "Can not open $ARGV[1] file";
open(FP_RES, ">$ARGV[2]") || die "Can not open $ARGV[2] file";
while (<FP_01>) {
print FP_RES substr($_, 3, 11) . "\n";
}
while (<FP_02>) {
print FP_RES substr($_, 3, 11) . "\n";
}
close(FP_01);
close(FP_02);
close(FP_RES);
my $time2 = gettimeofday;
print "end: ", $time2, "\n";
Запустил несколько раз, для усреднить результат:
begin: 1584348067.03854
end: 1584348067.38828
begin: 1584348102.90829
end: 1584348103.25905
begin: 1584348104.91495
end: 1584348105.28588
begin: 1584348138.61802
end: 1584348138.96772
Примерно ~0,35 секунды. Причём расхождение результатов 0,02.
Перейдем к питону:
t = datetime.now()
print(t.strftime("%Y-%m-%d %H:%M:%S.%f").rstrip('0'))
file_in_1 = open(sys.argv[1], 'r')
file_in_2 = open(sys.argv[2], 'r')
file_out = open(sys.argv[3], 'w')
for temp in file_in_1:
print(temp[3:14], file=file_out)
for temp in file_in_2:
print(temp[3:14], file=file_out)
file_in_1.close()
file_in_2.close()
file_out.close()
print(datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f").rstrip('0'))
Результаты:
2020-03-16 11:24:57.511136
2020-03-16 11:24:58.786507
2020-03-16 11:25:03.978829
2020-03-16 11:25:05.32895
2020-03-16 11:25:06.698896
2020-03-16 11:25:07.979156
2020-03-16 11:25:09.256597
2020-03-16 11:25:10.594978
2020-03-16 11:27:26.465951
2020-03-16 11:27:27.756798
Примерно ~ 1,3 секунды. А вот расхождение результатов 0,07.
Итого: Perl быстрее в 3,7 раза и к тоже показывает куда более стабильный результат.
ЗЫ убрал chomp из perl, он не нужен. )))
Исправление beck, :
Переписал по вашему совету с итератором файла. Однако суть в том, и я об этом писал раньше, что мне в итоге нужно было сравнить эти два массива, поэтому я их и собираю, а не просто выкинуть в файл найденные подстроки. Ну да ладно. Про сравнить пару массивов сделаю ещё один тест. )))
Итак, perl
my $time1 = gettimeofday;
print "begin: ", $time1, "\n";
open(FP_01, "<$ARGV[0]") || die "Can not open $ARGV[0] file";
open(FP_02, "<$ARGV[1]") || die "Can not open $ARGV[1] file";
open(FP_RES, ">$ARGV[2]") || die "Can not open $ARGV[2] file";
while (<FP_01>) {
chomp;
print FP_RES substr($_, 3, 11) . "\n";
}
while (<FP_02>) {
chomp;
print FP_RES substr($_, 3, 11) . "\n";
}
close(FP_01);
close(FP_02);
close(FP_RES);
my $time2 = gettimeofday;
print "end: ", $time2, "\n";
Запустил несколько раз, для усреднить результат:
begin: 1584346540.25037
end: 1584346540.60583
begin: 1584346750.79239
end: 1584346751.14869
begin: 1584346785.73511
end: 1584346786.09154
begin: 1584346856.92943
end: 1584346857.28393
Примерно ~0,36 секунды. Причём расхождение результатов 0,02.
Перейдем к питону:
t = datetime.now()
print(t.strftime("%Y-%m-%d %H:%M:%S.%f").rstrip('0'))
file_in_1 = open(sys.argv[1], 'r')
file_in_2 = open(sys.argv[2], 'r')
file_out = open(sys.argv[3], 'w')
for temp in file_in_1:
print(temp[3:14], file=file_out)
for temp in file_in_2:
print(temp[3:14], file=file_out)
file_in_1.close()
file_in_2.close()
file_out.close()
print(datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f").rstrip('0'))
Результаты:
2020-03-16 11:24:57.511136
2020-03-16 11:24:58.786507
2020-03-16 11:25:03.978829
2020-03-16 11:25:05.32895
2020-03-16 11:25:06.698896
2020-03-16 11:25:07.979156
2020-03-16 11:25:09.256597
2020-03-16 11:25:10.594978
2020-03-16 11:27:26.465951
2020-03-16 11:27:27.756798
Примерно ~ 1,3 секунды. А вот расхождение результатов 0,07.
Итого: Perl быстрее в 3,6 раза и к тоже показывает куда более стабильный результат.
Исходная версия beck, :
Переписал по вашему совету с итератором файла. Однако суть в том, и я об этом писал раньше, что мне в итоге нужно было сравнить эти два массива, поэтому я их и собираю, а не просто выкинуть в файл найденные подстроки. Ну да ладно. Про сравнить пару массивов сделаю ещё один тест. )))
Итак, perl
my $time1 = gettimeofday;
print "begin: ", $time1, "\n";
open(FP_01, "<$ARGV[0]") || die "Can not open $ARGV[0] file";
open(FP_02, "<$ARGV[1]") || die "Can not open $ARGV[1] file";
open(FP_RES, ">$ARGV[2]") || die "Can not open $ARGV[2] file";
while (<FP_01>) {
chomp;
print FP_RES substr($_, 3, 11) . "\n";
}
while (<FP_02>) {
print FP_RES substr($_, 3, 11) . "\n";
}
close(FP_01);
close(FP_02);
close(FP_RES);
my $time2 = gettimeofday;
print "end: ", $time2, "\n";
Запустил несколько раз, для усреднить результат:
begin: 1584346540.25037
end: 1584346540.60583
begin: 1584346750.79239
end: 1584346751.14869
begin: 1584346785.73511
end: 1584346786.09154
begin: 1584346856.92943
end: 1584346857.28393
Примерно ~0,36 секунды. Причём расхождение результатов 0,02.
Перейдем к питону:
t = datetime.now()
print(t.strftime("%Y-%m-%d %H:%M:%S.%f").rstrip('0'))
file_in_1 = open(sys.argv[1], 'r')
file_in_2 = open(sys.argv[2], 'r')
file_out = open(sys.argv[3], 'w')
for temp in file_in_1:
print(temp[3:14], file=file_out)
for temp in file_in_2:
print(temp[3:14], file=file_out)
file_in_1.close()
file_in_2.close()
file_out.close()
print(datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f").rstrip('0'))
Результаты:
2020-03-16 11:24:57.511136
2020-03-16 11:24:58.786507
2020-03-16 11:25:03.978829
2020-03-16 11:25:05.32895
2020-03-16 11:25:06.698896
2020-03-16 11:25:07.979156
2020-03-16 11:25:09.256597
2020-03-16 11:25:10.594978
2020-03-16 11:27:26.465951
2020-03-16 11:27:27.756798
Примерно ~ 1,3 секунды. А вот расхождение результатов 0,07.
Итого: Perl быстрее в 3,6 раза и к тоже показывает куда более стабильный результат.