Aktywne Wpisy
sildenafil +536
Stanie na baczność w samych majtkach lub czasami bez przed urzędnikami państwowymi podczas przymusowych badań lekarskich w celu naznaczenia kategorią przydatności do użycia podczas wojny - czy jest coś bardziej pozbawiającego godności obywatelskiej?
Jesteśmy na półmetku tegorocznej kwalifikacji wojskowej. Jeszcze miesiąc. Powodzenia.
#kwalifikacjawojskowa #obowiazkowecwiczeniawojskowe #medycyna #pieklomezczyzn #dyskryminacjamezczyzn #wojsko #depresja
Jesteśmy na półmetku tegorocznej kwalifikacji wojskowej. Jeszcze miesiąc. Powodzenia.
#kwalifikacjawojskowa #obowiazkowecwiczeniawojskowe #medycyna #pieklomezczyzn #dyskryminacjamezczyzn #wojsko #depresja
Borg-Net +272
"PODŻEGACZ WOJENNY" to nowa linia ruskiej propagandy. Po wypowiedzi Macrona o wyslaniu wojsk na Ukraine, kazdy kto uwaza to za dobry pomysl jest napiętnowywany tym pejoratywnym okresleniem... kacapy musialy sie niezle zesrac na wiesc, ze kraje NATO aktywnie rozwazaja aktywna obrone na terenie Ukrainy :) Dlatego staraja sie oczernic kazdego kto uwaza, ze lepiej jest sie bronic na terenie Ukrainy niz we wlasnym kraju.
Te ruskie #!$%@? w trollowniach chyba nie znają
Te ruskie #!$%@? w trollowniach chyba nie znają
Powiedzmy, że mam takie 7 linijek kodu: https://pastebin.com/eqh6tDYu
Jak łatwo się domyślić przy większej liczbie wywołań, a nawet już przy dwóch jednoczesnych wyświetleniach strony coś może pójść nie tak:
wywołanie1 pobiera licznik z bazy: views=4
wywołanie1 zwiększa licznik o 1
wywołanie2 pobiera licznik z bazy: views=4
| już tu jest źle, aktualny licznik wynosi 5, ale nie został zapisany do bazywywołanie1 zapisuje licznik do bazy: views=5
wywołanie2 zwiększa licznik o 1
wywołanie2 chce zapisać do bazy: views=5
| a powinno być 6Chyba wiadomo o co mi chodzi. Jak tym się ładnie zająć, jak zapewnić integralność bazy? Jakie są do tego mechanizmy w Django?
Jeżeli to ma jakieś znaczenie to jako bazy używam Postrgresa.
#programowanie #python #django
Poczytaj ( ͡° ʖ̯ ͡°)
https://docs.djangoproject.com/en/1.11/ref/models/querysets/#select-for-update
https://docs.djangoproject.com/en/1.11/ref/models/expressions/#f-expressions
object.save() zrób na object.save(update_fields=['views']) bo jak przerzucisz to do workerów celerowych to ci się będzie instancje obiektu nadpisywać.
I dodaj może do FunnyWebsiteView metodę increment_views(self, delta=1) czy coś.
from django.db.models import F
counter = Counter.objects.get(website_name='Funny')
counter.views = F('views') + 1
counter.save()
Jeśli Twój silnik bazy danych wspiera atomiczność, możesz po prostu wykonać query na zasadzie SET counter = counter + 1
Jeśli wspiera transakcje - możesz zakładać transakcję ( czyli de facto lock ), ale nie polecam tego rozwiązania.