L'étagère est-elle utilisée pour le fil de la persistance des données? Sinon, quelle est une bonne alternative? P>
3 Réponses :
Alternatives: ZODB P>
(de lien) (ZODB ...) Les transactions fournissent des transactions d'isolation permettent de multiples threads logiques (threads ou processus) pour accéder à des bases de données et la base de données empêche les threads de faire des changements contradictoires.
du Documentation de la bibliothèque standard sur le module d'étagère, sous la rubrique restrictions : p>
Le module d'étagère
ne prend pas en charge accès simultané / écriture strong> à objets rayonnés. (Plusieurs Les accès simultanés de lecture sont sûrs.) P> blockQuote> Je supposerais que c'est probablement une mise en œuvre probablement dépendante et, auquel cas, pour être sûr, je conclurais que cela n'est certainement pas le fil de sécurité. P>
Merci pour le commentaire. Dans les prochaines parties de la documentation, il est indiqué: "Lorsqu'un programme a une tablette ouverte pour écrire, aucun autre programme ne devrait l'avoir ouvert à la lecture ou à l'écriture. Unix Le verrouillage du fichier peut être utilisé pour résoudre ce problème, mais cela diffère entre les versions UNIX et nécessite des connaissances sur la mise en œuvre de la base de données utilisée. " - Ceci suggère que le module d'étagère n'est pas en sécurité à thread, à moins que vous n'ayez mis en œuvre votre propre mécanisme de verrouillage. Avez-vous un exemple qui démontre le contraire?
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
La question est de savoir si c'est sûr .. Comment votre code répond-il à la question?