Начальное состояние: У меня есть код, написанный в php файле. Первоначально я выполнял код, это занимало 30 секунд, чтобы выполнить. В этом файле код вызывался 5 раз.
Что будет дальше: Позвольте, если мне нужно выполнить этот код 50 раз, то это займет 300 секунд за одно выполнение в browser.next в течение 500 раз 3000 секунд. Так что это последовательное выполнение кода.
Что мне нужно: мне нужно выполнить этот код параллельно. как несколько экземпляров. Поэтому я хотел бы минимизировать время выполнения, чтобы пользователь не ждал так долго.
Что я сделал: я использовал PHP CURL для выполнения этого кода параллельно. Я вызывал этот файл несколько раз, чтобы минимизировать время выполнения.
Так я хочу знать то есть этот метод правильный. Сколько CURL я могу выполнить и сколько ресурсов это требует. Нужен лучший метод, как я могу выполнить этот код параллельно с учебником.
любая помощь будет благодарна.
Вероятно, самый простой вариант без изменения вашего кода (слишком много), однако, будет вызывать PHP через командную строку, а не CURL. Это сокращает издержки APACHE (как по памяти, так и по скорости), работе в сети и т. Д. Кроме того, Curl не является переносимым вариантом, поскольку некоторые серверы не могут видеть себя (в терминах сети).
$process1 = popen('php myfile.php [parameters]');
$process2 = popen('php myfile.php [parameters]');
// get response from children : you can loop until all completed
$response1 = stream_get_contents($process1);
$response2 = stream_get_contents($process2);
Вам нужно будет удалить любую ссылку на переменные, добавленные apache в $ _SERVER, и заменить $ _GET ссылками argv / argc. И то и другое иначе должно работать.
Но лучшим решением, вероятно, будет pThreads (http://php.net/manual/en/book.pthreads.php), которые позволяют вам делать то, что вы хотите. Потребует некоторого редактирования кода (и установки, возможно), но делает то, что вы просите.
PHP curl достаточно низок, чтобы не беспокоиться об этом. Если вы можете совершать петлевые вызовы к ферме серверов через балансировщик нагрузки, это хороший вариант использования curl. Я также использовал pcntl_fork()
для параллелизма одного хоста, но его сложнее настроить. Я написал классы, основанные на обоих; смотри мою php lib на https://github.com/andrasq/quicklib для идей (или просто заимствовать код, это с открытым исходным кодом)
Подумайте об использовании Gearman. Документация :
http://php.net/manual/en/book.gearman.php