13

実行中の同時スクリプトの特定の量を超えて使用できないリソースを使用するPythonのスクリプトがあります。

古典的には、これは名前付きのセマフォによって解決されますが、マルチプロセッシングモジュールまたはスレッドのドキュメントでそれらを見つけることができません。

私は何かが足りないのですか、それともPythonによって実装/公開されていない名前のセマフォですか?さらに重要なことに、答えが「いいえ」の場合、それをエミュレートするための最良の方法は何ですか?

ありがとう、ボアズ

PS。この質問とはあまり関係のない理由で、タスクを継続的に実行されているプロセス/デーモンに集約したり、生成されたプロセスを操作したりすることはできません。どちらもpythonAPIで動作したようです。

4

2 に答える 2

4

これらのようなサードパーティの拡張機能、理想的には拡張機能をお勧めします。posix_ipc特に、ドキュメントのsempahoreセクションを参照してください。

これらのモジュールは主に「systemVIPC」(セマフォを含む)をUnixyの方法で公開することを目的としていますが、少なくとも1つ(posix_ipc具体的には)Windows上のCygwinで動作すると主張されています(私はその主張を検証していません)。FreeBSD7.2およびMacOSX10.5にはいくつかの文書化された制限があるため、これらのプラットフォームが重要であるかどうかに注意してください。

于 2010-05-10T00:16:25.640 に答える
0

カーネルパスの代わりにファイルシステムを使用してそれらをエミュレートできます(名前付きセマフォは、とにかく一部のプラットフォームでこのように実装されています)。自分で実装する必要がありますがsem_[open|wait|post|unlink]、そうすることは比較的簡単なはずです。同期のオーバーヘッドが大きくなる可能性があるため(アプリでセマフォをいじる頻度によって異なります)、名前付きセマフォを格納するプロセスを起動するときにRAMディスクを初期化することをお勧めします。

あるいは、自分でローリングすることに抵抗がある場合は、単純な拡張モジュールでラップすることもできますboost::interprocess::named_semaphoreドキュメントはこちら)。

于 2010-05-09T19:08:46.363 に答える