python多线程操作字典_在Python中使用带有线程的全局字典
Dirk..
52
假設CPython:是的,不是.從多個并發讀/寫請求不會破壞字典的意義上來說,從共享字典中獲取/存儲值實際上是安全的.這是由于實現維護的全局解釋器鎖("GIL").那是:
線程A運行:
a = global_dict["foo"]
線程B運行:
global_dict["bar"] = "hello"
線程C運行:
global_dict["baz"] = "world"
即使所有三次訪問嘗試都在"相同"時間發生,也不會破壞字典.解釋器將以某種未定義的方式序列化它們.
但是,以下序列的結果未定義:
線程A:
if "foo" not in global_dict:
global_dict["foo"] = 1
線程B:
global_dict["foo"] = 2
因為線程A中的測試/設置不是原子的("檢查時間/使用時間"競爭條件).所以,如果你鎖定東西通常是最好的:
from threading import RLock
lock = RLock()
def thread_A():
lock.acquire()
try:
if "foo" not in global_dict:
global_dict["foo"] = 1
finally:
lock.release()
def thread_B():
lock.acquire()
try:
global_dict["foo"] = 2
finally:
lock.release()
總結
以上是生活随笔為你收集整理的python多线程操作字典_在Python中使用带有线程的全局字典的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10一直在重启怎么办 win10系
- 下一篇: win7重启软件怎么安装不了怎么回事 w