Управление потоками как?

Enduro

Client
Регистрация
18.12.2013
Сообщения
4
Благодарностей
1
Баллы
0
Что-то подзадолбался я пытаясь делать многопоточный шаблон. Получается полная лажа. Управления потоками нет вообще, ни паузу между потоками сделать, ни запустить при выполнении определенных условий, вообще не сделать с ними ничего.

К примеру простая задача, в шаблоне нужно выполнять операции над файлами и директориями. Ставлю условие if где проверяется глобальная переменная !=1, далее, следующим шагом устанавливаю эту глобальную переменную равной единице. Соответственно, если !=1 то поток должен идти на операции работы с файлами и папками, все остальные потоки должны завернуться на таймаут. В итоге ничего не работает. Все дело, насколько я понял, в том что здесь 2 шага и пока первый поток выставляет переменную, еще несколько потоков успевают проскочить вместе с ним, до проверки условия. Естественно, когда дальше все эти несколько потоков пытаются менять в файлах и папках что-то одновременно, выскакивает ошибка доступа, все, шаблон нерабочий.

Получается что zennoposter это не многопоточная программа? Потому что запуск кучи проектов одновременно, под видом потоков, без возможности управления потоками из самих проектов - это не многопоточность а фигня. Или я что-то не понимаю и делаю не так? Как вообще народ справляется с подобными проблемами? Разбивать из-за этого шаблон на 10-20 частей и пихать их в планировщик - не вариант, тем более планировщика нормального тоже нет.
 
  • Спасибо
Реакции: avtostopshik

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Зенно, имхо, впервую очередь для автоматизации задач в глубине интернетов)
Меня тут щас снова заплюют, но я бы на вашем месте забил на эти глобальные переменные и сделал бы фаилик под кеш... типа проект приходит, берет первую строку из фаила с удалением и работает с ней, другой проект приходит, а нету первой строки... ну значит не судьба - и дет куда то дальше. Ибо в списках лок работает нормально, я по крайней мере ни разу не накалывался)
 
  • Спасибо
Реакции: смм24 и Enduro

Enduro

Client
Регистрация
18.12.2013
Сообщения
4
Благодарностей
1
Баллы
0
Так это понятно, я и так использую в проекте списки привязанные к файлам и вижу что потоки могут забирать каждый по строке, т.к. здесь выполняется всего 1 действие - просто взять строку, поэтому другой поток не может влезть в это действие.

Но мое разочарование в том и заключается что я столкнулся с тем, что в моем случае, множество однопоточных действий должно быть вклинено в многопоточный проект ... т.е. к примеру присутствует такой момент когда диру с 10 файлами надо скопировать в 5 других дир, чтоб потом использовать файлы из каждой директории по разному, в разных списках... И потом, подобных действий, которые нужно выполнять в 1 поток очень много, например скачивание почты, если долбить фришный ящик в 180 потоков, то можно схлопотать моментальный бан аккаунта. Выносить из-за этого 1 макрос по скачиванию писем в отдельный шаблон, тем самым делая из одного шаблона - 3 (так как после скачивания в 1 поток, мне нужно выполнить активацию в 180)? Вынести работу с дирами и файлами - вообще 9 шаблонов получится, а дальше - больше. Даже если часть действий в батники вынести, то как сделать так, чтобы их запускал всего лишь один поток а не все?

Был бы не вопрос делать по 20-30 шабов для одного проекта и назначать очередность их выполнения и кол-во потоков для каждого шаба... Но только в том случае если бы был нормальный планировщик, да еще чтоб можно было всю эту последовательность действий также сохранять в отдельный проект и иметь возможность всегда его загрузить... Но ведь этого, я так понимаю нет?

Конечно, я еще не полностью разобрался с программой, 1 день всего изучаю после приобретения, но то что я увидел мне не нравится... особенно после того как nuaru, на другом форуме, в споре с автором human emulator давил именно на то что у конкурентов псевдомногопоточность, а в zennoposter самая что ни на есть многопоточность настоящая... Вот я пока не вижу различий между 10 запущенными одновременно imacros в десятке профилей FF. И 10 потоками zennoposter-а, потоками которые не поддаются управлению.

В общем, я в печали. Уже раза 3 шаблон переделываю и не вижу конца и края, постоянно косяки какие-то невыполнимые рисуются. Хотя, еще помучаю, может быть это я дурак и чего-то не понимаю... И все можно сделать, найти пути решения... Я просто может быть не разобрался еще во всем спектре скрытых возможностей zennoposter-а. Такое тоже возможно.

И я не жалуюсь) Уверен что в любом, случае применение этому софту найдется в самых простейших действиях автоматизации. Даже если, все-таки именно эту проблему побороть не получится.
 

Enduro

Client
Регистрация
18.12.2013
Сообщения
4
Благодарностей
1
Баллы
0
Lexicon, только на следующий день понял что ты имел ввиду вообще IF убрать, и неуспешное взятие из списка завернуть.
Спасибище тебе огромное. Так вроде бы работает. Уже что-то.

