問題タブ [interprocess]
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 - 単一の中央スクリプトにメッセージを送信する複数の python スクリプト
任意に実行できる Python 2.6 で書かれた多数のスクリプトがあります。出力を収集して単一のログに表示する単一の中央スクリプトが必要です。
理想的には、次の要件を満たします。
- すべてのスクリプトは、メッセージを同じ「受信者」に送信して表示します。
- 最初のスクリプトがメッセージを送信しようとしたときにレシーバーが実行されていない場合は、開始されます。
- レシーバーは手動で起動および終了することもできます。(終了しても、別のスクリプトがメッセージを送信しようとすると再起動します。)
- スクリプトは任意の順序で実行でき、同時に実行することもできます。
- Windows上で動作します。マルチプラットフォームの方が優れていますが、少なくとも Windows 上で動作する必要があります。
私はいくつかのヒントに出くわしました:
os.pipe()
multiprocess
- ポートの占有
mutex
logging.handlers.SocketHandler
(ありがとう@ダンヘッド)
それらのピースから、何かを組み合わせることができると思います。これを行う明らかに「正しい」方法があるかどうか、または誰かの過ちから学ぶことができるかどうか疑問に思っています。
forms - スクリーンショットを撮り、フォーカスされたコントロールを視覚的にハイライトします
オープンソース ソフトウェアを何年も楽しく使ってきた私は、恩返しをする時が来たと考えました。ドキュメントは通常、多くのプロジェクトの弱点であり、加えて私の C# スキルは、FLOSS の土地の片隅ではあまり求められていないため、チュートリアルなどから始めようと考えています.
書き込みツールの 2 番目のチュートリアルの後、私はすでに次のルーチンに悩まされています。
- スクリーンショットを撮ります
- 重要な部分を強調表示する
- 注釈を付ける
- ウェブサイトに追加
- 繰り返す
そして、それを自動化できると考えました。
私が探しているのは、現在開いているウィンドウのスクリーンショットを撮り、たとえば、フォーカスされたコントロール (おそらくボタン) の周りに黄色のバーをペイントし、小さなテキスト ボックスをポップアップして、その説明を入力するプログラムだと思います。画像を作成し、最終的にすべてをウェブサイト/データベース/リスト/などに追加します。
さて、私の実際の質問です。すでにそれを行うツールを誰も知らない限り、「外部」ウィンドウのコントロールのサイズと位置にアクセスする方法についていくつかのスターターが必要です。これにより、重要なコントロールの周りにこれらの強調表示バーをどこにペイントするかを計算できます。で保護されたテキストボックスの内容を明らかにできるWindows用のパスワードマスク解除ツールを覚えていますが******
、それに関する開いている例は見つかりません.. WinAPIのもの、WindowFromPoint + GetDlgItemなど。Linuxの方が簡単かどうかはわかりませんが、どちらでも問題ありません。プログラミング言語の好みもありません。
boost - Boost Interprocess managed_shared_memory での検索中に、スレッドがミューテックス待機でスタックする
boost::interprocess::managed_shared_memory を使用しています。最近のテスト中に、プロセス クラッシュ後に、共有メモリを検索するスレッドが manage_shared_memory API でスタックすることがわかりました。私の最初の観察は、プロセスがクラッシュして再起動している間、segment_manager のメンバーである m_header 再帰ロックがロック状態にあったことです。そのようなシナリオを克服または修正するために、実際にそのような状態をどのように検出するか.
注: ブースト ライブラリのバージョンは 1_35_0 です
python - Pythonスクリプトは、同じスクリプトの別のインスタンスが実行されていることを認識できますか...そしてそれと通信できますか?
同じ長時間実行のPythonコマンドラインスクリプトの複数のインスタンスが同時に実行されないようにしたい。また、新しいインスタンスが自殺する前に、新しいインスタンスが元のインスタンスにデータを送信できるようにしたい。 。クロスプラットフォームの方法でこれを行うにはどうすればよいですか?
具体的には、次の動作を有効にします。
- "
foo.py
"はコマンドラインから起動され、マシンが再起動されるか、親プロセスがマシンを強制終了するまで、数日または数週間、長時間実行され続けます。 - 数分ごとに同じスクリプトが再度起動されますが、コマンドラインパラメータが異なります
- 起動すると、スクリプトは他のインスタンスが実行されているかどうかを確認する必要があります。
- 他のインスタンスが実行されている場合、インスタンス#2はコマンドラインパラメーターをインスタンス#1に送信してから、インスタンス#2を終了する必要があります。
- インスタンス#1は、別のスクリプトからコマンドラインパラメータを受け取った場合、新しいスレッドを起動し、(上記の手順で送信されたコマンドラインパラメータを使用して)インスタンス#2が実行しようとしていた作業の実行を開始する必要があります。
だから私は2つのことを探しています:Pythonプログラムがそれ自体の別のインスタンスが実行されていることをどのように知ることができますか、そして1つのPythonコマンドラインプログラムが別のプログラムとどのように通信できますか?
これをさらに複雑にするには、同じスクリプトをWindowsとLinuxの両方で実行する必要があるため、理想的には、ソリューションはPython標準ライブラリのみを使用し、OS固有の呼び出しは使用しません。Windowsコードパスと*nixコードパス(およびif
どちらかを選択するためのコード内の大きなステートメント)が必要な場合でも、「同じコード」ソリューションが不可能な場合は問題ありません。
私はおそらくファイルベースのアプローチを実行できることを理解しています(たとえば、インスタンス#1はディレクトリの変更を監視し、各インスタンスは作業を行いたいときにそのディレクトリにファイルをドロップします)が、それらのファイルのクリーンアップについて少し心配しています正常でないマシンのシャットダウン後。理想的には、メモリ内ソリューションを使用できると思います。しかし、繰り返しになりますが、永続ファイルベースのアプローチがそれを行う唯一の方法である場合、私はそのオプションを受け入れます。
詳細:サーバーがPythonスクリプトの実行をサポートする監視ツールを使用して監視データ(データベースクエリやWebサービス呼び出しの結果など)を収集し、後で使用するためにインデックスを作成しているため、これを実行しようとしています。これらのスクリプトの中には、起動に非常に費用がかかるものもありますが、起動後に実行するのは安価です(たとえば、DB接続の作成とクエリの実行)。そのため、親プロセスがそれらを強制終了するまで、それらを無限ループで実行し続けることを選択しました。
これはうまく機能しますが、大規模なサーバーでは、それぞれ20分ごとにデータを収集している場合でも、同じスクリプトの100個のインスタンスが実行されている可能性があります。これは、RAM、DB接続制限などに大混乱をもたらします。1スレッドの100プロセスから100スレッドの1プロセスに切り替えて、それぞれが以前は1つのスクリプトで実行していた作業を実行します。
ただし、監視ツールによるスクリプトの呼び出し方法を変更することはできません。呼び出しを同じに保つ必要があります(異なるコマンドラインパラメーターでプロセスを起動します)が、別のスクリプトがアクティブであることを認識するようにスクリプトを変更し、「新しい」スクリプトに(コマンドラインパラメーターからの)作業指示を送信させます「古い」スクリプトに。
ところで、これは私が1スクリプトベースでやりたいことではありません。代わりに、この動作を多くのスクリプト作成者が利用できるライブラリにパッケージ化したいと思います。私の目標は、スクリプト作成者がマルチインスタンスの問題を認識しない単純なシングルスレッドスクリプトを記述し、マルチスレッドを処理できるようにすることです。カバーの下でシングルインスタンス化。
distributed-computing - 分散コンピューティングとプロセス間通信の基本的な違いは?
分散コンピューティングとインタープロセス通信の理論的定義を知っています。
しかし、リアルタイムでは、分散またはインタープロセスを選択するときの結論に達することができませんでした.
例として、分散コンピューティングまたはプロセス間通信に進むことができるいくつかのシナリオを教えてください.
boost - Mac OS X : プロセス間セマフォをブーストする timed_wait : 異常な CPU 消費
コード セグメントを Windows から Mac OS X に移植した後、実行中に CPU コア全体を消費することがわかりました。CPU 消費の原因となる呼び出しは、boost::interprocess::interprocess_semaphore::timed_wait です。
以下は、この動作を再現するコード部分です。
次に、名前のないセマフォは Mac OS X では使用できないことを読んだので、名前のないセマフォが効率的にエミュレートされていないことが原因である可能性があると考えました...次に、次のことを試しましたが、失敗しました。
利用可能な Posix プリミティブがあるため、実際には Mac OS X での boost::interprocess のより良い動作を期待していましたが、実際にはそうではありません。解決策はありますか?どうもありがとう。
linux - ホストプロセス間でcudaGPUデバイスメモリを共有できますか?
同じデバイスメモリにアクセスできる2つ以上のLinuxホストプロセスを持つことは可能ですか?2つのプロセス間で高データレートをストリーミングしていますが、データをプロセスAのホストにGPUから戻したくないので、プロセスBにデータを渡します。プロセスBはh2dをGPUに戻します。
複数のプロセスを単一のプロセスに結合することはオプションではありません。
kernel - 別のプロセスにポインタを送信し、それらを使用していますか?
オブジェクトへのポインターをintにキャストしてからオブジェクトにキャストすることにより、Mach IPCを介してオブジェクトにポインターを送信することは可能ですか? それはうまくいくでしょうか?
CALayer オブジェクトを別のプロセスに送信したいと考えています。Mach IPC経由で生のオブジェクトを送信できるとは思いません。
cross-platform - CORBA、MessagePack RPC、Thrift、またはその他のものを完全に使用する必要がありますか?
私は新しいハードウェアデバイス用のソフトウェアを作成しています。これは、あらゆる種類の新しいサードパーティアプリケーションが必要に応じてアクセスできるようにするためのものです。
ソフトウェアは、ハードウェアデバイスをサポートするサードパーティのゲームやアプリケーションがポーリングできるネイティブプロセス(C ++)になります。これらのサードパーティアプリは、サブスクライブベースでネイティブプロセスからイベントを受信できる必要があります。そのため、ネイティブプロセスとは別に、サードパーティの開発者が簡単に接続できるようにアプリに埋め込むために選択する可能性のあるすべてのプラットフォーム/言語(Java、C ++、Pythonなど)用の「コネクタ」ライブラリも提供します。それらによって書かれる必要のある余分なコードはほとんどないデバイスに。すべてのデスクトップ/ラップトップOSプラットフォームをターゲットにし、公開する機能についてかなり良いアイデアを持っていますが、理想的には行き詰まりすぎないようにします(つまり、クライアントとサーバーの両方からエレガントにスケーラブルにしたい)視点)。
今後の信頼性、パフォーマンス、保守性、クロスプラットフォーム/言語の柔軟性、開発のしやすさの順に求めています。
何を使うべきですか?
CORBA、MessagePack-RPC、Thrift、または他の何か完全に?
(ライセンスのためにICEを省略しました)
c - ファイルのロックとセマフォ
好奇心から、Linux でプロセス間同期を実現するための推奨される方法は何ですか? sem*(2)
ファイルをロックするにはfcntl()
、flock()
とlockf()
.
内部の違いは何ですか (ある場合)、それぞれの使用をどのように正当化しますか?