Вылетает наглухо на файловой операции



  • Добрый день. Сталкивались ли вы с вылетами программы при чисто файловых операциях?

    Вроде бы все просто в проекте: берем из ресурса-папки файлы и раскидываем их рандомно по другим папкам. В отладке все ок, а в потоках вылетает всегда.

    У вас тоже так?

    0_1534886600686_раскидать по папкам.xml



  • @seoshnek Интерфейс программы зависает из за бесконечного повторения. У вас стоит 9999999 успешных выполнений и for внутри на 80 итераций. Добавте сон в цикл и сразу всё поймёте.

    раскидать-по-папкам.xml



  • Спасибо. Я предполагал, что мой цикл просто завершится, как только файлы в папке из ресурса закончатся. Ну то есть, а как мне сделать универсально и для 1к файлов, и для 100к?

    Я добавил sleep, и я так понимаю, что теперь операции синхронны? Да, работает, но стало очень медленно, поток ждем с минуту или около того. Как можно уменьшить время жизни потока?

    Немного путаюсь, извините.



  • @seoshnek Я так понимаю это тестовый скрипт, который описывает задачу, с которой вы столкнулись? Можете конкретную задачу описать? Для чего копировать в рандомные папки файлы? Вдруг это можно проще реализовать



  • Ох, это часть задачи. Сначала вся пачка файлов конвертится в pdf другим конвертером (я думаю, node.js-компонет будет медленнее, поэтому другой софт), затем распихивается по папкам - затем эти страницы заливаются на соответсвующие хостинги.

    Я разбивать по папкам нужно, потому что последующая заливалка (с циклом внутри) не вывозит react.js на том сайте и падает спустя 600-700 штук. Вернее, тот сайт начинает подтупливать и все падает спустя 2 гигабайта памяти на поток.

    Так что задача именно такова и очень простая. Я хотел сделать её на BAS.



  • Тут все дело (еще раз извините, я только вникаю), что я неоднократно видел, что дескать в BAS - выносите все в ресурсы, а программа сама разберется и распихает их по потокам - не нужно об этом париться.

    Так вот, что-то не получается у меня быстро сделать.

    Так, по большому счету мне нужен вообще один поток и цикл внутри до 99999999, и когда ресурсы заканчиваются - поток дропается, так? Ну то есть один поток действует настолько, насколько позволяет io. Вот только в этом случае, одна итерация, судя по логу, выполняется аж 2 секунды. Долго, слишком долго. За 2 секунды можно записать сотню файлов же.



  • @seoshnek

    Сначала вся пачка файлов конвертится в pdf другим конвертером, затем распихивается по папкам - затем эти страницы заливаются на соответсвующие хостинги.

    Тогда зачем рандом и столько циклов? Можно сделать проще:
    0_1535039154538_на форум 87.png

    Вот тестовый скрипт



  • @fox Спасибо! Но ваш вариант создаст столько же папок, сколько и файлов, а моя задача - раскидать их (много к файлов ) по 80-ти, допустим, папкам. Отсюда и генератор случайного числа в диапазоне (хотя можно и список цифр загрузить, но он все равно не ест cpu)



  • @seoshnek

    ваш вариант создаст столько же папок, сколько и файлов, а моя задача - раскидать их (много к файлов )

    В вашем скрипте каждый файл удалялся после копирования, как файлы закончатся скрипт выйдет в очень долгий цикл без задержки и интерфейс зависнет.

    Отсюда и генератор случайного числа в диапазоне (хотя можно и список цифр загрузить, но он все равно не ест cpu)

    Основная проблема генератора случайных чисел, что числа могут повторятся и скрипт будет перезаписывать уже скопированные файлы.


    В чём смысл копирования файлов в папки я так и не уловил..



  • @fox said in Вылетает наглухо на файловой операции:

    В чём смысл копирования файлов в папки я так и не уловил..

    Просто раскидать по папкам, чтобы легче было потом грузить потоками: одна папка - один поток.



  • @seoshnek

    Просто раскидать по папкам, чтобы легче было потом грузить потоками: одна папка - один поток.

    Ни разу не встречал проблему с ресурсом "из папки", почему нельзя сразу его использовать?



  • @fox Ну такая специфика: я буду делать файлы на машине, а грузить с разных виртуалок и серверов.

    Вот лучше, подскажите, вот это:

    В вашем скрипте каждый файл удалялся после копирования, как файлы закончатся скрипт выйдет в очень долгий цикл без задержки и интерфейс зависнет.
    

    Почему он зависнет? Там же было 80 итераций на поток, файлы кончились - всё, выходим. Или не так? Ведь ресурс - самый главный приоритет, так?



  • Вот этот вариант вообще не отрабатывает, он не перемещает файлы...

    alt text

    0_1535056017117_1535039182148-раскидать-по-папкам2.xml



  • @seoshnek

    Почему он зависнет? Там же было 80 итераций на поток, файлы кончились - всё, выходим. Или не так? Ведь ресурс - самый главный приоритет, так?

    Да, пересмотрел скрипт, как закончится ресурс, скрипт завершится. Но весь цикл совершает бесполезное действие:
    0_1535056360281_на форум 88.png
    При первой итерации цикла файл из ресурса {{откуда}} копируется папку с именем случайного числа, но потом удаляется сам файл, а при последующих итерациях ресурс используется этот же, но файла ни какого нет, вы его удалили при первой итерации.


    я буду делать файлы на машине, а грузить с разных виртуалок и серверов.

    Вот, теперь понятно. Тебе подойдёт и такой вариант:
    0_1535056751148_на форум 89.png

    Вот тестовый скрипт



  • @fox said in Вылетает наглухо на файловой операции:

    При первой итерации цикла файл из ресурса {{откуда}} копируется папку с именем случайного числа, но потом удаляется сам файл, а при последующих итерациях ресурс используется этот же, но файла ни какого нет, вы его удалили при первой итерации.

    Спасибо!

    Я вот об этом даже не подозревал, думая, что и в цикле обрабатывабтся ресурсы.

    Ведь именно так и работает, если я в цикле паршу файл (тип ресурса: из файла), то строки удаляются при каждой итерации. А с файлами вон оно чё.


Log in to reply