Еще бы найти способ временно останавливать потоки и запускать заново, но не по таймауту, а по определенному действию первого потока ) А может костылем, отправить их на брут емайлов) или еще куда-нибудь...
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 714
Баллы
113
Еще бы найти способ временно останавливать потоки и запускать заново, но не по таймауту, а по определенному действию первого потока )
Можно выполнением батника в проекте.
батник можно сгенерировать правым кликом на шаблоне в постере.
 

nuaru

Main Administrator
Команда форума
Регистрация
14.01.2009
Сообщения
3 645
Благодарностей
2 513
Баллы
113
Enduro, мы создавали программу не для программистов. Да и многие программисты не умею мыслить в контексте нескольких потоков, что уж тут говорить про простых пользователей.
В ZennoPoster потоки независимы и друг из друга не управляются, они просто выполняют какое-то действие много раз. Вы указываете проект и сколько раз его делать, он выполняется в несколько потоков не мешающих друг другу.
Если вам нужно управлять самими потоками, а не только внутри потоков, вам нужен CodeCreator, там есть такие функции. Но это уже будет не просто.
Я бы посоветовал вам получше изучить шедулер, там будет много полезных для вас функций, они, скорее всего, решат ваши проблемы. Например, там есть функции запуска проекта, после того, как отработает другой указанный проект, т.е. если один поток делает что-то для десятка других, то лучше его запускать таким способом, чтобы остальные начали работать после того как он закончит и т.д.

Еще кое что. Лучше будет, если вы опишите свою изначальную проблему - что конкретно вы пытаетесь делать. Потому что, например, вы пишете про частое обращение к почте в 180 потоков. Но такого у нас не будет. Потоки работают с системой приема почты, а она уже сама разбирается когда лезть за письмами и соблюдает таймауты. Вы пытаетесь решить проблемы, которые уже давно решены и не должны вас беспокоить.
 
  • Спасибо
Реакции: avtostopshik и Enduro

Enduro

Client
Регистрация
18.12.2013
Сообщения
4
Благодарностей
1
Баллы
0
rostonix, спасибо, посмотрю) упустил как-то эту опцию.

nuaru, т.е. если я скачиваю почту макросом C# то мне не надо потоки заранее останавливать? Сейчас я делаю по совету Lexicon. Сделал счетчик в виде файла с одной строкой привязанного к списку, первый поток проходя через этот список забирает строку и идет дальше на скачивание почты, а остальные потоки заворачиваются на другие задачи. Потом, файл счетчика перезаписывается. Мало того, я теперь могу дальше отщеплять потоки таким образом, если понадобится опять выполнить какое-то действие в 1 поток. Например, я отделяю 1 поток когда мне нужно произвести операции с файлом, например скопировать что-то, потому что иначе каждый поток будет копировать по очереди)

Да и почту не просто так скачивать приходится, нужны дополнительные проверки, таймауты и повторные попытки скачивания, некоторые email сервера не хотят отдавать сразу все 30-50к писем за 1 раз ... Поэтому скачивание почты у меня занимает несколько блоков в циклах, помимо самого макроса на C#. И собственно, если сразу несколько потоков попадут в этот узел и начнут одновременно пытаться что-то там скачивать, ничего хорошего из этого не получится. Я так думал, когда стал огород городить с разделением потоков внутри шаблона.

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

В любом случае спасибо за ответы, я уже сейчас вижу что просто многого не знаю и нужно перестроить мозг для работы с этой программой и все получится. Непривычно просто многое, даже когда нет многообразия блоков типа for и т.п., а для счетчика рекомендован if... и уж тем более сложно догадаться самому, что как счетчик можно использовать взятие строк из списка) Но уже начинает получаться мыслить в разрезе Zenno )

С CodeCreator пока и не начинал разбираться, еще раз сорри, что поторопился с выводами)
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Слава мне!
А по поводу for - я тож поначалу городил огороды с инициализацией счетчика, его увеличением, проверке по размеру коллекции... потом забил
беру строку с удалением - делаю то что надо, как только строки кончились - по бед-энду выход из цикла))) по большому счету весь цикл внутри экшена со взятием строки с удалением и сныкан)))
 

nuaru

Main Administrator
Команда форума
Регистрация
14.01.2009
Сообщения
3 645
Благодарностей
2 513
Баллы
113
Ладно, я рад что вы разобрались.

nuaru, т.е. если я скачиваю почту макросом C# то мне не надо потоки заранее останавливать?
Через макросы вы тоже обращаетесь в систему приема писем, она не даст обратиться к почтовому серверу много раз или во много потоков.

For мы со временем сделаем.
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
А можно тогда еще попросить что нибудь типа вызова функции? просто если нарываешься на капчу - нужно после ввода вернуться на определенное место, а не на начало цепи. ПРиходится или всю цепочку следования увешивать идентичными полипами проверки на капчу, проверки наличия текста и т.п. и было бы здорово эти 3-8 блоков запихнуть в один и его потом уже везде втыкать. Но For конечно было бы приоритетнее)))))
 

nuaru

Main Administrator
Команда форума
Регистрация
14.01.2009
Сообщения
3 645
Благодарностей
2 513
Баллы
113
Да, такое тоже в планах есть.
 

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