Закачать файлы в многопотоке

Evgeny76

Client
Регистрация
11.09.2015
Сообщения
192
Благодарностей
85
Баллы
28
Всем привет!
Задача в следующем:
Есть папка с файлами, необходимо брать из папки по одному файлу и заливать на определенный сайт. После чего делаем проверку по определенному слову на сайте удачно ли произошла загрузка или нет. По итогам проверки, файл кладем либо в папку успешные либо в неуспешные.
С однопотоком проблем нет. Для того чтобы работало в многопотоке сделал следующее: создал ещё одну папку "temp", беру список файлов с основной папки, со списка беру первую строку с полным путем к файлу, переношу его в папку temp, и уже с этой папки беру файл для закачки на сайт. Шаблон работает, но всё равно иногда проскакивают ошибки, как я думаю в некоторых случаях когда один поток взял из списка файл и ещё не успел его перенести во временную папку, то второй поток тоже может успеть взять его.
Подскажите пожалуйста, правильно ли я делаю? Или есть какое либо другое решение этой задачи?
Спасибо.
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 451
Благодарностей
1 885
Баллы
113
можно в список получить все пути к файлам, потом брать первую строку с удалением, в которой будет полный путь к файлу и обрабатывать файл. Таким образом можно обойтись без папки темп.
 

Evgeny76

Client
Регистрация
11.09.2015
Сообщения
192
Благодарностей
85
Баллы
28
А список разве один и тот же будет на все потоки?
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 451
Благодарностей
1 885
Баллы
113

evgen_po

Client
Регистрация
27.08.2013
Сообщения
848
Благодарностей
532
Баллы
93
А список разве один и тот же будет на все потоки?
Если ставить эти две галки, что на скрине, в свойствах списка, то список будет один на все потоки. Он как бы копируется в оперативу зенки, и работа с ним происходит уже оттуда - с учетом изменений для всех потоков!
http://joxi.ru/4AkvYN0F6LKe2q
 
  • Спасибо
Реакции: Evgeny76 и ZennoScript

Evgeny76

Client
Регистрация
11.09.2015
Сообщения
192
Благодарностей
85
Баллы
28
Нутром понимал, что можно сделать как-то проще, но двухнедельного опыта пока не хватает )
ZennoScript, evgen_po спасибо большое!
 

Evgeny76

Client
Регистрация
11.09.2015
Сообщения
192
Благодарностей
85
Баллы
28
Нарисовалась одна проблемка со списком:
как только запускается второй поток, то он тоже берет список и добавляет его к существующему в конец. Хотя первые строки, как и положено удаляются. В итоге после нескольких повторов работы шаблона, файл, привязанный к списку разрастается до огромных размеров.
 

evgen_po

Client
Регистрация
27.08.2013
Сообщения
848
Благодарностей
532
Баллы
93
Что-то Вы неправильно делаете. Строки из списка нужно брать построчно с удалением. Посмотрите, правильный ли у Вас указан разделитель в свойствах списка.
Если проблема остается, опишите ее более подробно, что и как делаете, желательно с примерами и зарисовками!))
 

seomiks

Client
Регистрация
13.09.2014
Сообщения
369
Благодарностей
124
Баллы
43
Ну я делал на ГЕТ запросах довландер, (в списке брал рандомные строки - линки) при больших скоростях попадались дубли скаченых файлов.
 

Evgeny76

Client
Регистрация
11.09.2015
Сообщения
192
Благодарностей
85
Баллы
28

evgen_po

Client
Регистрация
27.08.2013
Сообщения
848
Благодарностей
532
Баллы
93
Немного не правильно у Вас логика настроена. У Вас получается при каждом запуске (потоке) будут дописываться одинаковые данные в Список 1, так как Вы и описывали.
Делайте так:
У Вас Список 1 привязан к какому-то конкретному файлу. Проверяйте, если этот файл уже существует, то не нужно заново получать список файлов в предыдущем шаге и еще раз их ложить в существующий список.
А если еще этого файла нет, то тогда получайте в него список файлов.
Подумайте сами, у Вам при каждом запуске заново берется один и тот же список файлов и засовывается в список 1 - такого быть не должно!
 
  • Спасибо
Реакции: Evgeny76

Evgeny76

Client
Регистрация
11.09.2015
Сообщения
192
Благодарностей
85
Баллы
28
Всё заработало как надо, ещё раз всем спасибо
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)