Работа с файлами в многопотоке

Geka1989

Client
Регистрация
17.12.2016
Сообщения
184
Благодарностей
23
Баллы
18
Подскажите логику, есть список файлов с текстовкой, необходимо их открывать, брать текст и создавать посты. Беру экшеном список файлов, потом беру строки с удалением, проблема в том что каждый поток проходит кубик получить список файлов и в итоге получается куча строк и один и тот же пост дублируется много раз. Как быть? что сделать чтоб только раз получался список файлов?
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
Так создайте физический список файлов перед запуском шаблона. А в шаблоне этот файл прикрепите к списку, с которого с удалением будете брать строки. И в каждом потоке будет уникальная строка из этого списка.
 

Geka1989

Client
Регистрация
17.12.2016
Сообщения
184
Благодарностей
23
Баллы
18
Так создайте физический список файлов перед запуском шаблона. А в шаблоне этот файл прикрепите к списку, с которого с удалением будете брать строки. И в каждом потоке будет уникальная строка из этого списка.
Шаблон работает в два этапа, создает файлы, затем заливает, получать отдельно список файлов не совсем удобно
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
тогда перед созданием списка файлов сделайте проверку на наличие этого файла зеновским кубиком. Если файла нет, то создаем его. Если есть, значит какой то поток уже успел его создать, и тогда мы пропускаем шаг создания. Сработает при условии что там не сотни тысяч файлов и создания файла-списка занимает не больше секунды. А иначе надо усовершенствовать алгоритм.
 
  • Спасибо
Реакции: Geka1989

Geka1989

Client
Регистрация
17.12.2016
Сообщения
184
Благодарностей
23
Баллы
18
тогда перед созданием списка файлов сделайте проверку на наличие этого файла зеновским кубиком. Если файла нет, то создаем его. Если есть, значит какой то поток уже успел его создать, и тогда мы пропускаем шаг создания. Сработает при условии что там не сотни тысяч файлов и создания файла-списка занимает не больше секунды. А иначе надо усовершенствовать алгоритм.
Если потоки быстро стартанут то есть вероятность что какое то количество пролетит мимо проверки и создаст его снова, но мысль интересная, покопаю в этом направлении, спасибо!
 

Meteorburn

Client
Регистрация
23.05.2016
Сообщения
1 472
Благодарностей
575
Баллы
113
Если потоки быстро стартанут то есть вероятность что какое то количество пролетит мимо проверки и создаст его снова, но мысль интересная, покопаю в этом направлении, спасибо!
У меня подобное реализовано через глобальные переменные.
1 поток инициализирует глобальную переменную и присваивает ей значение - 1. Если второй поток видит, что значение глобальной переменной - 1, значит он ждет в цикле какое-то время.

Потом первый поток создает все необходимые файлы и устанавливает значение переменной - "done".

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

Можно еще реализовать через проверку на количество работающих потоков.
 
  • Спасибо
Реакции: Geka1989

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