Форум сайта python.su
0
с лок файлами тоже не хотелось бы сделать, таких разных статистик уже 6 штук, и возможно будут увеличиваться :)
впрочем тоже решение, да.
хм, я тут подумал, тут еще один глюк может быть:
2 процесса одновременно забирают объект статистики из memcached, и одновременно его обновляют на +1.
в итоге статистика обновится всего лишь на +1, а не на +2.
Офлайн
13
LestatChebНасколько я помню у memcache есть atomic increment. Вы разве не его пользуете?
хм, я тут подумал, тут еще один глюк может быть:
2 процесса одновременно забирают объект статистики из memcached, и одновременно его обновляют на +1.
в итоге статистика обновится всего лишь на +1, а не на +2.
Офлайн
0
Edмм.. а atomic increment только для чисел ведь,LestatChebНасколько я помню у memcache есть atomic increment. Вы разве не его пользуете?
хм, я тут подумал, тут еще один глюк может быть:
2 процесса одновременно забирают объект статистики из memcached, и одновременно его обновляют на +1.
в итоге статистика обновится всего лишь на +1, а не на +2.
Офлайн
14
Не хотите atomic increment - вспомните, что memcache держит compare and swap
Офлайн
13
LestatChebДля объектов на одном хосте я бы попользовал http://docs.djangoproject.com/en/dev/topics/cache/#local-memory-caching
мм.. а atomic increment только для чисел ведь,
а у меня в memcached питоновский объект с параметрами shows и clicks.
я могу конечно переделать на числа, скажем bstat_id_555_clicks и bstat_id_555_shows и делать им инкремент.
но это будет ли правильным? а если у объекта было бы 100 параметров, то держать 100 чисел в memcached?
или скажем нужно было не число менять, а список или текст изменять.
Офлайн
0
хм, нашел на просторах интернета такую вещь http://jbq.caraldi.com/2010/08/simple-distributed-lock-with-memcached.html
сейчас проверил, вроде работает, думаю остановиться пока на ней.
Офлайн
13
Поосторожнее там с expiration time, иначе если процесс, поставивший лок, умрет, то остальные будут ждать эти 60000 секунд пока ключ не заэкспайрится.
Офлайн
0
Edхм, и правда, тогда уменьшу это значение.
Поосторожнее там с expiration time, иначе если процесс, поставивший лок, умрет, то остальные будут ждать эти 60000 секунд пока ключ не заэкспайрится.
Отредактировано (Янв. 27, 2011 20:38:58)
Офлайн
0
все-таки на рабочем сервере не прокатило, слишком медленно,
переделал сбор статистики на асинхронные задания в Celery и все полетело :)
Офлайн