• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Многопоточность в php

SolomonRei

Green Team
27.08.2018
24
1
BIT
0
Добрый день. Столкнулся с интересной задачей. Заказчику нужно организовать многопоточность средствами php. Логика работы скрипта заключается в том, что нужно послать большое кол-во запрос за короткий срок, примерно минуты 2. Запрос свыше 20000. Единственное, что тут приходит на ум - многопоточность, но php не создан для этого.
Погуглив просторы интернета, наткнулся на Pthreads.
Pthreads - расширение ,которое необходимо установить в сборку php с ZTS режимом(Zend Thread Safety).
Естественно речь идет о vps или vds, так как придется свою сборку делать. Но это не главная проблема.

Проблема в том, что Pthreads поддерживает запуск CLI(Command Line Interface), только с консоли, то есть с веб связать нереально, там прямо пишут это в инструкции. А в вебе используется CGI.

Подскажите, как можно связать CGI и CLI, чтобы организовать многопоточность. Единственное, что мне пришло в голову - запускать скрипты CLI через метод exec().В принципе должно получится.
Может быть у кого-то есть другие идеи. Или кто-то сталкивался с этим. Подскажите пожалуйста
 

Nullka

New member
28.10.2019
3
0
BIT
0
Добрый день, для некоторых задач подойдет вариант создания пула задач (можно использовать любую очередь, или написать свой на основе базы). Далее пишем скрипт который раз в минуту по крону будет проверять есть ли задания и запускать исполнения из консоли. Т.е. из веб-интерфейса пишем в пул, дальше пул дергаем раз в минуту и если есть открытая задача то выполняем. Если сразу из веб интерфейса дергать консоль, то при долгом выполнении скрипта мы не увидим результата + фоновое выполнение может прерваться, когда упадет коннект с сервером по таймауту.
 

SolomonRei

Green Team
27.08.2018
24
1
BIT
0
Получается мне надо ставить Nginx & php-fpm? И к этому еще доставлять Pthreads с php ZTS
так получается?
 

Nullka

New member
28.10.2019
3
0
BIT
0
Ну стек может быть и таким. Но никто не мешает тебе поставить apache + php (естественное с cli версией включающей ZTS).
Ты не пробовал multicurl для этой цели? Если у тебя быстрые запросы, то вполне можно уложить 20к запросов в 2 минуты
 

SolomonRei

Green Team
27.08.2018
24
1
BIT
0
Про curl знаю, но не пробовал. Там скрипт это целая система продвижения инстаграмма. Куча запросов к инсте через апи. Классы,методы,унаследования т.д. Он написан на mvc паттерне. В общем разработчик все что можно было, запихнул в ооп и теперь разбирайся сам.

Ситуация такая. Там стоит сейчас крон, который каждую минуту вызывает скрипт. Это скрипт берет данные из бд, то есть аккаунты для работы. В цикле перебирает это все и вызывает контроллер, в котором уже свои методы по обращению к инсте.

То есть тут не просто скрипт, а целая система. И написать мультикурл не понятно как.
Из-за этого решил поставить воркеры на сам вызов контроллера, чтобы в цикле каждый раз новый поток создавался. А не ждать, пока тот выполнится и перейти к следующему. Что скажешь?
 

Nullka

New member
28.10.2019
3
0
BIT
0
Тут получается на каждый акк отдельная прокся будет (ну или не на каждый, а скажем на каждые 5, хз какое сейчас актуальное соотношение), т.е. еще уйдет время на создание подключения к прокси, если у вас не самоцель массово блочить инста аккаунты конечно =) Это я к тому что скорость обозначенную в первом сообщении скорее всего не получиться выжать на 1 сервере.
По теме, я себе так же это представляю. Создаем грубо говоря 100 потоков и пусть шарашат. Единственное, хотя бы на момент теста сделай логирование каждого потока, ибо почти наверняка без проблем не обойдется.
 

SolomonRei

Green Team
27.08.2018
24
1
BIT
0
Ок, спасибо за помощь) Прокси уже есть в скрипте, и с крипт отлично отрабатывает, но только в одном потоке, то есть там очередь создается и все очень долго это происходит.
 

Sombrero

Green Team
23.09.2019
67
4
BIT
0
Подозреваю что ноги вопроса растут из либы mgp25 . Отсюда и обязательные требования к php .
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!