PHP は QPM を使用してマルチプロセス並列タスク ハンドラーを実装します
PHP を使用して次のシナリオを実装することを検討してください。 クロールされたサイトの URL リストがキューに保存されており、バックグラウンド プログラムがキューを読み取り、それを子プロセスに転送して HTML をキャプチャし、ファイルに保存します。 効率を向上させるために、複数のタスクを並行して実行できますが、過度のマシン負荷を避けるために、並列タスクの最大数は制限されています (テストの便宜上、この数を 3 に設定します)。キューからENDマークを取り出し、プログラムの実行を終了します。
このシナリオは、QPM の Supervisor::taskFactoryMode() を使用して実装されており、非常に簡単です。
QPM の正式名は、Quick Process Management Module for PHP です。PHP は強力な Web 開発言語であるため、PHP を使用して堅牢なコマンド ライン (CLI) プログラムやデーモン プログラムを開発できることを忘れがちです。 デーモン プログラムを作成すると、必然的にさまざまなプロセス管理が必要になります。 QPM は、プロセス管理を簡素化するために正式に開発されたクラス ライブラリです。 QPM のプロジェクト アドレスは次のとおりです: https://github.com/Comos/qpm
テスト環境を簡素化するために、テキスト ファイルを使用してキュー データをシミュレートできます。完全なサンプル ファイルはこちらを参照してください: Spider_task_factory_data.txt
http://news.sina.com.cn/http://news.ifeng.com/http://news.163.com/http://news.sohu.com/http://ent.sina.com.cn/http://ent.ifeng.com/...END
以下は、Supervisor をアセンブルして実行するためのコード スニペットです。完全な例については、次を参照してください: Spider_task_factory.php
//如果没有从参数指定输入,把spider_task_factory_data.txt作为数据源$input = isset($argv[1]) ? $argv[1] : __DIR__.'/spider_task_factory_data.txt';$spiderTaskFactory = new SpiderTaskFactory($input);$config = [ //指定taskFactory对象和工厂方法 'factoryMethod'=>[$spiderTaskFactory, 'fetchTask'], //指定最大并发数量为3 'quantity' => 3,];//启动Supervisorqpm\supervisor\Supervisor::taskFactoryMode($config)->start();
/** * 任务工厂,必须实现 fetchTask方法。 * 该方法正常返回 * */class SpiderTaskFactory {private $_fh;public function __construct($input) { $this->_input = $input; $this->_fh = fopen($input, 'r'); if ($this->_fh === false) { throw new Exception('fopen failed:'.$input); }}public function fetchTask() { while (true) { if (feof($this->_fh)) { throw new qpm\supervisor\StopSignal(); } $line = trim(fgets($this->_fh)); if ($line == 'END') { throw new qpm\supervisor\StopSignal(); } if (empty($line)) { continue; } break; } return new SpiderTask($line);}}
/** * 在子进程中执行任务的类 * 必须实现 qpm\process\Runnable 接口 */class SpiderTask implements qpm\process\Runnable {private $_target;public function __construct($target) { $this->_target = $target;}//在子进程中执行的部分public function run() { $r = @file_get_contents($this->_target); if ($r===false) { throw new Exception('fail to crawl url:'.$this->_target); } file_put_contents($this->getLocalFilename(), $r); }private function getLocalFilename() { $filename = str_replace('/', '~', $this->_target); $filename = str_replace(':', '_', $filename); $filename = $filename.'-'.date('YmdHis'); return __DIR__.'/_spider/'.$filename.'.html';}}

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











多くの場合、キーワードと追跡パラメーターで散らかった長いURLは、訪問者を阻止できます。 URL短縮スクリプトはソリューションを提供し、ソーシャルメディアやその他のプラットフォームに最適な簡潔なリンクを作成します。 これらのスクリプトは、個々のWebサイトにとって価値があります

2012年のFacebookによる有名な買収に続いて、Instagramはサードパーティの使用のために2セットのAPIを採用しました。これらはInstagramグラフAPIとInstagram Basic Display APIです。

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

2025 PHP Landscape Surveyは、現在のPHP開発動向を調査しています。 開発者や企業に洞察を提供することを目的とした、フレームワークの使用、展開方法、および課題を調査します。 この調査では、現代のPHP Versioの成長が予想されています
