問題タブ [ipc]
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.
python - 2つのpythonプログラムを相互作用させる方法は?
あるプログラムに HTTP サーバーがあり、別のプログラムに基本的なアプリケーションがあります。どちらもループなので、次の方法がわかりません。
- アプリを起動してから HTTP サーバーを起動するスクリプトを作成します。
- これらのプログラムが動作中にデータを交換するようにします。
これらは通常どのように行われますか?私のスクリプトは Python で書かれているので、Python ソリューションは本当にありがたいです。
ユーザーは、アプリにデータを照会して結果を返す http 要求を行いますか? はい
アプリはデータを収集してどこかに保存しますか? アプリと HTTP サーバーは両方とも SQLite データベースを使用します。ただし、DB は異なる場合があります。
ipc - プロセス間通信
プロセス間通信にファイルを使用することの長所と短所は何ですか?私がこの質問をしている文脈の背景をいくつか挙げさせてください。
問題は、いくつかの制約がある古典的な生産者/消費者問題です。プロデューサーは、マシンのクラスター上で実行される一連の協調プロセスであり、ブロードキャストを使用して相互に通信します。各プロセスには、それが知っているローカルユーザーがいて、上記のブロードキャストメカニズムによって他のプロセスにもそれらを知らせます。これまで、ブロードキャスト/共有されている状態情報は保持されていませんでしたが、保持する必要があります。
このシステムは何年にもわたって本番環境で実行されており、数千人のユーザーをサポートしており、永続性のサポートを追加するためにこれに依存関係を追加することについて、人々は当然のことながら非常に心配しています。私たちが選択したパスは、ローカルトラフィックをファイルシステム上のファイルに書き込む既存のプロセスに新しいスレッドを生成し、それを新しいプロセス(コンシューマーと呼びます)によって読み取られて永続化することでした。このアプローチで見られる利点は次のとおりです。
- 私たちは無料で永続性を取得します。新しいプロセスに問題がある場合は、ファイルシステムに書き込んでいるときに、ローカルトラフィックを失うことはありません。消費者が中断した場所を知っている限り、消費者はいつでもデータの処理を開始できます。
- キューイングライブラリを使用するための学習曲線はありません。そのプレーンな古いUNIXファイルIOです。
- 最大の利点は、ファイル書き込み用の新しいスレッドを除いて、現在のプロデューサープロセスにまったく影響を与えないことです。
このアプローチに関する懸念事項は次のとおりです。
- ファイルのロックと競合、およびそのパフォーマンスへの影響。
- 書き込みバッファがフラッシュされ、プロデューサーがファイルに完全なイベントが書き込まれた場合にのみファイルロックを解放することを確認してください。消費者は不完全な記録を読む必要があります。
考え?このアプローチはナイーブであり、既成の永続キューライブラリを使用するための立ち上げ時間の初期コストを支払う必要がありますか?ここでの主なポイントは、現在のプロセスへの影響を最小限に抑え、依存関係を追加しないことです。
language-agnostic - Webページの変更について非Webアプリケーションに通知するための最良の方法は何ですか?
ある程度連携しなければならない2つのアプリケーションがあるとしましょう。
- Webアプリケーション(PHP、Ruby on Railsなど)
- デスクトップアプリケーション(Java、C ++、...)
デスクトップアプリケーションはWebアプリケーションから通知を受ける必要があり、通知の送信と受信の間の遅延は短くなければなりません。(<10秒)
これを行うための可能な方法は何ですか?10秒間隔でポーリングすることも考えられますが、多くのデスクトップアプリケーションに通知する必要がある場合は、大量のトラフィックが発生します。LANではUDPブロードキャストを使用しますが、残念ながらここでは不可能です...
あなたが私に与えることができるどんな考えにも感謝します。
c++ - DuplicateHandle()、最初または2番目のプロセスで使用しますか?
Windows API DuplicateHandle() http://msdn.microsoft.com/en-us/library/ms724251 ( VS.85).aspxオブジェクトハンドルを複製し、元のプロセスと他のプロセスの両方へのハンドルが必要です。で複製されたハンドルを使用します。
2つのUNRELATEDプロセスがある場合、必要なハンドルが使用可能である限り、どちらかでDuplicateHandle()を呼び出すことができると思いますか?
私の質問は、パイプを使用して2つのプロセス間で通信し、イベントでこれを実現することについてです。
最初のプロセスでは、CreateEvent()を作成します。次に、2番目のプロセスでWaitForSingleObject()を使用します。
最初のプロセスでハンドルを複製しようとすると、最初に2番目のプロセスハンドルをパイプ経由で最初のプロセスに送信し、ハンドルを複製してから、ハンドルを2番目のプロセスに送信する必要がありますか?
または、最初のプロセスハンドルとイベントハンドルを2番目のプロセスに送信し、そこで複製することから始めることもできます。
どちらかを選択する理由はありますか?
しわを追加するために、イベントハンドルは、実際には最初のプロセス(CGIアプリケーション)を呼び出した親プロセスから継承されます。そのイベントハンドルがHANDLE_DO_NOT_DUPLICATE(そのようなもの)で作成された場合、実際にDuplicateHandle()を使用して2番目のプロセスで複製できますか?
応答:
さて、最初のプロセスで新しいNAMEDイベントを作成し、提案されているように2番目のプロセスでそれを見つけることができましたが、最初のプロセスの親で作成されたイベントを複製して、2番目のプロセスに転送しようとしています。このイベントは名前付きイベントではないため、DuplicateHandle()を使用する必要があります。
IPCにパイプを使用しています。イベントハンドルは2番目のプロセスに送信されるときにコンテキスト外であるため、最初のプロセスでDuplicateHandle()を呼び出す必要があることに気付きました。
2番目のプロセスは、上記の変換で詳述したDuplicateHandle()を使用してハンドルを変換します
hProcPseudo = 4294967295
に
hProcess = 152
次に、このプロセスハンドルを名前付きパイプを介して最初のプロセスに渡します。最初のプロセス(イベントハンドルが有効な場合)では、重複ハンドルを呼び出します。
残念ながら、エラーが発生します。
DuplicateHandle hPipeFCGI GetLastError=6-ハンドルが無効です。
さらにテスト(hFirstProcessを置き換える)すると、無効なのはhSecondProcであることがわかります!??
ビッグミステリー。
linux - Linuxでmsemaphore?
AIX (および HPUX) には msemaphores と呼ばれる優れた小さな機能があり、複数のプロセスで共有されるメモリ マップ ファイルの細かい部分 (レコードなど) を簡単に同期できます。Linuxで同等のものを知っている人はいますか?
明確にするために、msemaphore 関数については、関連するリンクをたどって説明しています。
.net - .NET で IPC バスを実装するための最良のメカニズムは?
データバス経由でローカルに通信したいアプリがいくつかあります。
理想的には:
- 彼らはオンラインになるといつでも話したり聞いたりします
- この通信方法の「所有者」は存在しません。
- 追加のコンポーネントをインストールする必要はありません (つまり、メッセージ キュー)
- 開く必要があるポートがなければいいのですが
これを行うための最良の技術は何だと思いますか?
データ バスに WCF を使用する方法はありますか?
c++ - ローカル IPC 用のメモリ ベースのデータ サーバー
実行するたびに約 200MB の市場データを必要とするアプリを実行しようとしています。これは、最近メモリに保存するのにわずかな量のデータなので、スピードのために私がやりたいことです。
数日間のセッションの間に、私はおそらく 1 つ以上のアプリケーションを何度も実行、再実行、再書き込み、再実行などを繰り返します。
SO、問題は、アプリがクラッシュした場合でも、ディスク上のデータ ファイルを開いてデータを再ロードすることによってデータを再ロードする必要がないように、データを一日中メモリに保持する方法です。
私の最初のアイデアは、データを共有メモリに読み取って使用できるようにするだけのデータ サーバー アプリを作成することです。私がそうするなら、私は呼び出すことでIPCのメモリマッピングを使用できると思います
CreateFile()
CreateFileMapping()
MapViewOfFile()
より良い IPC/アプローチはありますか?
sockets - ターミナル サーバーで機能するプロセス間通信方法はどれですか?
ターミナル サーバー セッションでは、必要なリソースが仮想化されていないため、一部の標準 IPC テクノロジはシングル ユーザー環境のように機能しない場合があります。
たとえば、TCP/IP ポートは仮想化されていないため、異なるセッション内のアプリケーションが同じポートでリッスンしようとすると、ポートの競合が発生します。
同じユーザー セッションで実行されているアプリケーションが対話する必要があるターミナル サーバー環境で機能する IPC テクノロジはどれですか?
- メッセージ (WM_COPYDATA)?
- 名前付きパイプ?
- DDE?
- メモリマップファイル?