Heim >Backend-Entwicklung >PHP-Problem >So implementieren Sie Parallelität in PHP
So implementieren Sie Parallelität in PHP: Schreiben Sie zuerst die Anforderungsschnittstelle für diese Drittanbieterschnittstellen und verwenden Sie dann gleichzeitigen Code wie „Funktionsanforderung () {...}“. Implementieren Sie die Schleifenanforderungsschnittstelle. Das war's.
Empfohlen: „PHP-Video-Tutorial“
php, um Parallelität zu erreichen
Verwendungsszenarien
Wenn Sie über mehrere Schnittstellen von Drittanbietern verfügen, die Schleifenanforderungen benötigen, müssen Sie diese gleichzeitig verarbeiten , weil PHP Es ist ein einzelner Prozess, ein Programm, das nacheinander ausgeführt wird. Wenn eine Schnittstelle hängen bleibt, können die nachfolgenden Schnittstellen keine Anforderungen erhalten, oder die Wartezeit einer bestimmten Schnittstelle ist zu lang und die folgenden Schnittstellen müssen ebenfalls warten Daher muss jede der mehr als zehn Schnittstellen 1 Sekunde warten, während zehn Schnittstellen 10 Sekunden benötigen, um eine Anfrage abzuschließen. Zu diesem Zeitpunkt müssen Sie gleichzeitige Anforderungen verwenden
Nutzungsplan
Sie können zuerst die Anforderungsschnittstelle für einen bestimmten Drittanbieter schreiben und dann gleichzeitige Anforderungen für diese Drittanbieterschnittstellen verwenden
Gleichzeitiger Code
function request(){ $srart_time = microtime(TRUE); $webSiteUrl = 'http://test/'; /** * 结算 */ $alls = [ $webSiteUrl . "1.php", $webSiteUrl . "2.php", ]; //1 创建批处理cURL句柄 $chHandle = curl_multi_init(); $chArr = []; //2.创建多个cURL资源 foreach ($alls as $Url) { $chArr[$Url] = curl_init(); curl_setopt($chArr[$Url], CURLOPT_URL, $Url); curl_setopt($chArr[$Url], CURLOPT_RETURNTRANSFER, 1); curl_setopt($chArr[$Url], CURLOPT_TIMEOUT, 1); curl_multi_add_handle($chHandle, $chArr[$Url]); //2 增加句柄 } $active = null; /**常量 * CURLM_CALL_MULTI_PERFORM==-1 * // CURLM_OK == 0 **/ do { $mrc = curl_multi_exec($chHandle, $active); //3 执行批处理句柄 } while ($mrc == CURLM_CALL_MULTI_PERFORM); //4 //4 $active 为true,即$chHandle批处理之中还有$ch句柄正待处理,$mrc==CURLM_OK,即上一次$ch句柄的读取或写入已经执行完毕。 while ($active && $mrc == CURLM_OK) { if (curl_multi_select($chHandle) != CURLM_CALL_MULTI_PERFORM) {//$chHandle批处理中还有可执行的$ch句柄,curl_multi_select($chHandle) != -1程序退出阻塞状态。 do { $mrc = curl_multi_exec($chHandle, $active);//继续执行需要处理的$ch句柄。 } while ($mrc == CURLM_CALL_MULTI_PERFORM); } } foreach ($chArr as $k => $ch) { // $result[$k] = curl_multi_getcontent($ch); //5 获取句柄的返回值,不需要 curl_multi_remove_handle($chHandle, $ch);//6 将$chHandle中的句柄移除 } curl_multi_close($chHandle); //7 关闭全部句柄 $end_time = microtime(TRUE); echo sprintf("use time:%.3f s", $end_time - $srart_time); }
php zum Implementieren die Schleifenanforderungsschnittstelle
Diese Situation gilt für Programme, die innerhalb von 1S ausgeführt werden müssen. Wenn die Ausführungshäufigkeit 1S überschreitet, können Sie die geplanten Aufgaben von Linux direkt verwenden
// 无时间限制执行此程序 set_time_limit(0); // 设置默认时区 北京时间 date_default_timezone_set('PRC'); do { // 如果不存在 stop 文件,则程序停止 并且记录停止时间 if (!file_exists(dirname(__FILE__) . '/stop')) { $handle = fopen('./ceshi.log', 'a+'); fwrite($handle, '程序停止时间: ' . date('Y-m-d H:i:s') . "\n"); fclose($handle); exit(); } sleep(4); try { requestNewOpen(); } catch (Exception $exception) { $handle = fopen('./ceshi.log', 'a+'); fwrite($handle, 'catch : ' . $exception->getMessage() . "\n"); fclose($handle); } } while (true);
Das obige ist der detaillierte Inhalt vonSo implementieren Sie Parallelität in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!