問題タブ [multiple-processes]
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.
distributed-computing - 単純な三者多数決がビザンチンの過ちを解決しないのはなぜですか?
最近、ビザンチンのフォールト トレランスに関する多くの論文を読んでいます。m 個のビザンチン障害を処理するには 3m+1 台のコンピューターが必要であるという一般的な証拠があります。一般的な証明は次のようになります。
A、B、C の 3 人の「将軍」がいます。将軍が次のように通信するとします。ここで、C は「裏切り者」です。
したがって、アクターの大多数がコンセンサスに達することを保証することはできません。
私はその証明をある程度理解していますが、重要な点を見逃しているようです. A、B、C も、何をすべきかについて独自の内部計算を行っていませんか? ここでは A と B が「忠実な」将軍なので、「正しい」行動は攻撃することだと思われます。B は、何をすべきかを決定する際に、B 自身の計算を考慮することが許されませんか? その場合、彼は競合する A&C 入力の間の結びつきを簡単に破り、攻撃を決定することができます。次に、A と B の両方の攻撃を行い、問題を解決します。これは、古典的なビザンチン将軍の問題とは異なる問題ですか?
python - このプログラムの一部のプロセスが他のプロセスよりも早く終了する可能性はありますか?
高度に並列化できるように設計されたプログラムがあります。一部のプロセッサは、他のプロセッサよりも早くこの Python スクリプトを終了させていると思われます。これにより、このコードの上流で観察した動作が説明されます。このコードにより、一部の mpi プロセスが他のプロセスよりも早く終了する可能性はありますか?
c - Linux のプロセス: すべての子プロセスをランダムな秒数でスリープ状態にする
新しいプロセスが開始されるたびに、(プロセスに属する) 変数に新しいランダム値を取得させたいと思います。
作成されたすべてのプロセスをランダムな秒数スリープさせるには、このランダム生成が必要です。私が使用したプログラムの最初に
srand(time(NULL))
、およびプロセスが実行する関数で使用しました
int sleeptime = rand() % 16 + 5; //that's because I need values from 5 to 20
.
そのようなことを実装しようとしましたが、すべてのプロセスで変数の値が同じであることがわかりました。
srand(..) の引数としてミリ秒単位の現在の時刻 (それぞれのプロセスが開始される時刻) を取得すると、ランダムな値が得られると思います。問題は、これに関する情報が見つからなかったことです。別のページで提案されている唯一のことは、よく知られているものです: srand(time(NULL));
(ここで、time(NULL) は現在の時刻を秒単位で返します)。
これを実装する方法を教えてください。前もって感謝します。
django - mod_wsgi のスレッドとプロセスの最も効率的な数を知るにはどうすればよいですか?
私は通常、AWS Elastic Beanstalk、Heroku、および Microsoft Asure を使用して、Django プロジェクトをホストしています。また、私は通常MySQLを使用しています。ただし、mod_wsgi 設定の効率的なスレッド数とプロセス数を特定するのは困難です。事前に情報をありがとうございます。
javascript - node.js で新しい独立したプロセスを生成する
現在実行中のスクリプトから新しい独立したプロセスを生成する方法はありますか?
既に実行中のスクリプトから新しいスクリプトを実行しようとしています。新しいスクリプトは、それを呼び出したスクリプトから独立している必要があります。
bash - bash で n 個のサブプロセスを開始し、すべてが完了するまで待ちます
いくつかの ffmpeg 設定をテストし、複数のコマンドを「サブプロセス」として実行したいと思います。ただし、一度に 4 つ以上のプロセスを起動したくありません。これを行う良い方法は何ですか?bgでプロセスを実行する前にプロセスIDをトラップし、プロセスリストになくなるまで待つようなものでしょうか?またはxargs?
「キューイング」のないスクリプトは次のとおりです。
node.js - ノード child_process が早期に終了するのはなぜですか?
docker コンテナーを実行する非同期ノード child_process を実行しようとしています。
temp.js にはfor loop
. ループの半分を実行することもあれば、3 分の 1 を実行することもあり、その後終了します。
私はそれを使用して動作させることができますchild_process.execSync
が、それは少し不快です. なぜそのように終了し、どうすれば生き続けることができますか?
python-3.x - 同時読み取りに複数のプロセスを使用する Python SQLite3: 大きなデータセットでエラーが発生せずにハングすることがよくあります
概要:
財務データ分析プロジェクト用に多数の変数 (幅広いデータセット) を作成しようとしています。140,000 行の pandas データフレーム「position_history」があり、それぞれに株と売買の日付/価格が含まれています。
入力 (stock、buy_date、sell_date) を受け取る関数 create_domain があります。
- 私のSQLite3データベースにクエリを作成して、それらの日付を指定してその株の時系列を抽出します。
- 時系列を使用して変数を構築します
df.apply を使用して、関数 create_domain を position_history に適用します
コードを順番に実行すると、変数を構築するのに約 4 時間かかります。これを何度も行う必要があり、より広いデータセットが必要になる可能性があるため、複数のプロセスを使用してこれを高速化したいと考えています。
複数のプロセスの場合、position_history を縦にチャンクに分割し、データフレームのリストを作成します。このリストを joblib (マルチプロセッシング) に渡します。私のコードはほとんどの場合、エラーをスローすることなく無期限にハングします (ただし、小さなサンプルで実行される場合もあります)。
ワーカー プロセスが同じ SQL テーブルを同時に読み込もうとしているために問題が発生しているのではないかと疑っています。
私は次の救済策を試しました:
関数 create_domain 内で新しい接続 (sqlalchemy.create_engine) を開いたので、各ワーカー プロセスは独自のエンジン/接続を取得します。
sqlalchemy のドキュメントに従ってください ( http://docs.sqlalchemy.org/en/latest/faq/connections.html#how-do-i-use-engines-connections-sessions-with-python-multiprocessing-or-os-fork )
- poolclass を NullPool に変更しました。これにより、1 つのエンジン内の複数の接続が無効になり、エンジンはトランザクションごとに新しい接続を強制的に開いたり閉じたりします。
- 念のため、各子に engine.dispose() を使用して、すべてのエンジン接続を確実にフラッシュし、新しい接続を取得しました。
- 注 - これらのソリューションは、sqlite3 がスレッド間で接続を共有しないようにすることを目的としており、これは機能しません (複数の Python プロセス間で SQLite データベースを共有するために SQLAlchemy を使用することは可能ですか? )
joblib の下 ( https://pythonhosted.org/joblib/parallel.html )
- 「マルチプロセッシング」の代わりに「スレッド」バックエンドを使用してみました。これは機能しましたが、コードの速度は大幅に向上しませんでした。ここでスレッド化について読んだことから(Multiprocessing vs Threading Python)、スレッド化では実際には複数のCPUを使用できないため、意味があります。
- pandasにはnumpyが含まれているため、memmapingテクニックを使用してみました。これは私にとって適切な修正ではなかったと思います
関連するスタックオーバーフロー エントリ:
- 説明したマルチスレッドではなく、複数のプロセスを使用したいと思います:
python multiple threaded processes for running executables ;
Python sqlite3 と同時実行性。
SQLite3 とマルチプロセッシング; *この最後の答えがわかりません
- 私は読み込もうとしていて、書き込もうとはしていないので、説明したように、SQLite ロック メカニズムの管理が必要かどうかはわかりません: SQLite は同時読み取りに適していますか? ; sqlite3 との同時書き込み
- この投稿では、理論的には機能するはずだと述べています。注 - 私は読んでいるだけなので、WAL モードは役に立たないと思います。
(擬似) コード スニペット
joblib への私の呼び出し:
私の create_domain 関数:
概要: コードが永久にハングアップし、カーネルがクラッシュし、エラーは発生しません。以下に関する洞察をいただければ幸いです。
- なぜこれが起こっているのですか?
- どうすれば修正できますか?
- 私がやろうとしていることを行うためのより良い方法はありますか? SQL クエリのベクトル化と最適化に最善を尽くしました。
- これは SQLite3 の問題ですか? MySQL のようなものがうまく機能しますか?
- 任意のヒント; コーディング/Python/データ サイエンスは初めてです。
詳細: 私はスーパー コンピューター クラスターで Linux を実行し、Python 3.4.3 で iPython を使用しています。
これは私の最初のスタック オーバーフローの質問です。
python - Python マルチプロセッシング スクリプトが終了しない
私は、python2.7 マルチプロセッシング モジュールでもう少し快適にしようとしています。そのため、ファイル名と必要な数のプロセスを入力として受け取り、複数のプロセスを開始して、キュー内の各ファイル名に関数を適用する小さなスクリプトを作成しました。次のようになります。
スクリプトは問題なく動作し、キュー内のすべてのオブジェクトが使い果たされるまで、古いプロセスが終了するたびに新しいプロセスを開始します (それがそのように機能すると思いますか?)。ただし、スクリプトはキューを完了した後も終了せず、アイドル状態のままであり、を使用して強制終了する必要がありますCtrl+C
。ここで何が問題なのですか?
回答ありがとうございます。