12 votes

Est-ce que Shelve dans le fil Python est sûr ?

Est-ce que shelve en Python utilisé pour la persistance des données est thread safe ? Si non, quelle est une bonne alternative ?

14voto

Mahmoud Abdelkader Points 5622

De la la documentation de la bibliothèque standard concernant le module Shelve, sous le titre Restrictions :

En Le module d'étagère ne prend pas en charge l'accès simultané en lecture/écriture à objets mis en rayon. (Plusieurs accès en lecture simultanés sont sûrs).

Je suppose que cela dépend probablement de l'implémentation et dans ce cas, pour être sûr, je conclurais qu'il n'est certainement pas thread safe.

3voto

Andreas Jung Points 1

Alternatives : ZODB

http://www.zodb.org/

-1voto

AndrewE Points 27
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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X