[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