вопрос про вызов функции в несколько потоков



  • Ситуация. Запускаю скрипт в 3 потока, в каждом запускаю функцию в 5 потоков. При этом мне надо передать в функции определенный параметр, который устанавливается в родительском потоке, в каждом потоке параметр разный. Каким образом это можно реализовать? То есть тупо передать параметр в подчинненую функцию.



  • @javer said in вопрос про вызов функции в несколько потоков:

    Ситуация. Запускаю скрипт в 3 потока, в каждом запускаю функцию в 5 потоков. При этом мне надо передать в функции определенный параметр, который устанавливается в родительском потоке, в каждом потоке параметр разный. Каким образом это можно реализовать? То есть тупо передать параметр в подчинненую функцию.

    Ну и фраза "подчинненую функцию".. Передача любой информации в другие потоки (вызванные любым способом) осуществляется через ресурс, либо через глобальную переменную. Лучше всего создать объект с необходимыми данными для каждой функции под каждый поток. Ещё можете установить 3 глобальных переменных и в зависимости от номера потока использовать определённую. Либо городить костыли через eval().



  • @fox уточню. Запускаю скрипт в 3 потока, в каждом получаю ресурс res+номерпотока и запускаю функцию в 5 потоков. В функции обрабатываю ресурс, который получил в потоке из которого функция была вызвана. Если предположить, что потоки создаются последовательно, то можно конечно в потоках верхнего уровня устанавливать глоб переменную и в каждой функции тупо копировать в локальную, но это если они создаются последовательно. Если через объект, то опять же каким образом понять в потоке где выполняется функция и что она вызвана из этого конкретного потока. Чет я совсем запутался...



  • @javer Мдаа. Одной запятой тут маловато будет.



  • @uraabk поправил



  • @javer said in вопрос про вызов функции в несколько потоков:

    Чет я совсем запутался...

    Не ты один :D

    Объясни ситуацию, которую решаешь.



  • @javer создай ресурс внутри главного потока и добавь туда то что нужно и получай с других потоков



  • @fox делаю парсинг сайта в настройках есть города. И есть категории товаров 5 штук. То есть для каждого города надо обойти 5 категорий. Я хочу парсить одновременно 3 города. Начинаю парсить в 3 потока получаю ресурс город,затем в каждом потоке начинаю пять потоков для парсинга категорий. Таким образом в функции надо передать значение города, который обрабатываю. Как вариант конечно можно сделать в одном ресурсе город+категорию и делать в лоб, но мне кажется это не есть хорошо.



  • @javer said in вопрос про вызов функции в несколько потоков:

    @fox делаю парсинг сайта в настройках есть города. И есть категории товаров 5 штук. То есть для каждого города надо обойти 5 категорий. Я хочу парсить одновременно 3 города. Начинаю парсить в 3 потока получаю ресурс город,затем в каждом потоке начинаю пять потоков для парсинга категорий. Таким образом в функции надо передать значение города, который обрабатываю. Как вариант конечно можно сделать в одном ресурсе город+категорию и делать в лоб, но мне кажется это не есть хорошо.

    А категории для каждого города свои?



  • @fox одинаковые



  • @javer said in вопрос про вызов функции в несколько потоков:

    @fox одинаковые

    Создавайте ресурс вида город;категория;товар и всё



  • @fox said in вопрос про вызов функции в несколько потоков:

    @javer said in вопрос про вызов функции в несколько потоков:

    @fox одинаковые

    Создавайте ресурс вида город;категория;товар и всё

    Такие удобно генерировать на старте прямо в басе, а потом готовый список распределять между потоками в отдельной функции.



  • Всем спасибо так и реализовал. Просто если бы был параметр который можно передать в поток было бы легче. А так получается многопоточность в одной плоскости, нельзя в зависимости от родительского потока реализовать различную функциональность подчинённых потоков.


Log in to reply