0

与えられた間隔でアイテムのリストをループするアプリケーションがあります(このリストの長さは異なります)。アイテムごとにかなり単純な操作を実行します。値を追加するだけでなく、実際に複雑な計算も行いません。

私が疑問に思っているのは、このように各アイテムをロックする必要があるということです(現在の解決策):

def method_1:
    for item in the_list:
        do_operation(item);

def do_operation(item):
    lock()
    //do some stuff.
    unlock()

または私はこのようにそれを行う必要があります:

def method_1:
    lock()
    for item in the_list:
        do_operation(item);
    unlock()

def do_operation(item):
    //do some stuff.

「何かをする」とは何か、そしてどれくらいの時間がかかるかに大きく依存すると思うので、これは実際には答えるのが本当に難しいと思います。そして、正直なところ、これにどれくらいの時間がかかるかわかりません。特に、Pythonがロックを取得するのにかかる時間と比較して。

どうにかして質問を改善できるかどうかコメントで教えてください。

4

3 に答える 3

1

通常、ロックのタイムスライスはできるだけ短くする必要があります。したがって、通常は変数アクセスの直前にロックし、その後すぐにドロップします。同時実行の主な理由を無効にするため、完全なループをブロックする必要はありません。

リストの場合:特にスレッド実行を目的としたさまざまなキュークラスを調べましたか?

そして、jpmのコメントはその場で正しいです。他のスレッドも何かを行う場合は、それらも保護する必要があります。スレッド不足の問題もあるかもしれません。

于 2012-11-12T12:57:22.087 に答える
0

リスト全体をロックすることをお勧めします(オプション2)。各アイテムのみをロックすると、操作の途中でリストが変更される可能性があります。これは、正確に何をしているかによっては問題になる可能性があります。各ロックとロック解除に関連するオーバーヘッドもあります。

于 2012-11-12T12:56:46.967 に答える
0

ロックが(アイテム自体ではなく)リストを保護するためだけのものである場合は、次のこともできます。

def method_1:
    lock()
    list = the_list[:]
    unlock()
    for item in list:
        do_operation(item);
于 2012-11-12T13:05:02.233 に答える