問題タブ [pcntl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
258 参照

php - PHP: 作業を 5 つの並列タスクに分割する

外部 API を使用して、オブジェクトのデータを収集します。外部 API の構造上、必要なすべてのデータを取得するために、API のさまざまな部分に対して 5 つの個別の呼び出しを行う必要があります。

今まで順番にやっていたのですが、1 回の繰り返しで 5 秒ほどかかってしまい、複数のオブジェクトを扱うと待ち時間が長くなってしまいます。

私がやりたいのは、5 つのタスクを別々のプロセスにフォークし、それぞれが API に接続できるようにしてから、データセットのそれぞれの部分で配列を更新することです。

これを行うために pcntl_* 関数を見ていますが、効率的に行うためのベストプラクティスが何であるかはわかりません。

基本的に、オブジェクト データがリモート システムに存在することを確認して、5 つの関数を並列に呼び出したいと考えています。Func1 - func5、それぞれにオブジェクトの ID が渡され、プロセスが実行する必要がある 5 つの操作を示す何らかの方法があると思います。

proc がディスパッチされ、親は 5 つすべてが返されるまで待機し、それらの結果をグローバル配列に追加します。

その時点で、親は配列をリクエスタに送り返し、終了します。疑似コードでは、フォークを処理する関数は次のように機能すると考えています。

2 番目の引数は、子が実行する必要がある関数のある種の指標になります。これは、ファイル内の他の 4 つの関数であると考えています。

pcntl_* はこれに最適な方法ですか? これはコードにとって最適な構造でしょうか? どの実際の pcntl_* 呼び出しが必要ですか?

ありがとう。

0 投票する
1 に答える
320 参照

php - フォークされた PHP アプリケーションでの単一データベース接続

私のアプリケーションは pcntl_fork を使用して、接続されたルーターを監視する子プロセスを fork します。そこで、監視する必要があるマシンと同じ数の子プロセスに自分自身をフォークするクラス ConnectionManager をインスタンス化します。

シングルトン パターンを実装する必要がある外部 DB クラスを使用していますが、PHP はフォークされた子プロセスごとに新しいデータベース接続を構築する傾向があります。

この問題は、監視対象のルーターの数が増えると発生します。現在、約 56 台のマシンを監視しているため、アプリケーションは基盤となるデータベースに対して 56 の一意の mysql_connections を確立します。しかし、監視対象のマシンの数が増えると、私たちのアプローチは mysql_connection_limit と衝突します。

データベースは、各ルーターのトラフィックを格納するために使用されます。さらに、各子プロセスは、トラフィック データの最後の取得や実行許可などを含むランタイム データを保存します。

私の質問は、接続を 1 つだけ使用できるかどうかです。SQL ステートメントを収集し、クエリとしてデータベースに送信するキャッシュのようなもの。

しかし、上記のようなアプローチをどのように設計すればよいでしょうか?

さらに詳しい情報が必要な場合は、お問い合わせください。一部の抜粋を掲載します。

0 投票する
1 に答える
162 参照

php - PHPで親から終了した子プロセスを開始する方法

子プロセスが正常終了した場合やエラーで終了した場合に、親プロセスから子プロセスを起動しようとしています。pcntl_waitpid を使用すると、子プロセスからステータスを取得できるようになります。その状態で、同じスクリプトまたはプロセスをもう一度再開したい。ここに例があります。

どうすれば可能ですか?前もって感謝します。

0 投票する
1 に答える
1547 参照

php - apache 経由で pcntl 関数を実行する方法

PHP の pcntl_fork() を使用していましたが、CLI から実行すると正しい結果が得られることに気付きましたが、Apache から実行すると、「Undefined function pcntl_fork()」という例外が発生します。

はい、Apache経由で実行するのは安全ではないことを読みました!!

私の質問:

apache 経由で pcntl_fork() 実装を持つ php スクリプトを実行できる回避策はありますか?

そもそも、apache 経由で fork を実行するのは安全ではなく、CLI からは十分に安全なのはなぜですか?

0 投票する
1 に答える
1157 参照

php - Cakephp/php はバックグラウンドで関数を実行します

私はこれまでにこれを行ったことがないので、いくつかの入力が必要です。

コード (一般):

p>

「SomeComponent」にはいくつかの機能が含まれています。ユーザーがさらに続行している間、特定の関数「SomeFunction()」をバックグラウンドで起動する必要があります。
関数 "SomeComponent::SomeFunction()" は一連の pdf を生成し、データベースと対話し、Cakephp 固有のメソッド 'n'crap を使用してすべてを行います。ユーザーはデータベース経由で出力を受け取るため、関数自体から出力を取得する必要はありません。
したがって、どの方法でそれを行うことができるか、どの方法を使用するのが最適か、それぞれの欠点である/可能性のあるもの(特にセキュリティの問題)が明確ではありません。

わかりやすい方法ですべてを説明したことを願っています。ここまで読んでくれてありがとう。

0 投票する
0 に答える
884 参照

php - PHPUnit テストでの pcntl_fork() の使用

PHPUnit での pcntl_fork() の使用に問題があります。このコードを実行しています

そして、私は以下を取得しています:

しかし、私は次のようなものを期待しています (PHPUnit を使用せずにテストを実行したときに取得しました):

では、これは PHPUnit の予想される動作ですか? そして、それを修正する方法はありますか?

0 投票する
1 に答える
578 参照

php - フォーク後に親子がシグナルをキャッチしない

symfony 1.4 で PHP に奇妙な問題が発生しています

複数のワーカーを起動するタスクがあり、場合によってはすべてのワーカーを停止する必要があります (たとえば、デプロイ後)。

start-stop-daemon を使用してタスクを起動し、シグナル SIGINT を送信してタスクを停止したいと考えています。

だから、ここに私のコードがあります:

私がやっていることは非常に簡単です。フォークして N 個の子プロセスを作成し、親プロセスに pcntl_signal を追加して SIGINT シグナルをキャッチします。signalHanlder 関数は、子 pid のリストを取得し、受信したのと同じシグナル (つまり SIGINT) を送信します。

問題は、INT シグナルを (kill 経由で) 親プロセスに送信したときに、signalHandler 関数が呼び出されないことです。そして、私はその理由を理解していません!

奇妙なことに、cli でタスクを起動して Ctrl-C を使用すると、signalHandler 関数が呼び出され、すべての子が停止します。

では、なぜこれが起こっているのか理解できますか?私は何か間違ったことをしていますか?