[PDF] Сортировка страниц по их размерам

Толерантность ещё, наверное, стоит задать, как считаешь?
У меня задана. Практика показывает, что это необходимо. И для генеренных чертежей, и особенно для сканированных
 
Ё-моё! Это ж сколько в нём разных размеров-то! Под такое нужно менять алгоритм.
 
Я не предполагал, что их может быть столько разных и тупо на каждый размер страницы запускал по горутине, которая в свою очередь обращалась к файлу. Удивительно, что твой комп не повис, вообще.
 
Последнее редактирование:
Изменил логику под подобные файлы
168 мБ, 1593 страницы
теперь на нём работает за 29 секунд.
Код:
time ./sort_pages all.pdf
Обработка файла: all.pdf
Анализ страниц и получение размеров...
Найдено 1593 страниц. Группировка по размерам...
Найдено 31 уникальных размеров страниц.
Запуск 4 воркеров для параллельной обработки...
Запись файла отчета...
Обработка завершена для: all.pdf
Отчет создан: all_report.txt

real    0m29.563s
user    1m43.449s
sys    0m2.087s
 
Попробуй на моем задать -j 8, например, или сколько там у тебя ядер - 1
 
Я не предполагал, что их может быть столько разных и тупо на каждый размер страницы запускал по горутине, которая в свою очередь обращалась к файлу. Удивительно, что твой комп не повис, вообще.
А я когда писал, об этом подумал 😄 и не рискнул там много горутин запускать, было опасение, что начнет дурить
 
Интересно. То есть у тебя мое работало больше двух минут? Но у меня меньше полутора. Как же так получается?
 
Последнее редактирование:
У тебя, видимо, всякий раз читает файл, и остальное тоже не шибко эффективно.

Обновил Sort Pages
потестируй у себя.
 
Запусти с ключом -t

