2017-12-04 12 views
0

は、私はJavaで、次のコードを持って言う:(オブジェクト)はPythonで同期されていますか?

public void example() { 
    synchronized(myObject) { 
     // do stuff 
    } 
} 

どのように私はPythonでこれを達成することができますか?

+3

pythonの詳細を学ぶGIL –

+0

@pushpendrachauhanこのケースでGILがなぜ重要なのか説明することができますか? – user8398347

+0

http://theorangeduck.com/page/synchronized-pythonをお読みください – chakri

答えて

1

Javaでは、組み込み同期で自動的にロックを任意のオブジェクトに関連付けることができるため、どのオブジェクトでも同期することができます。 Pythonには同様の自動管理機能がないため、ロックを自分で作成する必要があります。あなただけのオブジェクトとロックを関連付ける場合は、たとえば、あなたが自動的にこのようなすべてのインスタンスでロックが含まれて独自のクラスを作成することができ、Javaのように振る舞うことができます。

import threading 

class MyClass(object): 
    def __init__(self): 
     self.lock = threading.RLock() 

myObject = MyClass() 

def example(): 
    with myObject.lock: 
     # do stuff 

threading.Thread(target=example).start() 
threading.Thread(target=example).start() 

この例では、私はあるRLOCKを使用しましたJava同期ブロックはリエントラントなので、ロックおよびその他のタイプのロックの詳細についてはPython documentationで読むことができます。これはJavaのように動作する単なる方法であり、必ずしもロックを管理する最善の方法ではありません。ロックは単にPythonオブジェクトなので、それらを作成および管理する方法に大きな柔軟性がありますが、最良の方法はユースケースの仕様によって異なります。

関連する問題