Вылетает наглухо на файловой операции
-
Добрый день. Сталкивались ли вы с вылетами программы при чисто файловых операциях?
Вроде бы все просто в проекте: берем из ресурса-папки файлы и раскидываем их рандомно по другим папкам. В отладке все ок, а в потоках вылетает всегда.
У вас тоже так?
-
@seoshnek Интерфейс программы зависает из за бесконечного повторения. У вас стоит 9999999 успешных выполнений и for внутри на 80 итераций. Добавте сон в цикл и сразу всё поймёте.
-
Спасибо. Я предполагал, что мой цикл просто завершится, как только файлы в папке из ресурса закончатся. Ну то есть, а как мне сделать универсально и для 1к файлов, и для 100к?
Я добавил sleep, и я так понимаю, что теперь операции синхронны? Да, работает, но стало очень медленно, поток ждем с минуту или около того. Как можно уменьшить время жизни потока?
Немного путаюсь, извините.
-
@seoshnek Я так понимаю это тестовый скрипт, который описывает задачу, с которой вы столкнулись? Можете конкретную задачу описать? Для чего копировать в рандомные папки файлы? Вдруг это можно проще реализовать
-
Ох, это часть задачи. Сначала вся пачка файлов конвертится в pdf другим конвертером (я думаю, node.js-компонет будет медленнее, поэтому другой софт), затем распихивается по папкам - затем эти страницы заливаются на соответсвующие хостинги.
Я разбивать по папкам нужно, потому что последующая заливалка (с циклом внутри) не вывозит react.js на том сайте и падает спустя 600-700 штук. Вернее, тот сайт начинает подтупливать и все падает спустя 2 гигабайта памяти на поток.
Так что задача именно такова и очень простая. Я хотел сделать её на BAS.
-
Тут все дело (еще раз извините, я только вникаю), что я неоднократно видел, что дескать в BAS - выносите все в ресурсы, а программа сама разберется и распихает их по потокам - не нужно об этом париться.
Так вот, что-то не получается у меня быстро сделать.
Так, по большому счету мне нужен вообще один поток и цикл внутри до 99999999, и когда ресурсы заканчиваются - поток дропается, так? Ну то есть один поток действует настолько, насколько позволяет io. Вот только в этом случае, одна итерация, судя по логу, выполняется аж 2 секунды. Долго, слишком долго. За 2 секунды можно записать сотню файлов же.
-
Сначала вся пачка файлов конвертится в pdf другим конвертером, затем распихивается по папкам - затем эти страницы заливаются на соответсвующие хостинги.
Тогда зачем рандом и столько циклов? Можно сделать проще:
Вот тестовый скрипт
-
@fox Спасибо! Но ваш вариант создаст столько же папок, сколько и файлов, а моя задача - раскидать их (много к файлов ) по 80-ти, допустим, папкам. Отсюда и генератор случайного числа в диапазоне (хотя можно и список цифр загрузить, но он все равно не ест cpu)
-
ваш вариант создаст столько же папок, сколько и файлов, а моя задача - раскидать их (много к файлов )
В вашем скрипте каждый файл удалялся после копирования, как файлы закончатся скрипт выйдет в очень долгий цикл без задержки и интерфейс зависнет.
Отсюда и генератор случайного числа в диапазоне (хотя можно и список цифр загрузить, но он все равно не ест cpu)
Основная проблема генератора случайных чисел, что числа могут повторятся и скрипт будет перезаписывать уже скопированные файлы.
В чём смысл копирования файлов в папки я так и не уловил..
-
@fox said in Вылетает наглухо на файловой операции:
В чём смысл копирования файлов в папки я так и не уловил..
Просто раскидать по папкам, чтобы легче было потом грузить потоками: одна папка - один поток.
-
Просто раскидать по папкам, чтобы легче было потом грузить потоками: одна папка - один поток.
Ни разу не встречал проблему с ресурсом "из папки", почему нельзя сразу его использовать?
-
@fox Ну такая специфика: я буду делать файлы на машине, а грузить с разных виртуалок и серверов.
Вот лучше, подскажите, вот это:
В вашем скрипте каждый файл удалялся после копирования, как файлы закончатся скрипт выйдет в очень долгий цикл без задержки и интерфейс зависнет.
Почему он зависнет? Там же было 80 итераций на поток, файлы кончились - всё, выходим. Или не так? Ведь ресурс - самый главный приоритет, так?
-
Вот этот вариант вообще не отрабатывает, он не перемещает файлы...
-
Почему он зависнет? Там же было 80 итераций на поток, файлы кончились - всё, выходим. Или не так? Ведь ресурс - самый главный приоритет, так?
Да, пересмотрел скрипт, как закончится ресурс, скрипт завершится. Но весь цикл совершает бесполезное действие:
При первой итерации цикла файл из ресурса {{откуда}} копируется папку с именем случайного числа, но потом удаляется сам файл, а при последующих итерациях ресурс используется этот же, но файла ни какого нет, вы его удалили при первой итерации.
я буду делать файлы на машине, а грузить с разных виртуалок и серверов.
Вот, теперь понятно. Тебе подойдёт и такой вариант:
Вот тестовый скрипт
-
@fox said in Вылетает наглухо на файловой операции:
При первой итерации цикла файл из ресурса {{откуда}} копируется папку с именем случайного числа, но потом удаляется сам файл, а при последующих итерациях ресурс используется этот же, но файла ни какого нет, вы его удалили при первой итерации.
Спасибо!
Я вот об этом даже не подозревал, думая, что и в цикле обрабатывабтся ресурсы.
Ведь именно так и работает, если я в цикле паршу файл (тип ресурса: из файла), то строки удаляются при каждой итерации. А с файлами вон оно чё.