curl — параллельное выполнение кода в PHP для минимизации времени выполнения

Начальное состояние: У меня есть код, написанный в php файле. Первоначально я выполнял код, это занимало 30 секунд, чтобы выполнить. В этом файле код вызывался 5 раз.

Что будет дальше: Позвольте, если мне нужно выполнить этот код 50 раз, то это займет 300 секунд за одно выполнение в browser.next в течение 500 раз 3000 секунд. Так что это последовательное выполнение кода.

Что мне нужно: мне нужно выполнить этот код параллельно. как несколько экземпляров. Поэтому я хотел бы минимизировать время выполнения, чтобы пользователь не ждал так долго.

Что я сделал: я использовал PHP CURL для выполнения этого кода параллельно. Я вызывал этот файл несколько раз, чтобы минимизировать время выполнения.

Так я хочу знать то есть этот метод правильный. Сколько CURL я могу выполнить и сколько ресурсов это требует. Нужен лучший метод, как я могу выполнить этот код параллельно с учебником.

любая помощь будет благодарна.

2

Решение

Вероятно, самый простой вариант без изменения вашего кода (слишком много), однако, будет вызывать 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), которые позволяют вам делать то, что вы хотите. Потребует некоторого редактирования кода (и установки, возможно), но делает то, что вы просите.

0

Другие решения

PHP curl достаточно низок, чтобы не беспокоиться об этом. Если вы можете совершать петлевые вызовы к ферме серверов через балансировщик нагрузки, это хороший вариант использования curl. Я также использовал pcntl_fork() для параллелизма одного хоста, но его сложнее настроить. Я написал классы, основанные на обоих; смотри мою php lib на https://github.com/andrasq/quicklib для идей (или просто заимствовать код, это с открытым исходным кодом)

0

Подумайте об использовании Gearman. Документация :
http://php.net/manual/en/book.gearman.php

0
По вопросам рекламы [email protected]