11

Pythonのシェルフはデータ永続化スレッドセーフに使用されていますか?そうでない場合、良い代替手段は何ですか?

4

3 に答える 3

13

Shelveモジュールに関する標準ライブラリのドキュメントから、「制限」という見出しの下にあります。

シェルフモジュールは、シェルフされたオブジェクトへの同時読み取り/書き込みアクセスをサポートしていません。(複数の同時読み取りアクセスは安全です。)

おそらく実装に依存していると思いますが、その場合、確かに、スレッドセーフではないと結論付けます。

于 2011-03-04T08:29:42.330 に答える
3

代替案:ZODB

http://www.zodb.org/

于 2011-03-04T03:04:58.403 に答える
-1
Threads = # amount of threads

thread_moment = [False for _ in range(Threads)] 

def job(x):  # x would be the index of the thread  

    lock.aquire()

    # open/edit/update/close your shelve file

    thread_moment[x] = True 

    lock.release()

    while True:
        if all(thread_moment) == True:
            thread_moment = [False for _ in range(threads)]
            break
        else:
            time.sleep(1)

    # carry on with your script
于 2021-08-12T17:48:19.630 に答える