Если делаете через http клиент, то получите содержимое ответа через одноимённое действие, после чего через if поставьте условие если переменная ответа соответствует нужной Вам.
Вопрос по многопоточности. Запуск потока после сбора нужных данных
-
Всем привет.
Есть пара сайтов. На каждом из них есть нужные комментарии, которые и парсятся. В итоге все они сохраняются в CSV файл, но они между собой связаны (по датам).
Выходит мне нужно, чтобы
- Скрипт запустился
- Первый поток начал парсить сайт N и записывать переменные
- Второй поток начал парсить сайт Y и записывать переменные
- Третий поток ждал, пока 1 и 2 соберут данные и уже тогда записал их все в нужном формате.
- Повторяется 100500 раз
Пробовал "номер потока", потом по "if thread_numbber == N", правда 3 поток выдает ошибку, переменных нет.
-
Скрипт полностью работает, если убрать потоки. Правда скорость выполнения больше, чем требуется.
В итоге выходит может быть ошибка в том, что перемены не глобальные? То есть, если я запускаю скрипт в 3 потока, то даже в этом случае, как мне 3 потока или в конце 2 (наверно так лучше, все равно нужно ждать окончания выполнения первых двух) сделать действие, запускаемое после отработки первых 2-ух?
-
@Krotiki Общая схема такова :) Создай глобальную переменную можно числовую. Поток после того как закончит парсинг увеличивает ее на 1. А остальные потоки ждут. Например сделай цикл while (true) в нем проверка если переменная меньше, чем надо то спим к примеру 10 сек, а если все ок то делаем break и идем дальше работать с данными.
-
@Krotiki Вот схематичный пример0_1520263584366_exempl.xml
-
чеёрт, чтобы многопоток, чтобы обмениваться данными между потоками глобальные переменные или ресурсы, чтобы в каждом потоке выполнять определенную функцию получать номер потока и в зависимости от номера потока выполнять соответствующую ему функцию, или ресурсы, если до запуска потоков нужнно чтото сделат/инициализировать онеапликейшен.
в это случае количество потоков должно сответствоывать количеству функций желательно. каждый поток может породить поток но лучше так не делать пока не прекрощаешь задовать вопросы. почему я должет смотреть десятки часов видео я конечно не буду а они нет -
@Krotiki said in Вопрос по многопоточности. Запуск потока после сбора нужных данных:
@ruzne Вам по письму и изложению еще долго до адекватности. Каждый мастер в своем деле.
Если кто-то готов помочь, напишите, я заплачу сколько потребуется, но мне нужно именно решение.
дак какой вопрос и такой.
в чем проблема, какие выдает ошибки, пример не работающего скрипта. -
@Krotiki У меня сейчас нет времени накидать скрипт именно по вашему вопросу, но такие вещи делаются успешно, и у меня есть пример скрипта для подобных ситуаций. Прямо вашу проблему он не решает, но точно демонстрирует пути решения.
Мой пост в англоязычной части форума: http://community.bablosoft.com/topic/3776/calling-different-function-in-threads/14# В нем скрипт.
Если нужно доп демо или сделать работу - пишите в личку.
-
@Krotiki said in Вопрос по многопоточности. Запуск потока после сбора нужных данных:
@Denis_krsk Не работает. Сделал все как в схеме, все равно ошибка. Плюс у меня 1 поток - 1 функция, я использовал определения номера потока через "==", а не больше/меньше, правда наврядли из-за этого
тебе советую использовать ресурсы для этой цели
-
@GamiD said in Вопрос по многопоточности. Запуск потока после сбора нужных данных:
@ruzne вроде он из списка берется же данные а глобальный список не возможно сделать ну может и можно через JS
почему?
создать список
наполнить список
создать глобальную переменную
->сюда
присвоить глобальной переменной список
при каждом изменении списка ->туда -
@ruzne, если точнее, то ещё
-читать глобальную переменную со списком в локальную
-изменять список
-сохранять локальный список в глобальную переменнуюПри этом не прерывать блокировку глобальной переменной асинхронными действиями, такими как вывод чего либо в лог.
-
@Antonio said in Вопрос по многопоточности. Запуск потока после сбора нужных данных:
@ruzne, если точнее, то ещё
-читать глобальную переменную со списком в локальную
-изменять список
-сохранять локальный список в глобальную переменнуюПри этом не прерывать блокировку глобальной переменной асинхронными действиями, такими как вывод чего либо в лог.
именно, и чтобы дожувать для большего понимания, нужно учитывать что копируется именно значение переменной, а не что было бы удобнее указатель, в новом потоке нужно коприровать обратно в обычную переменную, потому что то что можно сделать с глобальной переменной очень ограничено. И для бульдозеристов, несмотря на копирование переменные никак не связаны и именения одной не влечет измениня в другой
-
Спасибо за ответы. По ресурсам:
- Даже если я запишу все в ресурсы, как потом доставать из ресурса нужное значение? Все значения, которые у меня есть я выбираю посредством их имени в переменной, а в ресурсе это будет список и индентификация только по порядку возможна, верно? Скорее всего ресурсы не подойдут
- Получается надо сделать глобальными переменными, но тогда вопросы:
- "[[SAVE_ANSWER_1]] = answer;" - это сохраняется по коду данные answer в переменную SAVE_ANSWER_1, как ее глобальной в коде сделать в данном коде?
- Здесь как сделать "ANSWER_BACK_1" глобальной?