Код:
time ./pdfsizes sr -t all.pdf
[time] all pages 0007-0007 A3.pdf = 2800 ms
[time] all pages 0008-0008 A4.pdf = 2838 ms
[time] all pages 0005-0006 A4.pdf = 2863 ms
[time] all pages 0001-0004 A3.pdf = 2968 ms
[time] all pages 0015-0015 A2 roll 610 mm.pdf = 2645 ms
[time] all pages 0017-0017 A2 roll 610 mm.pdf = 2604 ms
[time] all pages 0016-0016 A1 roll 914 mm.pdf = 2711 ms
[time] all pages 0009-0014 A3.pdf = 2987 ms
[time] all pages 0018-0018 A3.pdf = 3170 ms
[time] all pages 0021-0036 A3.pdf = 3056 ms
[time] all pages 0020-0020 A3x4 roll 914 mm.pdf = 3354 ms
[time] all pages 0019-0019 A0x4 roll 1270 mm.pdf = 3813 ms
[time] all pages 0040-0045 A3.pdf = 3300 ms
[time] all pages 0046-0048 A4.pdf = 3306 ms
[time] all pages 0037-0039 A3.pdf = 3651 ms
[time] all pages 0049-0056 A3.pdf = 3183 ms
[time] all pages 0059-0062 A3.pdf = 3765 ms
[time] all pages 0064-0086 A3.pdf = 3748 ms
[time] all pages 0057-0058 A4.pdf = 4191 ms
[time] all pages 0063-0063 A1 roll 914 mm.pdf = 4077 ms
[time] all pages 0087-0087 A4.pdf = 2854 ms
[time] all pages 0093-0097 A4.pdf = 2807 ms
[time] all pages 0098-0106 A4.pdf = 2800 ms
[time] all pages 0088-0092 A3.pdf = 2949 ms
[time] all pages 0107-0118 A3.pdf = 2967 ms
[time] all pages 0156-0161 A4.pdf = 2822 ms
[time] all pages 0119-0153 A4.pdf = 3025 ms
[time] all pages 0154-0155 A4.pdf = 3021 ms
[time] all pages 0162-0164 A4.pdf = 2870 ms
[time] all pages 0165-0165 279x410.pdf = 2733 ms
[time] all pages 0167-0167 308x389.pdf = 2950 ms
[time] all pages 0166-0166 407x434.pdf = 3041 ms
[time] all pages 0168-0168 290x426.pdf = 2974 ms
[time] all pages 0169-0169 233x399.pdf = 2889 ms
[time] all pages 0171-0171 253x366.pdf = 2742 ms
[time] all pages 0170-0170 314x379.pdf = 2874 ms
[time] all pages 0172-0172 241x392.pdf = 3030 ms
[time] all pages 0177-0177 420x630.pdf = 2941 ms
[time] all pages 0173-0176 A2 roll 610 mm.pdf = 3217 ms
[time] all pages 0178-0178 A2 roll 610 mm.pdf = 3022 ms
[time] all pages 0179-0180 420x630.pdf = 3073 ms
[time] all pages 0204-0204 A2 roll 610 mm.pdf = 2805 ms
[time] all pages 0203-0203 420x630.pdf = 3050 ms
[time] all pages 0181-0202 A2 roll 610 mm.pdf = 4060 ms
[time] all pages 0205-0206 420x630.pdf = 2836 ms
[time] all pages 0229-0229 420x630.pdf = 2892 ms
[time] all pages 0207-0228 A2 roll 610 mm.pdf = 3480 ms
[time] all pages 0230-0230 A2 roll 610 mm.pdf = 2907 ms
[time] all pages 0231-0232 420x630.pdf = 3006 ms
[time] all pages 0233-0250 A2 roll 610 mm.pdf = 3261 ms
[time] all pages 0251-0252 310x420.pdf = 2962 ms
[time] all pages 0253-0255 380x420.pdf = 3108 ms
[time] all pages 0256-0267 310x420.pdf = 3384 ms
[time] all pages 0268-0269 390x420.pdf = 2981 ms
[time] all pages 0270-0275 310x420.pdf = 3356 ms
[time] all pages 0276-0278 380x420.pdf = 2954 ms
[time] all pages 0291-0292 390x420.pdf = 2889 ms
[time] all pages 0279-0290 310x420.pdf = 3237 ms
[time] all pages 0297-0297 400x420.pdf = 2763 ms
[time] all pages 0293-0296 310x420.pdf = 3057 ms
[time] all pages 0298-0299 420x420.pdf = 2888 ms
[time] all pages 0300-0305 310x420.pdf = 3062 ms
[time] all pages 0306-0306 320x420.pdf = 2949 ms
[time] all pages 0307-0307 330x420.pdf = 3017 ms
[time] all pages 0308-0311 310x420.pdf = 2992 ms
[time] all pages 0312-0313 420x420.pdf = 2934 ms
[time] all pages 0318-0320 420x420.pdf = 2967 ms
[time] all pages 0314-0317 310x420.pdf = 3200 ms
[time] all pages 0321-0325 310x420.pdf = 3759 ms
[time] all pages 0326-0326 350x420.pdf = 3482 ms
[time] all pages 0327-0327 310x420.pdf = 3400 ms
[time] all pages 0328-0330 420x420.pdf = 3428 ms
[time] all pages 0331-0335 310x420.pdf = 3218 ms
[time] all pages 0336-0336 350x420.pdf = 3148 ms
[time] all pages 0337-0337 310x420.pdf = 2860 ms
[time] all pages 0338-0340 420x420.pdf = 3045 ms
[time] all pages 0346-0346 350x420.pdf = 2680 ms
[time] all pages 0341-0345 310x420.pdf = 2855 ms
[time] all pages 0347-0347 310x420.pdf = 2892 ms
[time] all pages 0348-0350 A3.pdf = 2655 ms
[time] all pages 0351-0351 216x279.pdf = 2755 ms
[time] all pages 0363-0363 155x160.pdf = 2480 ms
[time] all pages 0352-0362 A4.pdf = 2897 ms
[time] all pages 0364-0364 400x450.pdf = 2723 ms
[time] all pages 0365-0367 A4.pdf = 2805 ms
[time] all pages 0368-0369 279x410.pdf = 2808 ms
[time] all pages 0370-0371 407x434.pdf = 2809 ms
[time] all pages 0372-0373 308x389.pdf = 2799 ms
[time] all pages 0376-0377 233x399.pdf = 2771 ms
[time] all pages 0374-0375 290x426.pdf = 2811 ms
[time] all pages 0378-0379 314x379.pdf = 2878 ms
[time] all pages 0380-0381 253x366.pdf = 2817 ms
[time] all pages 0382-0383 241x392.pdf = 2903 ms
[time] all pages 0384-0391 A2 roll 610 mm.pdf = 3119 ms
[time] all pages 0394-0395 A2 roll 610 mm.pdf = 2884 ms
[time] all pages 0392-0393 420x630.pdf = 2923 ms
[time] all pages 0396-0399 420x630.pdf = 2914 ms
[time] all pages 0444-0445 420x630.pdf = 2889 ms
[time] all pages 0446-0447 A2 roll 610 mm.pdf = 2916 ms
[time] all pages 0400-0443 A2 roll 610 mm.pdf = 4028 ms
[time] all pages 0448-0451 420x630.pdf = 2953 ms
[time] all pages 0496-0497 420x630.pdf = 2840 ms
[time] all pages 0498-0499 A2 roll 610 mm.pdf = 2677 ms
[time] all pages 0452-0495 A2 roll 610 mm.pdf = 4153 ms
[time] all pages 0500-0503 420x630.pdf = 3019 ms
[time] all pages 0540-0543 310x420.pdf = 2845 ms
[time] all pages 0504-0539 A2 roll 610 mm.pdf = 3743 ms
[time] all pages 0544-0549 380x420.pdf = 3071 ms
[time] all pages 0550-0573 310x420.pdf = 3668 ms
[time] all pages 0574-0577 390x420.pdf = 3177 ms
[time] all pages 0578-0589 310x420.pdf = 3425 ms
[time] all pages 0590-0595 380x420.pdf = 3006 ms
[time] all pages 0620-0623 390x420.pdf = 3001 ms
[time] all pages 0596-0619 310x420.pdf = 3557 ms
[time] all pages 0624-0631 310x420.pdf = 3037 ms
[time] all pages 0632-0633 400x420.pdf = 3285 ms
[time] all pages 0634-0637 420x420.pdf = 3153 ms
[time] all pages 0652-0653 330x420.pdf = 2956 ms
[time] all pages 0650-0651 320x420.pdf = 3587 ms
[time] all pages 0638-0649 310x420.pdf = 3977 ms
[time] all pages 0654-0661 310x420.pdf = 2911 ms
[time] all pages 0662-0665 420x420.pdf = 2957 ms
[time] all pages 0674-0679 420x420.pdf = 3064 ms
[time] all pages 0666-0673 310x420.pdf = 3295 ms
[time] all pages 0680-0689 310x420.pdf = 3272 ms
[time] all pages 0690-0691 350x420.pdf = 2939 ms
[time] all pages 0692-0693 310x420.pdf = 2807 ms
[time] all pages 0694-0699 420x420.pdf = 3080 ms
[time] all pages 0700-0709 310x420.pdf = 2882 ms
[time] all pages 0710-0711 350x420.pdf = 2898 ms
[time] all pages 0712-0713 310x420.pdf = 2848 ms
[time] all pages 0714-0719 420x420.pdf = 2902 ms
[time] all pages 0720-0729 310x420.pdf = 2917 ms
[time] all pages 0730-0731 350x420.pdf = 2842 ms
[time] all pages 0732-0733 310x420.pdf = 2823 ms
[time] all pages 0734-0739 A3.pdf = 2751 ms
[time] all pages 0740-0741 216x279.pdf = 2974 ms
[time] all pages 0764-0765 155x160.pdf = 2709 ms
[time] all pages 0742-0763 A4.pdf = 3029 ms
[time] all pages 0766-0767 400x450.pdf = 2835 ms
[time] all pages 0768-0773 A4.pdf = 2870 ms
[time] all pages 0794-0803 A4.pdf = 2936 ms
[time] all pages 0774-0793 A3.pdf = 3399 ms
[time] all pages 0804-0808 A3.pdf = 3164 ms
[time] all pages 0809-0813 A4.pdf = 2806 ms
[time] all pages 0844-0848 A2 roll 610 mm.pdf = 2785 ms
[time] all pages 0814-0843 A3.pdf = 3423 ms
[time] all pages 0849-0853 A1 roll 914 mm.pdf = 2996 ms
[time] all pages 0854-0858 A2 roll 610 mm.pdf = 2840 ms
[time] all pages 0859-0863 A3.pdf = 2780 ms
[time] all pages 0869-0873 A3x4 roll 914 mm.pdf = 3696 ms
[time] all pages 0874-0953 A3.pdf = 3378 ms
[time] all pages 0864-0868 A0x4 roll 1270 mm.pdf = 5672 ms
[time] all pages 0969-0998 A3.pdf = 2839 ms
[time] all pages 0954-0968 A3.pdf = 4605 ms
[time] all pages 0999-1013 A4.pdf = 2908 ms
[time] all pages 1014-1053 A3.pdf = 3124 ms
[time] all pages 1054-1063 A4.pdf = 3408 ms
[time] all pages 1064-1083 A3.pdf = 3512 ms
[time] all pages 1084-1088 A1 roll 914 mm.pdf = 3533 ms
[time] all pages 1089-1203 A3.pdf = 3821 ms
[time] all pages 1204-1208 A4.pdf = 3146 ms
[time] all pages 1209-1233 A3.pdf = 3252 ms
[time] all pages 1234-1258 A4.pdf = 2814 ms
[time] all pages 1259-1303 A4.pdf = 2690 ms
[time] all pages 1304-1363 A3.pdf = 3135 ms
[time] all pages 1364-1538 A4.pdf = 2863 ms
[time] all pages 1539-1548 A4.pdf = 2675 ms
[time] all pages 1549-1578 A4.pdf = 2532 ms
[time] all pages 1579-1593 A4.pdf = 2371 ms
[time] split-ranges total = 133382 ms

real    2m13.515s
user    7m37.994s
sys    0m10.318s
 
Да, 133 секунды. Пойду запущу еще раз. Что происходит?
Посмотрел кино 😄
 
ага. тут выяснился один момент.
суммарное время обработки меньше чем просто сумма времени обработки каждого формата
то есть:
10810
10908
10816
11173
8543
9022
8705
8843
23242
8983
8684
8509
8957
10100
9223
8643
8981
9255
10796
11180
17115
8975
22006
11098
21378
10242

но при этом
total_duration_ms 80445
Вероятно, дело как раз в многопоточности