Многопоточный проект "теряет" данные из списка

morpheus93

Client
Регистрация
25.01.2012
Сообщения
1 058
Благодарностей
244
Баллы
63
Я запускаю проект в несколько потоков, используя в качестве первого шага список с прокси ("Список - привязка к файлу").

В "Good End" и "Bad End" я устанавливаю возврат взятой строки прокси в список и, следовательно, в связанный .txt файл.

Но через некоторое время во входном файле, который связан со списком, становится все меньше и меньше прокси. Поэтому они как-то теряются во время выполнения проекта, например, в 10 потоках.

Посоветуйте, как исправить эту "потерю данных"?

Спасибо.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 721
Баллы
113
никогда такого не было и снова здравствуйте :bk:
в общем смотри, мое мнение такое, что работа со списками через кубик крайне сомнительное занятие, а уж помещать возврат строки в конец шаблона, это вообще зашквар. не будем говорить что произойдет с данными если вдруг зенка вылетет, если даже в обычном режиме данные пропадают... и поверь, не только у тебя.
конечно в скором времени появятся админы/разработчики и будут утверждать что со списками все хорошо... но верить им наверно не стоит... им же надо продавать программу, а нам на ней работать.
поэтому, бросай нафиг эти списки и переходи на любую базу данных, локальную или сетевую, главное на SQL запросах с подтверждением транзакций. и забудешь про пропажу данных как про страшный сон ;-)
 
  • Спасибо
Реакции: morpheus93

White trash

Client
Регистрация
09.06.2014
Сообщения
835
Благодарностей
364
Баллы
63
Да, в конец шаблона желательно добавлять паузу секунд на десять.
 
  • Спасибо
Реакции: morpheus93

Besedi

Client
Регистрация
04.03.2019
Сообщения
234
Благодарностей
41
Баллы
28
Феникс вам все правильно написал, только использовав SQL решите свои задачи. Вот, советую ознакомится с пессимистическими и оптимистическими блокировками: https://stackoverflow.com/a/129397
 
  • Спасибо
Реакции: morpheus93

morpheus93

Client
Регистрация
25.01.2012
Сообщения
1 058
Благодарностей
244
Баллы
63
Спасибо вам, ребята, за вашу ценную помощь! Обычно я использую MySQL для всех данных в проектах. Но так как в этом проекте мне нужна только пара прокси, я решил попробовать этот список.
 

Besedi

Client
Регистрация
04.03.2019
Сообщения
234
Благодарностей
41
Баллы
28
Спасибо вам, ребята, за вашу ценную помощь! Обычно я использую MySQL для всех данных в проектах. Но так как в этом проекте мне нужна только пара прокси, я решил попробовать этот список.
в 10 потоках пару прокси?) У меня в среднем работают 1-4 потока на проект и на каждом все через реляционную базу данных. То ли это перфекционизм, то ли не знаю, меня прям "каребит" если я думаю что мог что-то упустить. Либо же если ценность итерации высокая и ты можешь поиметь убыток или недозаработать, то лучше перестраховаться по 3 раза.
 

kagorec

Client
Регистрация
24.08.2013
Сообщения
995
Благодарностей
542
Баллы
93
Спасибо вам, ребята, за вашу ценную помощь! Обычно я использую MySQL для всех данных в проектах. Но так как в этом проекте мне нужна только пара прокси, я решил попробовать этот список.
В конкурсе есть подробные статьи как работать с SQLite
 
  • Спасибо
Реакции: morpheus93

morpheus93

Client
Регистрация
25.01.2012
Сообщения
1 058
Благодарностей
244
Баллы
63
Да, SQLite тоже кажется удобным решением. Спасибо за подсказку.
 

morpheus93

