Войти
ПрограммированиеФорумВеб

django pgsql block update

#0
20:27, 15 окт. 2015
from django.http import JsonResponse
from game.models import unit,player
from django.db import connection

def send_units_list(request):
    cursor=connection.cursor()
    j={}
    p=player.objects.get(user=request.user)
    cursor.execute("""select max(a1) from (
      select count(*) as a1 from game_unit 
      where user_id=%s and in_move is null group by x_pos,y_pos) as foo;""",
      [p.user.pk])
    j["max"]=cursor.fetchone()[0]
    cursor.execute("""select x_pos,y_pos,count(*) from game_unit
      where user_id=%s and in_move is null group by x_pos,y_pos;""",[p.user.pk])
    j["own"]=cursor.fetchall()
    cursor.execute("""select id,x_pos,y_pos from game_unit
      where user_id=%s and in_move is null order by id;""",[p.user.pk])
    j["own_units_pos"]=cursor.fetchall()
    return JsonResponse(j)

вот этот код отсылает аяксу новые позиции юнитов
одновременно с ним раз в секунду выполняется standalone django скрипт,
который апдейтит game_unit таблицу

как отложить выполнение send_units_list до того как выполниться обновление
таблицы и отложить обновление таблицы до того как выполниться send_units_list?

зы читал про лок, но ничего не понял :(


#1
18:13, 16 окт. 2015

попробую lock game_unit in access share mode для send_unit_list, он не тормазит другие селект запросы, но lock game_unit in access exclusive будет залочен до окончания транзакции с селект

для update standalone скрипта вроде подойдет: lock game_unit in access exclusive mode, он вроде лочит даже селект запросы

не знаю только как проверить правльно ли я выбрал типы локов и можно ли переключится в одной транзакции с access share на access exclusive при переходе от селекта к апдейту?

ПрограммированиеФорумВеб

Тема в архиве.