コード内の遅いタスクおよび/またはリソースを集中的に使用するタスク:遅延タスク、キュー、手動処理を伴うタスク

eugeniozのリクエストに応じて公開します。

大規模なWebプロジェクトで作業する場合、現在必要のないタスクがありますが、それらは重要であり、完了する必要があります。 このようなアクションは、コード内で直接実行できますが、繰り返し実行できません。 しかし、私の意見では、メインタスクコードの外部でこれをすぐに行う方がよいと考えられます。これにより、コードがアンロードされ、実行の均一性が実現されます。

ここでの一般的なアプローチは、実行キューと遅延タスクを作成することです。 主な例:サードパーティのサイトからのデータの送信/検証。 リセラーパネルからメインサイトへのデータ転送。 自動的に完了できないタスクの手動処理への転送。

タスクを分散する手段として、PHPクラスTasksに注目します。

クラスコード

そして今、説明のために。

タスクは、一時ディレクトリにファイルとして保存されます。 クラウンで実行されているスクリプトは、タスクのリストを受け取り、各タスクに対してexecuteメソッドを実行します。 正常に実行されると、タスクファイルは削除されます。 クラスは、MySQLデータベースで動作するように作り直すことができます。 実行をブロックしないDELAYED INSERTを実行できるため、これは理にかなっていますが、信頼性の向上によりファイルシステムが使用されるようになりました。

タスクは、ロジックを変更せずにアルゴリズムの通常の要素として作成されます。

たとえば、次のとおりです。
$q_upd=update_order_data($params);
になっています
$q_upd=tasks::create("update_order_data", 'api', 0, $params);

タスクには優先度レベルがあります。これにより、cronスクリプトが実行されるたびに「重要」の順序でタスクを実行することができます。 優先度パラメーターが大きいほど、タスクはさらに遅延します。

Cronスクリプトオプション: code

コードのTasksクラスの隣にtask_handlersクラスがあります-task_handlersにハンドラーを作成できます。
このクラスの関数の名前は、タスクの作成時に設定できるハンドラーの名前です。 「mysql」および「mail」ハンドラーは例として示されています-それらのコードは小さいため、説明に便利です。

コードの作成者はeugeniozで、MITライセンスの下でコードを使用できます。

このクラスの単純さと軽さにもかかわらず、アルゴリズムのロジックを変更せずに非常に効率的に負荷を分散できます。

もう一度アプリケーションの例:


eugenioz :建設的な批判、質問、改善のための提案に注意深く耳を傾けます。

Source: https://habr.com/ru/post/J95984/


All Articles