問題タブ [multiprocess]
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.
java - プログラムの終了/クラッシュを呼び出すときにJavaサブプロセスを閉じます
多言語システムをまとめていますが、孤立したプロセスで問題が発生しています。
私のコードは、Javaプログラムを呼び出すPythonプログラムで構成されており、2つのプログラム間でパイプ通信が行われます。Javaプログラムは、1回限りの実行ではなく、永続的です。すべてが正常に機能していますが、Pythonプログラムが途中で終了した場合は、Javaプログラムを閉じる必要があります。
これを行う最善の方法は、プログラム間のstdinパイプを検出できない場合に、Javaプログラムを閉じることだと思いますが、これを行う方法がわかりません。
関連するPythonコード:
関連するJavaコード。stdinから読み取れない場合はプログラムを終了したいのですが、readLine()関数のブロッキングの問題が発生していると思います。
node.js - Node.js: cluster.fork() を介して異なる動作を呼び出す
Node と Redis を使用しています。イベントが発生した場合に備えて、サブスクライバーを redis に追加する必要があります。問題は、処理を一度だけ実行したいことです...そして、分岐したプロセスの1つだけがredisをリッスンする必要があるだけでいいのです。
ちょうど今、別のファイルで新しいクラスターをフォークして、そこから開始できるかどうかをテストしましたが、喜びはありませんでした。誰でもこれを行う方法を知っていますか?
Nodeの最新の安定バージョン(0.6.15)を実行しています
これが私のコードです(2ファイル):
出力:
clusterTest2 clusterTest1 clusterTest2 クラスターが生成された clusterTest1
ありがとう!
c++ - OpenMP がループの中断をサポートしていない
OpenMP でいくつかのコードを最適化しています。ループで遭遇した場合NO_VALUE
は、ブレークしたいと思います。ただし、コンパイラは、これは openMP では許可されていないことを示しています。どうすればこれを処理できますか?
どうすれば回避できますか?ありがとう!
ruby-on-rails - Rails開発:一度に複数のリクエストに応答する方法は?
私は、データベースへの同時アクセスを管理するための「興味深い」方法で、レガシーWebアプリケーションの保守を継承しました。
このアプリケーションは、ruby-on-rails2.3.8に基づいています。
開発環境をセットアップしたいのですが、そこから2つのWebブラウザーで同時に要求を行い、何が起こっているのかを把握します。
もちろん、これはWebrickを使用する場合は機能しません。これは、一度に1つのhttpリクエストのみを処理するため、すべてのリクエストがWebrickによって効果的にシリアル化されるためです。
雑種は私を助けることができると思いましたが、
実際には単一のプロセスを生成しており、それもシングルスレッドのようです。
一度に複数のリクエストに応答するように開発環境を設定する最も簡単な方法は何ですか?apacheとmod_passengerの使用は避けたいと思います。これは開発中なので、コードを変更して、次のリクエストで自動的にリロードできるようにしたいからです。
python - スレッドではなく複数のプロセスをPythonで処理しますか?
Web からリアルタイムの市場データを頻繁に取得し、そのデータを MySQL データベースに格納する Web バックエンドに取り組んでいます。
現在、メインスレッドでタスクを Queue オブジェクトにプッシュしています。次に、そのキューから読み取る約 20 のスレッドがあり、タスクが利用可能な場合、それらはそれを実行します。
残念ながら、私はパフォーマンスの問題に直面しており、多くの調査を行った後、決心できません。
私が見ているように、私には 3 つのオプションがあります。Celery のようなもので分散タスク アプローチを採用する必要がありますか? GIL の問題を回避するには、JPython または IronPython に切り替える必要がありますか? それとも、処理を使用してスレッドの代わりに別のプロセスを生成する必要がありますか? 後者なら何工程くらいがいいの?優れたマルチプロセス プロデューサー/コンシューマー デザインとは?
ありがとう!
multithreading - マルチスレッド環境でのブーストトリム機能効率について
私はブーストトリム機能を使用しており、シングルスレッド環境で非常にうまく機能することがわかりました。
しかし、マルチスレッド環境でトリム関数を呼び出すと、パフォーマンスが低下します。また、マルチプロセス方式で呼び出すとパフォーマンスが良いことがわかります。
最後に、私は単純なトリム関数を作成します。これは、マルチスレッド環境またはマルチプロセス環境で非常にうまく機能します。
マルチスレッド環境では間違って使用する必要があると思います。だから私は何が悪いのか知りたいのです。
返信ありがとうございます。
ブーストバージョン:ブースト1.46.1 os:linux redhat 6.1、8core、24Gメモリ。
打撃はサンプルコードtest1.cppであり、マルチスレッド環境でトリム関数を呼び出します
test2.cpp、マルチプロセス環境でトリム関数を呼び出す
test3.cpp、test2.cppの実行可能ファイル
test4.cppは、マルチスレッド環境で単純なtrim(ブーストライブラリではない)関数を呼び出します。これは、マルチプロセス呼び出しと同様のパフォーマンスを発揮します。
multiprocessing - 同時アクセス読み取りとランダム アクセス読み取りをサポートする、高速で低メモリの定数キー値データベース
大きすぎたり分散したりしない、ディスク上のキー値ストアが必要です。ユースケースは次のとおりです。
- 完全な DB のサイズは数 GB になります
- キーと値の両方が一定のサイズです
- その一定のデータベース。データベース全体が書き込まれたら、それ以上エントリを書き込む必要はありません (または非常にまれにしか書き込みません)。
- キーは予測できない順序でアクセスされます
- 複数のプロセスによる同時読み取りのサポートは必須です。
- リーダーはタイトなループで数百万のキーにアクセスするため、非常に高速である必要があります。したがって、連想配列をループするのと同じくらいパフォーマンスにできるだけ近づける必要があります(
STL's std::map
たとえば) - 理想的には、使用する RAM の量を設定できるようにする必要があります。通常は、数百 Mb を使用する必要があります。
- C または C++ で書かれています。既存の python 拡張機能は大きなプラスになりますが、自分で追加できます
良い選択肢のようcdb
にgdbm
見えますが、もっと適切な選択肢があるかどうかを知りたいだけです。関連するベンチマークまたは関連する逸話的な証拠へのポインタも高く評価されます。
python - パッケージ内の Windows での Python マルチプロセス
Windows でマルチプロセスを使用しようとしていますが、無限ループ エラーが発生します。これで、標準の python スクリプトでname == " main "を使用して修正できることがわかりました。私の問題は、名前が「testmultiprocess」(パッケージ名)と同じになるようにスクリプトをパッケージ化していることです。
複数のファイルとインストールが必要なため、問題を実証するためにgithubで小さなプロジェクトを作成しました。
ありがとう、ナイル
編集:
test.py:
出力される名前は、パッケージ名であるため、常に「testmultiprocessing」です。
c - 信号エラー:「無効な式の使用が無効です」
「シグナル」機能を使用する際に、他にも問題があります。私は5つの子プロセスとその父親を持っています。
一度に 1 つのプロセスのみを実行する必要があり、そのプロセスは、ある程度の遅延 (1 ~ 10 秒) で別の偶然のプロセスに変更する必要があります。これらの変更には、SIGUSER1 シグナルを使用することが必須です。これは私のコードと私が持っているエラーです:
私の知る限り、「manejador」という関数は、1 つの int 値で使用できます。 void manejador(int s){ printf("Signal received %d\n",s); }
ただし、現在のプロセスを停止して新しいプロセスを再起動する必要があるため、内部に 2 つの変数が必要です。
私が抱えている正確なエラーは次のとおりです。
エラー: void 式の使用が無効です
手伝ってくれませんか?
c - semgetはそのようなファイルまたはディレクトリではありません
このコードを機能させようとしていますが、機能しません。コンパイルエラーや警告を表示しないコードを作成できましたが、実行しようとすると次のエラーで失敗します。
semget:そのようなファイルやディレクトリはありません
これは私のコードです:
ヘッダーファイルsys/sem.hをインクルードすると...実行可能ファイルがそれを見つけられないのはなぜですか?
私が間違っているのは何ですか?
よろしくお願いいたします。
** * ** * ** * ** * **編集** * ** * ** * ** * ****
与えられた答えに従って、ファイルを作成します。これを行うには、次のものを追加します。
そして、ftok文の前に次の2行を追加します。
ファイルは作成されますが、それでも同じエラーが発生します。
何か案は?
ありがとう!!