[PyAthens] Thread-safe global
Orestis Markou
orestis at orestis.gr
Sun Jan 30 21:06:18 CET 2011
Καλησπέρα Αντώνη,
Καταρχήν - ναι υπάρχει: http://docs.python.org/library/threading.html#threading.local (ξεχωριστές τιμές για κάθε thread)
Καταδεύτερον - νομίζω ότι η προσέγγιση σου είναι λανθασμένη. Δύο εναλλακτικές από την κορφή του κεφαλιού μου (έχω καιρό να ασχοληθώ με αυτό το επίπεδο του ντζάνγκο, ελπίζω να βγαίνει νόημα):
Γιατί δεν ορίζεις συναρτήσεις στον manager που να του περνάς συγκεκριμένα το request.user;
class UserSavvyManager(...):
def get_rows_for_user(self, user):
pass
ή εναλλακτικά, όρισε στο model μια συνάρτηση που θα επιστρέφει έναν manager μόνο για αυτόν τον χρήστη (μπορείς να κάνεις και caching/memoization αν σε απασχολεί το performance):
class MyManager(Manager):
def __init__(self, user):
self.user = user
def get_query_set(self):
qs = Manager.get_query_set(self)
return qs.filter(user=self.user)
class MyModel(models.Model):
def get_objects(self, user):
manager = MyManager(user)
return manager
On 30 Jan 2011, at 20:45, Antonis Christofides wrote:
> Υπάρχει τρόπος να έχω κάτι που να μοιάζει με global variable αλλά να
> είναι thread safe; Δηλαδή να μπορώ να του ορίσω μια τιμή (ενδεχομένως
> καλώντας μια συνάρτηση) και αργότερα να μπορώ να ανακτήσω αυτή την
> τιμή (ενδεχομένως καλώντας μια άλλη συνάρτηση);
>
> Αυτό που προσπαθώ να κάνω είναι ένα manager στο django που να έχει
> πρόσβαση στο request object, και ο λόγος για τον οποίο θέλω να το κάνω
> αυτό είναι γιατί θέλω ο manager να επιστρέφει μόνο τα αντικείμενα στα
> οποία έχει δικαίωμα πρόσβασης ο request.user, έτσι ώστε τα περμίσια να
> τακτοποιούνται σε χαμηλό επίπεδο.
>
> Έχω σκεφτεί ένα τρόπο να το κάνω, αλλά υποψιάζομαι ότι κάποιοι το
> έχουν ήδη κάνει, οπότε να μην επανεφευρίσκω τον τροχό.
>
> _______________________________________________
> PyAthens mailing list
> PyAthens at python.org
> http://mail.python.org/mailman/listinfo/pyathens
More information about the Python-greece
mailing list