Est-ce que shelve en Python utilisé pour la persistance des données est thread safe ? Si non, quelle est une bonne alternative ?
Réponses
Trop de publicités?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.
Andreas Jung
Points
1
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