2

通常の python スレッドと greenthread (eventlet) での動作にthreading.Lock()違いはありますか?threading.Semaphore()

4

1 に答える 1

3

動作に違いはありません。ただし、緑色のスレッドは、すべてのタスクを 1 つの OS スレッドで実行するため、実際にはスレッドではありません。そのため、threading.Lockthreading.Semaphoreは、1 つのスレッドからロックおよびロック解除されているかのように動作します。

これは、グリーン スレッドを使用しているときにロックされたロックまたはゼロ化されたセマフォを取得しようとすると、プログラム全体が永久に (または指定されたタイムアウトまで) ブロックされることを意味します。また、RLock はロックされている同じスレッドからのみ解放できます。グリーン スレッドは実際にはすべて同じスレッドで実行されるため、別のグリーン スレッドから RLock を解放することができます。

threadingつまり、グリーン スレッドを使用する場合はロックを使用しないでください。

于 2014-02-09T22:35:26.773 に答える