Fredrik Lundhの記事Thread Synchronization Mechanisms in Pythonは、複数のスレッドを操作すると値が不正確になる可能性があることを示しています。スレッディング同期の理解
counter = 0
def process_item(item):
global counter
... do something with item ...
counter += 1
は、その後、それはこれらの事は、スレッドセーフであると言っに行く:
reading or replacing a single instance attribute
reading or replacing a single global variable
fetching an item from a list
modifying a list in place (e.g. adding an item using append)
fetching an item from a dictionary
modifying a dictionary in place (e.g. adding an item, or calling the clear method)
しかし、単に単一のグローバル変数を更新するコードの例ではない、ので、とにかくスレッドセーフでしょうか?
私はここで何が欠けていますか? Pythonで
"Updating"!= "Replacing"更新は以前の状態(読み込み、変更、書き込み)に依存します。置き換えはできません(単なる書き込みです)。また、キーがユーザ定義のオブジェクトである場合( '__eq__'や' __hash__'メソッドが呼び出されるため)、 'dict'を適切に修正することはPythonでは常にスレッドセーフではなく、別のスレッドにGILを渡すこともできますアトミシティを混乱させる)。 – ShadowRanger