Client
Регистрация
25.01.2012
Сообщения
1 058
Благодарностей
244
Баллы
63
в 10 потоках пару прокси?) У меня в среднем работают 1-4 потока на проект и на каждом все через реляционную базу данных. То ли это перфекционизм, то ли не знаю, меня прям "каребит" если я думаю что мог что-то упустить. Либо же если ценность итерации высокая и ты можешь поиметь убыток или недозаработать, то лучше перестраховаться по 3 раза.
Это бот, который параллельно отвечает на входящие сообщения с разных аккаунтов. Я использую метод "Multi-VPN" из одной из статей здесь с 10 vpn соединениями на localhost. Так что мне просто нужно 127.0.0.2, 127.0.0.3 и так далее в качестве прокси, и если поток завершен, следующий аккаунт должен использовать новый доступный vpn адаптер с новым соединением сервера. Вот почему он использует только "10 прокси", но работает в "многопоточном режиме" ;-)
 

morpheus93

Client
Регистрация
25.01.2012
Сообщения
1 058
Благодарностей
244
Баллы
63
Может быть, синхронизация также может быть достигнута с помощью глобальных переменных? То есть 1 глобальная переменная (типа массива) и каждый поток берет один прокси при старте и отдает его по завершении... Но, возможно, тогда это будет та же проблема, что и со списками, когда ZP падает?
 

Besedi

Client
Регистрация
04.03.2019
Сообщения
234
Благодарностей
41
Баллы
28
Может быть, синхронизация также может быть достигнута с помощью глобальных переменных? То есть 1 глобальная переменная (типа массива) и каждый поток берет один прокси при старте и отдает его по завершении... Но, возможно, тогда это будет та же проблема, что и со списками, когда ZP падает?
А разве такое возможно? Разве каждый инстанс не байткод с уникальным хэшем и своим неймспейс? Я хочу сказать, что инстансы не могут иметь общую переменную для общего использования. Хотя мои знания С# Оставляют желать лучшего, могу ошибаться..
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 721
Баллы
113
А разве такое возможно? Разве каждый инстанс не байткод с уникальным хэшем и своим неймспейс? Я хочу сказать, что инстансы не могут иметь общую переменную для общего использования. Хотя мои знания С# Оставляют желать лучшего, могу ошибаться..
а при чем тут C# ? речь про стандартный функционал зенки вообще-то...

104313
 

discus

Client
Регистрация
21.09.2020
Сообщения
87
Благодарностей
44
Баллы
18
Может быть, синхронизация также может быть достигнута с помощью глобальных переменных? То есть 1 глобальная переменная (типа массива) и каждый поток берет один прокси при старте и отдает его по завершении... Но, возможно, тогда это будет та же проблема, что и со списками, когда ZP падает?
Прикладываю пример реализации многопотока с глобальной переменной, есть запись ГП в текстовый файл "work" из которого ГП подхватывается после падения ZP. Правильнее будет не удалять строки, а читать строки с прокси из файла по номеру ГП. Но ZP может упасть не успев сохранить список с ГП в текстовый файл "work", т.к. списки сохраняются в течении несколько секунд. Но с MySQL конечно еще лучше.
 

Вложения

  • Спасибо
Реакции: lx2003 и morpheus93

morpheus93

Client
Регистрация
25.01.2012
Сообщения
1 058
Благодарностей
244
Баллы
63
Большое спасибо, что поделились своим решением. Я также сделал некоторый подход с глобальными переменными. Давайте сравним :-)
 

lx2003

Client
Регистрация
15.02.2021
Сообщения
611
Благодарностей
145
Баллы
43
Прикладываю пример реализации многопотока с глобальной переменной, есть запись ГП в текстовый файл "work" из которого ГП подхватывается после падения ZP. Правильнее будет не удалять строки, а читать строки с прокси из файла по номеру ГП. Но ZP может упасть не успев сохранить список с ГП в текстовый файл "work", т.к. списки сохраняются в течении несколько секунд. Но с MySQL конечно еще лучше.
Тема обсуждалась давно, но спрошу. Может использовать вместо глобальной переменной сохранение позиции строки списка в файл? Или, может, после сбоя искать ту запись, которая использовалась и начинать с нее или следующей?
 

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