- つのプロセスは、いくつかの他のプロセスがそのリストからこれらの要素を消費する(およびそれらを削除)
- (
multiprocessing.Manager().list()
)共有リストに要素を追加multiprocessing
プログラムを有しています。それらはリスト内で処理するものがあるまで実行され、上記のプロセスは依然としてリストに追加されます。
ロックを実装しました(multiprocessing.Lock()
経由)。リストに追加したり、削除したりしました。 1つの「フィーダー」プロセスと複数の(10〜40)「消費者」プロセスがすべてロックを競合し、消費者プロセスが高速であるため、「フィーダー」プロセスでロックを取得するのが困難になります。
ロックを取得する際に「優先度」の概念はありますか?私は "フィーダ"プロセスが他のものよりも優先してそれを取得することを望みます。
"フィーダ"プロセスがある間にロックを取得しようとする前に、 "コンシューマ"プロセスがランダムな時間待機することで問題を軽減しました。これは回避策ですが、それは醜く、ほとんど効果がありません(私はrandom.random()*n
秒を待つプロセスを持っています。ここで、n
はプロセスの数です。これは完全に構成された番号であり、おそらく間違っています)。
がどのように "キュー" の概念が実現されていますか?あなたがロックのために来たときにプロセスをリストに追加するだけですか? –
@ Ev.Kounis:はい、これは質問で言及したように、 'multiprocessing.Manager()。list()'です(これは 'multiprocessing.Queue()'ではありません) – WoJ
どの要素が追加されて取得されたのですか?つまり、プロセスの優先順位を追跡する構造体(リスト?)を意味します。 –